Nginx安装与配置
Nginx是一款是由俄罗斯的程序设计师Igor Sysoev所开发的高性能的异步框架的Web服务器,也可以用作反向代理,负载均衡和HTTP缓存,也是一个 IMAP/POP3/SMTP 代理服务器。
官网:https://nginx.org/en/
中文文档:http://www.nginx.cn/doc/
下载地址:http://nginx.org/
安装环境
系统环境:centos 7
nginx版本:nginx-1.14.2
安装编译工具及库文件
1
[root@localhost /]# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
部分编译环境&库说明:
- zlib:zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库
- gcc:安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc
- openssl:OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
- PCRE:PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
下载安装包
Nginx版本分为发行版和稳定版,这里以稳定版为例。
下载地址:http://nginx.org/ 本次系统环境为linux,所以需下载“.tar.gz”结尾的源码安装包
首先进入文件系统”/opt/”目录中新建文件夹:nginx-1.14.2,将下载好的安装包上传至该目录中并解压。
(这里新建的文件夹不要使用“nginx”,后面编译时系统会自动生成“nginx”文件夹,会产生冲突导致make失败)
1
2
3
4
[root@localhost /]# cd /opt
[root@localhost opt]# mkdir nginx-1.14.2
[root@localhost opt]# cd nginx-1.14.2/
[root@localhost nginx-1.14.2]# tar zxvf nginx-1.14.2.tar.gz
解压完之后进入nginx目录查看信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost nginx-1.14.2]# cd nginx-1.14.2/
[root@localhost nginx-1.14.2]# ls -l
total 728
drwxr-xr-x 6 1001 1001 326 Jan 23 14:14 auto
-rw-r--r-- 1 1001 1001 288742 Dec 4 22:52 CHANGES
-rw-r--r-- 1 1001 1001 440121 Dec 4 22:52 CHANGES.ru
drwxr-xr-x 2 1001 1001 168 Jan 23 14:14 conf
-rwxr-xr-x 1 1001 1001 2502 Dec 4 22:52 configure
drwxr-xr-x 4 1001 1001 72 Jan 23 14:14 contrib
drwxr-xr-x 2 1001 1001 40 Jan 23 14:14 html
-rw-r--r-- 1 1001 1001 1397 Dec 4 22:52 LICENSE
drwxr-xr-x 2 1001 1001 21 Jan 23 14:14 man
-rw-r--r-- 1 1001 1001 49 Dec 4 22:52 README
drwxr-xr-x 9 1001 1001 91 Jan 23 14:14 src
部分文件和目录介绍:
- src:存放了 Nginx软件的所有源代码。
- core:nginx的核心源代码,包括常用数据结构的定义,以及nginx初始化运行的核心代码如main函数
- event:对系统事件处理机制的封装,以及定时器的实现相关代码
- modules:不同事件处理方式的模块化,如select、poll、epoll、kqueue等
- http:nginx作为http服务器相关的代码
- modules:包含http的各种功能模块
- mail:nginx作为邮件代理服务器相关的代码
- misc:一些辅助代码,测试c++头的兼容性,以及对google_perftools的支持
- os:主要是对各种不同体系统结构所提供的系统函数的封装,对外提供统一的系统调用接口
- man:存放了Nginx 软件的帮助文档,Nginx 安装完成后,使用 man 命令可以查看。
- html:存放了两个后缀名为.html的静态网页文件。这两个文件与 Nginx服务器的运行相关。
- conf:存放的是Nginx 服务器的配置文件,包含 Nginx服务器的基本配置文件和对部分特性的配置文件。
- cc:关于编译器相关的编译选项的检测脚本
- lib:nginx编译所需要的一些库的检测脚本
- os:与平台相关的一些系统参数与系统调用相关的检测
- types:与数据类型相关的一些辅助脚本
- auto:存放了大量脚本文件,和configure脚本程序有关。
- configure文件是 Nginx软件的自动脚本程序。运行 configure自动脚本一般会完成两项工作:一是检查环境,根据环境检查结果生成 C 代码;二是生成编译代码需要的Makefile 文件。
Nginx源码编译和安装
使用以下命令配置并生成Makefile 文件
1
[root@localhost nginx-1.14.2]# ./configure --prefix=/opt/nginx/nginx-1.14.2
得到了 Nginx 的 Makefile 文件后使用 make 文件进行编译
1
[root@localhost nginx-1.14.2]# make
编译完成后,使用 make 的 install命令安装 nginx软件
1
[root@localhost nginx-1.14.2]# make install
命令运行完成后,将当前目录定位到/nginx下,可以查看 Nginx服务器安装后的全部资源
1
2
3
4
5
6
7
[root@localhost nginx-1.14.2]# cd /opt/nginx/nginx-1.14.2/
[root@localhost nginx-1.14.2]# ls -l
total 0
drwxr-xr-x 2 root root 333 Jan 23 16:21 conf
drwxr-xr-x 2 root root 40 Jan 23 16:21 html
drwxr-xr-x 2 root root 6 Jan 23 16:21 logs
drwxr-xr-x 2 root root 19 Jan 23 16:21 sbin
目录介绍:
- conf:存放了所有配置文件。其中,nginx.conf文件是 Nginx服务器的主配置文件,其它配置文件是用来配置Nginx 的相关功能的。在此目录下,所有的配置文件都提供了以.default结尾的默认配置文件,方便我们将配置过的.conf文件恢复到初始状态。
- html:存放了Nginx服务器在运行过程中调用的一些 html 文件。
- logs:用来存放Nginx服务器日志的。
- sbin:目前只有nginx一个文件,这就是Nginx服务器的主程序了。
Nginx服务的启动暂停控制
Nginx服务的启动
在 Linux 平台下,启动 Nginx 服务器直接运行安装目录下 sbin目录中的二进制文件即可。
二进制文件 nginx 的相关用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost nginx-1.14.2]# ./sbin/nginx -h
nginx version: nginx/1.14.2
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help --显示帮助信息
-v : show version and exit --打印版本号并退出
-V : show version and configure options then exit --打印版本号和配置并退出
-t : test configuration and exit --测试配置正确性并退出
-T : test configuration, dump it and exit --测试配置正确性&打印配置并退出
-q : suppress non-error messages during configuration testing --测试配置时只显示错误
-s signal : send signal to a master process: stop, quit, reopen, reload --向主进程发送信号
-p prefix : set prefix path (default: /opt/nginx/nginx-1.14.2/) --指定 Nginx 服务器路径前缀
-c filename : set configuration file (default: conf/nginx.conf) --指定 Nginx 配置文件路径
-g directives : set global directives out of configuration file --指定 Nginx附加配置文件路径
Nginx服务启动&查看进程:
1
2
3
4
5
[root@localhost nginx-1.14.2]# ./sbin/nginx
[root@localhost nginx-1.14.2]# ps aux|grep nginx
root 53487 0.0 0.0 20488 604 ? Ss 17:06 0:00 nginx: master process ./sbin/nginx
nobody 53488 0.0 0.0 23016 1380 ? S 17:06 0:00 nginx: worker process
root 53501 0.0 0.0 112648 956 pts/0 S+ 17:07 0:00 grep --color=auto nginx
Nginx服务的停止
停止 Nginx 有两种方法:一种是快速停止;一种是平缓停止。快速停止是指立即停止当前Nginx 服务正在处理的所有网络请求,马上丢弃连接,停止工作;平缓停止是指允许 Nginx服务将当前正在处理的网络请求处理完成,但不再接受新的请求,之后关闭连接,停止工作。
快速停止:
Nginx提供的停止服务
1
[root@localhost nginx-1.14.2]# ./sbin/nginx -s stop
kill命令停止服务
kill命令有很多种,这里例举“-INT”、“-TERM”命令,其他方式请参阅linux kill命令使用说明。
linux命令大全(手册):http://man.linuxde.net/
方式1:kill -INT
1
2
3
4
5
6
7
[root@localhost nginx-1.14.2]# ps aux|grep nginx
root 53487 0.0 0.0 20488 604 ? Ss Jan23 0:00 nginx: master process ./sbin/nginx
nobody 53488 0.0 0.0 23016 1380 ? S Jan23 0:00 nginx: worker process
root 66121 0.0 0.0 112648 960 pts/0 S+ 08:57 0:00 grep --color=auto nginx
[root@localhost nginx-1.14.2]# kill -INT 53487
[root@localhost nginx-1.14.2]# ps aux|grep nginx
root 67679 0.0 0.0 112648 960 pts/0 S+ 11:35 0:00 grep --color=auto nginx
方式2:kill -TERM
1
2
3
4
5
6
7
[root@localhost nginx-1.14.2]# ps aux|grep nginx
root 67689 0.0 0.0 20488 608 ? Ss 11:36 0:00 nginx: master process ./sbin/nginx
nobody 67690 0.0 0.0 23016 1380 ? S 11:36 0:00 nginx: worker process
root 67700 0.0 0.0 112648 960 pts/0 S+ 11:36 0:00 grep --color=auto nginx
[root@localhost nginx-1.14.2]# kill -TERM 67689
[root@localhost nginx-1.14.2]# ps aux|grep nginx
root 67703 0.0 0.0 112648 960 pts/0 S+ 11:37 0:00 grep --color=auto nginx
平缓停止:kill -QUIT
1
2
3
4
5
6
7
[root@localhost nginx-1.14.2]# ps aux|grep nginx
root 67713 0.0 0.0 20488 612 ? Ss 11:38 0:00 nginx: master process ./sbin/nginx
nobody 67714 0.0 0.0 23016 1384 ? S 11:38 0:00 nginx: worker process
root 67716 0.0 0.0 112648 960 pts/0 S+ 11:38 0:00 grep --color=auto nginx
[root@localhost nginx-1.14.2]# kill -QUIT 67713
[root@localhost nginx-1.14.2]# ps aux|grep nginx
root 67726 0.0 0.0 112648 956 pts/0 S+ 11:39 0:00 grep --color=auto nginx
Nginx服务的重启
重启Nginx有两种方式:一种是平滑重启,一种是普通重启。平滑重启是这样一个过程,Nginx服务进程接受到信号后,首先读取新的Nginx 配置文件,如果配置语法正确,则启动新的 Nginx 服务,然后平滑关闭旧的服务进程;如果新的 Nginx 配置有问题,将显示错误,仍然使用旧的Nginx进程提供服务;普通重启则类似于先停止再启动的一种过程,直接结束当前进程,读取配置进行启动。
普通重启
1
[root@localhost nginx-1.14.2]# ./sbin/nginx -s reload
平滑重启
检查配置文件正确性,分两种检查模式,一种是nginx默认的配置文件,一种是自定义的放在其他路径下的配置文件。
默认检查(检查nginx默认路径下的配置文件)
1
2
3
[root@localhost nginx-1.14.2]# ./sbin/nginx -t
nginx: the configuration file /opt/nginx/nginx-1.14.2/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/nginx-1.14.2/conf/nginx.conf test is successful
指定检查自定义的配置文件
1
2
3
[root@localhost nginx-1.14.2]# ./sbin/nginx -t -c /opt/nginx-1.14.2/nginx-1.14.2/conf/nginx.conf
nginx: the configuration file /opt/nginx-1.14.2/nginx-1.14.2/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx-1.14.2/nginx-1.14.2/conf/nginx.conf test is successful
重启
1
[root@localhost nginx-1.14.2]# kill -HUP 进程号
Nginx服务器的升级
平滑升级的过程是这样的,Nginx 服务接受到USR2信号后,首先将旧的nginx.pid文件(如果在配置文件中更改过这个文件的名字,也是相同的过程)添加后缀.oldbin,变为nginx.pid.oldbin文件;然后执行新版本Nginx 服务器的二进制文件启动服务。如果新的服务启动成功,系统中将有新旧两个 Nginx 服务共同提供 web 服务。之后,需要向旧的Nginx 服务进程发送WINCH 信号,使旧的Nginx 服务平滑停止,并删除nginx.pid.oldbin文件。在发送WINCH信号之前,可以随时停止新的 Nginx 服务。 注意:为了实现Nginx服务器的平滑升级,新的服务器安装路径应该和旧的保持一致。因此建议用户在安装新服务器之前先备份旧服务器。
做好准备工作以后,使用以下命令实现Nginx服务的平滑升级:
1
[root@localhost nginx-1.14.2]# ./sbin/Nginx -g USR2
其中,USR2信号用于发送平滑升级信号。或者,使用:
1
[root@localhost nginx-1.14.2]# kill USR2 `/Nginx/logs/nginx.pid`
通过ps ef | grep nginx查看新的Nginx服务启动正常,再使用: |
1
[root@localhost nginx-1.14.2]# ./sbin/Nginx -g WINCH
其中,WINCH 信号用于发送平滑停止旧服务信号。或者,使用:
1
[root@localhost nginx-1.14.2]# kill WINCH `/Nginx/logs/nginx.pid`
这样就在不停止提供Web 服务的前提下完成了 Nginx服务器的平滑升级。
Nginx.conf的内容和基本配置方法
默认的Nginx.conf文件内容
默认的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
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
nginx.conf文件的结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
... #全局块
events{ #events 块
...
}
http{ #http 块
... #http 全局块
server{ #server 块
... #server 全局块
location [PATTERN]{ #location 块
...
}
location [PATTERN]{ #location 块
...
}
}
server{ #server 块
...
}
... #http 全局块
}
配置文件支持大量可配置的指令,绝大多数指令不是特定属于某一个块的。同一个指令放在不同层级的块中,其作用域也不同,一般情况下,高一级块的指令可以作用于自身所在的块和此块包含的所有低层级块。如果某个指令在两个不同层级的块中同时出现,则采用“就近原则”,即以较低层级的块中的配置为准。比如,某指令同时出现在http全局块中和 server 块中,并且配置不同,则应该以 server 块中的配置为准。 各个块的作用如下: 1.全局块 全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。 通常包括配置运行Nginx 服务器的用户(组)、允许生成的worker process数、Nginx 进程 PID存放路径、日志的存放路径和类型以及配置文件引入等。 2.events 块 events 块涉及的指令主要影响Nginx 服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个 worker process可以同时支持的最大连接数等。 这一部分指令对 Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。 3.http 块 http块是Nginx 服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块。可以在 http全局块中配置的指令包括文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接q 请求数上限等。 4.server 块 server 块和“虚拟主机”的概念有密切联系。在 server 全局块中,最常见的两个配置项是本虚拟主机的监听配置和本虚拟主机的名称或 IP 配置。 5.location 块 location 块的主要作用是,基于Nginx服务器接受到的q 请求字符串,对除虚拟主机名称之外的字符串j 进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能。
配置允许生成的worker process数
worker process是 Nginx服务器实现并发处理服务的关键所在。从理论上来说,worker process的值越大,可以支持的并发处理量也越多,但实际上它还要受到来自软件本身、操作系统本身资源和能力、硬件设备等的制约。 配置允许生成的worker process数的指令是worker_processes,此指令只能在全局块中设置,其语法格式为:
1
2
3
4
worker_processes number | auto;
number,指定 Nginxj 进程最多可以产生的worker process数。
auto,设置此值,Nginx进程将自动检测。
示例:
默认配置情况:
1
2
3
4
[root@localhost nginx-1.14.2]# ps aux|grep nginx
nobody 21060 0.0 0.0 23004 1480 ? S 10:28 0:00 nginx: worker process
root 21062 0.0 0.0 112648 960 pts/0 S+ 10:28 0:00 grep --color=auto nginx
root 70306 0.0 0.0 20488 1372 ? Ss Jan24 0:00 nginx: master process ./sbin/nginx
修改worker process
1.打开配置文件
1
[root@localhost nginx-1.14.2]# vim ./conf/nginx.conf
2.按下键盘“Insert”键进入编辑模式,修改worker_processes的值为3
1
2
#user nobody;
worker_processes 3;
3.保存编辑好的配置文件,按下键盘“Esc”键,然后输入“:wq”退出并保存,重启nginx之后再次查看服务
1
2
3
4
5
6
7
[root@localhost nginx-1.14.2]# ./sbin/nginx -s reload
[root@localhost nginx-1.14.2]# ps aux|grep nginx
nobody 21125 0.0 0.0 23020 1400 ? S 10:35 0:00 nginx: worker process
nobody 21126 0.0 0.0 23020 1400 ? S 10:35 0:00 nginx: worker process
nobody 21127 0.0 0.0 23020 1400 ? S 10:35 0:00 nginx: worker process
root 21129 0.0 0.0 112648 960 pts/0 S+ 10:35 0:00 grep --color=auto nginx
root 70306 0.0 0.0 20488 1372 ? Ss Jan24 0:00 nginx: master process ./sbin/nginx
这时候会看到比默认配置除了主进程之外多了两个新的worker process
配置Nginx进程PID存放路径
Nginx进程作为系统的守护进程,我们需要在某文件中保存当前运行程序的主进程号。Nginx 支持对它的存放路径进行自定义配置,指令是 pid,此指令只能在全局块中进行配置,其语法格式为:
1
2
pid file;
其中,file 指定存放路径和文件名称。
配置文件默认将此文件存放在Nginx 安装目录 logs下,名字为nginx.pid。path 可以是绝对路径也可以是以 Nginx安装目录为根目录的相对路径。
再次打开配置文件可以看到默认的pid配置路径
1
#pid logs/nginx.pid;
这时将其路径指向修改为自定义路径
1
2
#pid logs/nginx.pid;
pid sbin/web_nainx;
打开sbin文件夹,这时会多出一份名为“web_nginx”的文件,就是刚才自定义存放的Pid文件
1
2
3
4
5
[root@localhost nginx-1.14.2]# cd ./sbin
[root@localhost sbin]# ls -l
total 3664
-rwxr-xr-x 1 root root 3746688 Jan 23 16:21 nginx
-rw-r--r-- 1 root root 6 Jan 30 10:52 web_nainx
注意:使用此指令时需先关闭nginx,否则修改完文件重启或停止Nginx服务时都会报错
1
nginx: [error] open() "/opt/nginx/nginx-1.14.2/sbin/web_nainx" failed (2: No such file or directory)
配置错误日志的存放路径
在全局块、http 块和 Server 块都可以对Nginx服务器的日志进行相关配置。使用的指令是error_log,其语法结构是:
1
error_log file | stderr [debug | info | notice | warn | error | crit | alert | emerg];
Nginx服务器的日志支持输出到某一固定的文件file 或者输出到标准错误输出stderr。 Nginx默认的日志存放和级别设置:
1
2
3
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
配置文件的引入
Nginx 提供了include指令来完成配置文件的引入,此指令可以放在配置文件的任意地方,其语法结构为:
1
2
include file;
file是要引入的配置文件,它支持相对路径
设置网络连接的序列化
Nginx配置中包含了这样一条指令 accept_mutex,当其设置为开启的时候,将会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢。其语法结构为:
1
accept_mutex on | off;
此指令默认为开启(on)状态,其只能在events块中进行配置。
设置是否允许同时接收多个网络连接
每个 Nginx 服务器的worker process 都有能力同时接收多个新到达的网络连接,但是这需要在配置文件中进行设置,其指令为 multi_accept,语法结构为:
1
multi_accept on | off
此指令默认为关闭(off)状态,即每个 worker process一次只能接收一个新到达的网络连接。此指令只能在events块中进行配置。
事件驱动模型的选择
Nginx服务器提供了多种事件驱动模型来处理网络消息。指令为 use,此指令只能在events块中进行配置,语法结构为:
1
2
use method;
其中,method可选择的内容有:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport。
配置最大连接数
指令worker_connections主要用来设置允许每一个worker process同时开启的最大连接数,此指令只能在events块中进行配置,其语法结构为:
1
worker_connections number;
此指令的默认设置为1024。 注意:这里的 Number不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number 值不能大于操作系统支持打开的最大文件句柄数量。
定义MIME-Type
在默认的Nginx 配置文件中,http全局块中有以下两行配置:
1
2
include mime.types; #以下指令在 http部分中生效
default_type application/octet-stream;
第一行从外部引用了mime_types文件,看一下它的内容:
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
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
application/font-woff woff;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
第二行中使用指令default_type配置了用于处理前端请求的 MIME类型,其语法结构为:
1
default_type mime-type;
其中,mime-type为 types 块中定义的MIME-type,如果不加此指令,默认值为text/plain。此指令还可以在 http 块、server 块或者location块中进行配置。
自定义服务日志
errer_log指令用于配置Nginx 进程运行时的日志存放和级别,此处所指的日志是指记录Nginx服务器提供服务过程应答前端要求的日志,我们将其称为服务日志。 Nginx 服务器支持对服务日志的格式、大小、输出等进行配置,需要使用两个指令,分别是access_log和 log_format 指令,此指令只能在 http 块中进行配置。 access_log指令的语法结构为:
1
2
3
4
5
access_log path [format [buffer=size]];
path:配置服务日志的文件存放路径和名称。
format:可选项,自定义服务日志的格式字符串,也可以通过“格式串的名称”使用log_format指令定义好的格式。“格式串的名称”在log_format指令中定义。
size:配置临时存放日志的内存缓存区大小。
此指令可以在http、Server块或者 location 块中进行设置。默认的配置为:
1
access_log logs/access.log combined;
其中,combined为log_format指令默认定义的日志格式字符串的名称。 如果要取消记录服务日志的功能,则使用:
1
access_log off;
和 access_log联合使用的另一个指令是log_format,它专门用于定义服务日志的格式,并且可以为格式字符串定义一个名字,以便access_log指令可以直接调用。其语法格式为:
1
2
3
4
log_format name string ...;
name:格式字符串的名字,默认的名字为combined。
string:服务日志的格式字符串。可以使用 Nginx配置项预设的一些变量获取相关内容,变量的名称使用双引号括起来,string 整体使用单引号括起来。
配置允许sendfile 方式传输文件
用于开启或关闭使用sendfile传输文件指令:
1
sendfile on | off;
默认值为 off,可以在 http 块、server 块或者location块中进行配置。
1
sendfile_max_chunk size;
其中,size 值如果大于0,Nginx进程的每个worker process每次调用sendfile传输的数据量最大不能超过这个值;如果设置为0,则无限制。默认值为0.此指令可以在http块、server块或 location块中配置。
1
sendfile_max_chunk 128k;
配置连接超时时间
与用户建立会话连接后,Nginx 服务器可以保持这些连接打开一段时间,指令keeplive_timeout就是用来设置此时间的,其语法结构为:
1
2
3
4
keepalive_timeout timeout [header_timeout];
timeout:服务端对连接的保持时间。默认值为75s。
header_timeout:可选项,在应答报文头部的 Keep-Alive域设置超时时间:“Keep-Alive:timeout=header_timeout”。报文中的这个指令可以被Mozilla或者Konqueror识别。
此指令还可以出现在server 块和 location 块中。
1
keepalive_timeout 120s 100s;
其含义是,在服务端保持连接的时间设置为120s,发给用户端的应答报文头部中Keep-Alive域的超时时间设置为100s。 此指令可以在http 块、server 块或location块中配置。
单连接请求数上限
Nginx 服务器端和用户端建立会话连接后,用户端通过此连接发送请求。指令keepalive_requests用于限制用户通过某一连接向 Nginx服务器发送请求的次数。其语法结构为:
1
keepalive_requests number;
此指令还可以出现在Server 块和 location 块中,默认设置为100。
配置网络监听
配置监听使用指令listen。其配置方法主要有三种:
-
第一种配置监听的IP 地址,语法结构为:
1
listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred] [accept_filter=filter] [bind] [ssl];
-
第二种配置监听端口,其语法结构为:
1
listen port [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [ssl];
-
第三种配置UNIX Domain Socket,其语法结构为:
1
listen unix:path [default_server] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ssl];
address:IP 地址,如果是IPv6地址,需要使用中括号“[]”括起来,比如[fe80::1]等。 port:端口号,如果只定义了IP 地址没有定义端口号,就使用80端口。 path:socket文件路径,如/var/run/nginx.sock 等。 default_server:标识符,将此虚拟主机设置为address:port 的默认主机。
注意:在 Nginx-0.8.21之前的版本,使用的是default。 setfib=number:Nginx-0.8.44中使用这个变量为监听socket关联路由表,目前只对FreeBSD 起作用,不常用。 backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在FreeBSD中默认为-1,其它平台默认为511。 rcvbuf=size,设置监听socket接受缓存区大小。 sndbuf=size,设置监听socket发送缓存区大小。 deferred:标识符,将 accept()设置为Deferred 模式。 accept_filter=filter,设置监听端口对请求的过滤,被过滤的内容不能被接收和处理。本指令只在FreeBSD和NetBSD 5.0+平台下有效。filter可以设置为dataready或httpready。 bind:标识符,使用独立的bind()处理此address:port;一般情况下,对应端口相同而 IP地址不同的多个连接,Nginx 服务器将只使用一个监听命令,并使用bind()处理端口相同的所有连接。 ssl:标识符,设置会话连接使用 SSL模式进行,此标识符和Nginx服务器提供的HTTPS服务有关。 listen 指令的使用看起来比较复杂,但其实在一般的使用过程中,相对来说比较简单,默认的设置为:
1
listen *:80 | *:8000
即监听所有80端口和8000端口。下面给出一些示例来说明listen 的用法:
1
2
3
4
listen 192.168.1.10:8000; #监听具体的 IP和具体的端口上的连接
listen 192.168.1.10; #监听具体IP 的所有端口上的连接
listen 8000; #监听具体端口上的所有 IP 连接,等同于listene *:8000;
listen 192.168.1.10 default_server backlog=1024; #设置192.168.1.10的连接请求默认由此虚拟主机处理,并且允许最多1024网络连接同时处于挂起状态。
基于名称的虚拟主机配置
这里的“主机”,j 就是指此server 块对外提供的虚拟主机。设置了主机的名称并配置好 DNS,用户就可以使用这个名称向此虚拟主机发送请求了。配置主机名称的指令为server_name,其语法结构为:
1
server_name name ...;
对于 name 来说,可以只有一个名称,也可以由多个名称并列,之间用空格隔开。每个名字就是一个域名,由两段或三段组成,之间由点号“.”隔开。下面是一个简单的示例:
1
server_name myserver.com www.myserver.com;
在该例中,此虚拟主机的名称设置为myserver.com或www.myserver.com。Nginx服务器规定,第一个名称作为此虚拟主机的主要名称。 在 name 中可以使用通配符“*”和正则表达式。
基于 IP 的虚拟主机配置
配置基于 IP 的虚拟主机,即为 Nginx 服务器提供的每台虚拟主机配置一个不同的 IP,因此需要将网卡设置为同时能够监听多个 IP 地址。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
http
{
...
server
{
listen: 80;
server_name: 192.168.1.31;
...
}
server
{
listen: 80;
server_name: 192.168.1.32;
...
}
...
}