nginx.conf中的配置项可以分为三大部份,分别是全局部份、events部份、http部份。http部份中又包含了1个或多个server块,每个server块中又会包含1个或多个location块。具体结构如下:
#全局部份
……
#events部份
events
{
……
}
#http部份
http
{
……
server{
……
location [patten]
{}
}
server{
……
location [patten]
{}
location [patten]
{}
}
}
全局部份
全局部份用来配置通用的设置,主要有以下几项:
user nobody nobody;
配置允许nginx服务器运行的用户和用户组,nobody表示所有用户都可以运行。
worker_processes 2;
配置nginx运行最多可以产生的worker process数,也可以设置为”auto”,由nginx自动检测。
worker_cpu_affinity 0001 0010 0100 1000;
默认情况下,Nginx的多个进程有可能跑在某一个CPU或CPU的某一核上,导致Nginx进程使用硬件的资源不均,因此绑定Nginx进程到不同的CPU上是为了充分利用硬件的多CPU多核资源的目的。
worker_cpu_affinity用来为每个进程分配CPU的工作内核,参数有多个二进制值表示,每一组代表一个进程,每组中的每一位代表该进程使用CPU的情况,1代表使用,0代表不使用。所以我们使用worker_cpu_affinity 0001 0010 0100 1000;来让进程分别绑定不同的核上。
worker_rlimit_nofile 65535;
nginx进程可以打开的文件描述符的限制,通常设置为ulimit -n获取到的值,但也可以自己使用此参数设置,此参数的值将覆盖ulimit -n的值,但此参数的值不应该超过worker_process*worker_connections的值。
error_log logs/error.log;
配置日志的存放位置,在全局块、http块、server块中都可以配置日志,根据不同的配置位置其作用域也不相同。
pid /run/nginx.pid;
配置nginx主进程进程号的保存文件。
include file;
引入其它的配置文件。也可以配置在其它块中,区别在于作用域。
events部份
use epoll;
配置处理网络消息的事件驱动模型,可选项有select、poll、kqueue、epoll、rtsig、/dev/poll和eventport。默认为epoll。
worker_connections 768;
配置每个worker process同时开启的最大连接数。
accept_mutex on;
配置网络连接的序列化,对nginx进程接收到的连接进行序列化,防止多个进程对连接的争抢(解决惊群问题)。
multi_accept on;
配置每个worker process是否同时接收多个新到达的网络连接,此配置默认为off状态,即每个worker process一次只能接收一个新到达的网络连接。
http部份
sendfile on;
是否开启sendfile传输文件方式,默认为off,可以在http块\server块\location块中进行配置。
sendfile_max_chunk 128k;
此配置与sendfile配置项相关联,表示worker process每次调用sendfile传输的数据量最大不超过此值,设置为0表示无限制。
include /etc/nginx/mime.types;
default_type application/octet-stream;
定义mime-type,include包含了一个其它的配置文件,里面定义了支持的mime类型及后缀名。
default_type配置用于处理前端请求的mime类型,必须是mime.types中定义的mime-type。
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
定义相关日志的存放路径。
log_format ……;
用来定义日志格式,通常使用默认配置即可,不需要设置。
keepalive_timeout 65;
配置连接超时时间。
还可以做如下方式配置:
keepalive_timeout 120s 100s;
表示服务器端超时时间为120s,发送给用户端的应答报文头部中keep-alive域的超时时间为100s。
tcp_nodelay on;
启用此配置表示禁用nagle算法,小数据包不需要等待直接传输,可以提高响应速度。
tcp_nopush on;
此选项与sendfile配置相关联,sendfile为on时此处也应为on,数据包会累积一下后再一起传输,与tcp_nodelay选项互斥,但当nodelay与nopush都为on时,nginx可以动态平衡这两个功能的使用。
open_file_cache max=65535 inactive=20s;
max指定缓存的最大数量,如果超出,则最近最少使用(LRU)的缓存将被清除;inactive指定多长时间没有访问则清除此缓存。
open_file_cache_valid 30s;
每30秒检查一次缓存文件的元信息,如果不是最新的则更新。
open_file_cache_min_uses 1;
与inactive项相关联,表示inactive时间内的最少访问次数,如果在inactive时间内没有达到此访问次数,则清除此缓存信息。
send_timeout 10s;
nginx服务器响应超时时间,即nginx与client建立连接后,单次会话中nginx等待client响应超过此值,nginx将自动关闭连接。
types_hash_max_size 2048;
影响散列表的冲突率。此值越大,消耗内存则越多,散列key冲突率就越低,检索速度就更快;值越小,消耗内存就越少,冲突率相对就会高一些。
client_header_buffer_size 4k;
用于设置nginx服务器允许的client request headers buffer size。可根据os分页大小来设置,分页大小可使用getconf PAGESIZE获取。
gzip on;
启用gzip功能,对响应数据进行在线实时压缩,减少数据传输量。
gzip_disable “msie6”;
nginx在响应此类客户端请求时,不使用gzip功能缓存应用数据,msie6表示对IE6浏览器的数据不进行gzip压缩。
gzip_min_length 1024;
使用gzip压缩功能的最小数据长度,低于此大小的数据不会进行gzip压缩。对大数据压缩效果比较明显,但小数据压缩可能得不偿失。
gzip_comp_level 1;
设置压缩等级,取值范围为1~9,级别1表示压缩程度最低,效率最高,耗时最少;级别9表示压缩程度最高,效率最低,耗时最多。
gzip_vary on;
设置在使用Gzip功能时是否发送带有“Vary:Accept-Encoding”头域的响应头部,该头域的主要功能是告诉接收方发送的数据经过了压缩处理,开启后端效果是在响应头部Accept-Encoding: gzip,对于本身不支持Gzip的压缩的客户端浏览器是有用的。
gzip_buffers 32 4k;
该指令用于设置Gzip压缩文件使用存储空间的大小,语法gzip_buffers number size。其中number=指定Nginx服务器需要向系统申请存储空间的个数;size=指定每个缓存空间的大小。
根据配置项,Nginx服务器在对响应输出数据进行Gzip压缩时需向系统申请number*size大小的空间用于存储压缩数据。通常size为os内存页的大小,可用getconf PAGESIZE来获取。
gunzip_static on;
开启时,如果客户端浏览器不支持Gzip处理,Nginx服务器将返回解压后的数据。如果客户端浏览器支持Gzip处理,Nginx服务器忽略该指令设置,仍然返回压缩数据。
gzip_types text/plain text/css text/javascript;
设置nginx服务器只对指定的mime-types开启gzip压缩功能。
upstream name {
server 10.0.0.1;
server 10.0.0.2;
ip hash;
}
upstream通常用来做负载均衡设置,name是这个upstream的名称,{}内包含了相关的服务器以及负载分担方式。
server块
listen 80;
此server块监听的端口号。
server_name api.jj.com.cn;
此server块对外提供的虚拟主机名称,可以理解为域名(需要设置好dns后才能够直接访问)。此值可以有1个或多个,由空格分隔,默认第1个为主要名称。也可以使用通配符,正则表达式等方式。
root /var/www/lnmp;
等同于apache的document root,指明此虚拟主机的请求根目录,接收到请求后,就会到此根目录寻找相应资源。
index index.html index.htm index.php;
默认的主页名称。
ssl on;
启用https方式。
ssl_buffer_size 16k;
设置用于发送数据的缓冲区大小。
ssl_certificate /etc/skey/a.crt;
配置证书crt(pem)保存路径。
ssl_certificate_key /etc/skey/a.key;
配置证书key保存路径。
ssl_session_cache shared:SSL:1m;
配置加密session重用。
ssl_session_timeout 5m;
session超时时间。
ssl_ciphers HIGH:!aNULL:!MD5;
指定可用的密码算法,必须是openssl库中指定的方式。
ssl_prefer_server_ciphers on;
在使用sslv3或tls协议时,指定服务器密码优先于客户端密码。
location / {
proxy_pass http://name;
}
设置代理,若name为某个upstream的名称,则将请求转发到对应的upstream中处理;若name为直接的服务器(域名/IP),则将请求转发到此服务器处理。