Nginx安装以及配置文件

Nginx安装以及配置文件

Nginx功能概述:

HTTP基础功能:

  • 处理静态文件,索引文件以及自动索引;
  • 反向代理加速(无缓存),简单的负载均衡和容错;
  • FastCGI,简单的负载均衡和容错;
  • 模块化的结构,包括gzipping,byte ranges,chunked responses,以及SSI-filter。在SSI过滤器中,到同一个proxy或者FastCGI的多个子请求并发处理;
  • SSL和TLS SNI 支持;

IMAP/POP3代理服务功能:

  • 使用外部HTTP认证服务器重定向用户到IMPA/POP3后端;
  • 使用外部HTTP认证服务器认证用户后连接重定向到内部的SMTP后端;
  • 认证方法:
  • POP3:POP3 USER/PASS,APOP,AUTH LOGIN PLAIN CRAM-MD5;
  • IMAP:IMAP LOGIN;
  • SMTP:AUTH LOGIN PLAIN CRAM-MD5;
  • SSL支持;
  • 在IMAP和POP3模式下的STARTTLS和STLS支持;

支持的操作系统:

  • FreeBSD 3.x, 4.x, 5.x, 6.x i386; FreeBSD 5.x, 6.x amd64;
  • Linux 2.2, 2.4, 2.6 i386; Linux 2.6 amd64;
  • Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386;
  • MacOS X (10.4) PPC;

结构与扩展:

  • 一个主进程和多个工作进程。工作晋城市单线程的,且不需要特殊授权即可运行;
  • kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), select, 以及 poll 支持;
  • kqueue支持的不同功能包括 EV_CLEAR, EV_DISABLE (临时禁止事件), NOTE_LOWAT, EV_EOF,有效数据的数目,错误代码;
  • sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+), 和 sendfilev (Solaris 87/01+) 支持;
  • 输入过滤 (FreeBSD 4.1+) 以及 TCP_DEFER_ACCEPT (Linux 2.4+) 支持;
  • 10,000 非活动的 HTTP keep-alive 连接仅需要 2.5M 内存。
  • 最小化的数据拷贝操作;

其他HTTP功能:

  • 基于IP和名称的虚拟主机服务;
  • Memcached的GET接口;
  • 支持keep-alive的管道连接;
  • 灵活简单的配置;
  • 重新配置和在线升级而无需中断客户的工作进程;
  • 可定制的访问日志,日志写入缓存,以及快捷的日志回卷;
  • 4xx-5xx错误代码重定向;
  • 基于PCRE的rewrite重写模块;
  • 基于客户端的IP地址和HTTP基本认证的访问控制;
  • PUT,DELETE和MKCOL方法;
  • 支持FLV(Flash视频);
  • 带宽限制;

实验特性:

  • 内嵌的perl;
  • 通过 aio_read()/aio_write()的套接字工作的实验模块,仅在FreeBSD下。
  • 对线程的实验化支持,FreeBSD 4.x的实现基于rdork();

为什么选择Nginx

Nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:

作为Web服务器: 相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx收到了虚拟主机提供商的欢迎,能够高达50,000个并发连接数请求的响应。Nginx使用epoll & kqueue作为开发模型。

作为负载均衡器: Nginx既可以在内部支持Rails和PHP,也可以支持作为HTTP代理服务器对外进行服务。Nginx用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好得多。

作为邮件代理服务器: Nginx勇士也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),

Nginx安装非常简单,配合文件非常简洁(还支持perl语法),Bugs非常少的服务器::Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。还能够在不间断服务的情况下进行软件版本的升级。

安装Nginx

Nginx官网http://nginx.org/

Nginx官网提供了三个类型的版本:

Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版

当前稳定版:nginx-1.12.0

安装方法:

  1. 编译安装
  2. 直接从yum仓库安装

官网给出的预编译包yum源配置文档:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Pre-Built Packages for Stable version
To set up the yum repository for RHEL/CentOS, create the file named
/etc/yum.repos.d/nginx.repo with the following contents:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
Replace “OS” with “rhel” or “centos”, depending on the distribution used, and “OSRELEASE”
with “6” or “7”, for 6.x or 7.x versions, respectively.
把"OS"替换为"rhel"或者"centos"。这取决于你所使用的。把"OSRELEASE"替换为"6"或者"7"分别为"6.x"和"7.x"的版本。

ps:在Centos7中。安装光盘中的yum仓库已经内置Nginx的安装包,直接yum安装即可。

编译安装:

  1. 准备编译环境

    ~]# yum groupinstall “Development Tools” “Server Platform Development”
    ~]# yum install pcre-devel openssl-devel zlib-devel

  2. 创建Nginx执行用户

    ~]# useradd -r nginx

  3. 安装Nginx

    ~]# tar -zxvf nginx-1.x.tar.gz

    ~]# cd nginx-1.x/

    ~]# ./configure

    --prefix=/usr/local/nginx 
    
    --conf-path=/etc/nginx/nginx.conf
    
    --error-log-path=/var/log/nginx/error.log
    
    --http-log-path=/var/log/nginx/access.log
    
    --pid-path=/var/run/nginx.pid
    
    --lock-path=/var/run/nginx.lock
    
    --user=nginx --group=nginx 
    
    --with-http_ssl_module 
    
    --with-http_v2_module 
    
    --with-http_dav_module 
    
    --with-http_stub_status_module 
    
    --with-threads 
    
    --with-file-aio
    

    ~]# make

    ~]# make install

使用nginx -V来查看安装了那些模块。

ps:此处配置仅为本次实验有效,具体配置,视生产情况而定。使用./configure –help,可以查看Nginx支持那些选项。

  1. 自定义unit文件

    路径:/usr/lib/systemd/system/nginx.service

ps:此文件需手动配置可以设置开机自启。此操作仅编译安装时使用。

  1. 启动nginx

    ~]# systemctl start nginx

    ~]# 绝对路径下/nginx/sbin/nginx -c 绝对路径下/nginx/conf/nginx.conf

使用ss -tnl查看80端口是否存在,存在则启动成功。

Nginx配置文件

Nginx主配置文件是nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
#用户
user nginx;
#工作进程数
worker_processes auto;
#错误日志存放路径
error_log /var/log/nginx/error.log;
#定义进程pid
pid /run/nginx.pid;
#可动态装载的模块,怎么装载,装在哪些,都是/usr/share/nginx/modules/*.conf
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
#配置事件驱动模型=一个进程响应1024个请求。当前主机一共可响应请求数=worker_processes*worker_connections
events {
worker_connections 1024;
}
#配置http服务,在server外,所有server共用,在server内,仅当前server启用
http {
#访问日志的日志格式
#main 格式名称
#$remote_addr 客户端地址
#$remote_user 客户端远程用户
#$time_local 本地时间
#$request 请求,可以理解为URL,请求报文的起始行<method><URL><VERSION>
#$status 状态响应码
#$body_bytes_sent 报文主体字节数
#$http_referer 引用,从哪来,怎么到当前地址的
#$http_user_agent 客户端代理,用的是什么浏览器
#$http_x_forwarded_for 代理服务器,代理转发地址
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#访问日志文件路径 调用文件格式
access_log /var/log/nginx/access.log main;
#下面几个用来控制网络连接功能的
#内核直接封装响应报文,不经过用户空间,可以提升性能
sendfile on;
#
tcp_nopush on;
tcp_nodelay on;
#保持连接。超时时长
keepalive_timeout 65;
types_hash_max_size 2048;
#包含那种mime类型 默认类型,把每个文件识别成8进制的数据流
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
#模块化配置,可以把自定义的虚拟主机放到此目录下
include /etc/nginx/conf.d/*.conf;
#一个server代表一个虚拟主机
server {
#监听的端口,指令可以使用多次
listen 80 default_server; #默认虚拟主机
listen [::]:80 default_server;
#主机名
server_name _;
#默认网页/路径
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
#自定义配置
location / {
}
#自定义错误页
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
#https工作配置
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}

配置文件:

主配置文件的配置指令:

directive value [value2 ...];

注意:
    (1) 指令必须以分号结尾;
    (2) 支持使用配置变量;
        内建变量:由Nginx模块引入,可直接引用;
        自定义变量:由用户使用set命令定义;
            set variable_name value;
            引用变量:$variable_name

主配置文件结构:

main block:主配置段,也即全局配置段;

event {
        ...
    }:事件驱动相关的配置;

http {
    ...
}:http/https 协议相关的配置段;

mail {
    ...
}
stream {
    ...
}                

http协议相关的配置结构:

http {
    ...
    ...:
    各server的公共配置

    server {
        ...
    }:
    每个server用于定义一个虚拟主机;

    server {
        ...
        listen 
        server_name
        root
        alias
        location [OPERATOR] URL {
            ...
            if CONDITION {
                ...
            }
        }
    }
}
<% if (theme.canvas_nest) { %> <% } %> s