nginx配置
针对CPU的nginx配置优化
-
worker_processes
设置nginx服务的进程数,一般设置为cpu核数的倍数.设置完需要设置worker_cpu_affinity指令. -
worker_cpu_affinity
为每个进程分配cpu的工作内核.
如cpu是4核,设置 worker_processes 4; 那么worker_cpu_affinity就可以这样配置
worker_cpu_affinity 0001 0100 1000 0010
上述四组二进制分别对应4个进程,第一个进程对应0001,表示使用第一个cpu内核,第二个进程对应0100 表示使用第三个cpu内核,要注意的是 二进制位排列顺序和cpu的顺序是相反的,0表示不使用 1表示使用.所以0100 =>第三个cpu 0010表示第二个cpu内核
如cpu是4核,设置 worker_processes 8; 那么worker_cpu_affinity就可以这样配置
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000
如cpu是8核,设置 worker_processes 8; 那么worker_cpu_affinity就可以这样配置
worker_cpu_affinity 00000001 00000010 ...... 10000000
worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了
网络相关的配置
-
keepalive_timeout
设置nginx服务器与客户端保持连接的超时时间.
keepalive_timeout 60 50;
60表示 nginx服务器和客户端连接保持活动的时间是60s,之后断开连接;
50表示使用keep-alive消息头保持与客户端浏览器的连接时间为50s,之后浏览器主动与服务器断开连接. -
send_timeout
指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。
send_timeout 10s;
nginx服务器与客户端建立连接后,某次会话中服务器等待客户端响应超过10s,就自动关闭连接 -
client_header_buffer_size
设置nginx服务器允许的客户端请求头部的缓冲区大小,可根据系统分页大小来设置.
使用 getconfig PAGESIZE 返回linux服务器的分页大小
出现400错误,大部分原因是因为此设置太小了.
client_header_buffer_size 4k; -
multi_accept
设置服务器是否尽可能多的接收客户端的网络请求.默认值off,一般设置为on
multi_accept on;
事件驱动
-
use
指定nginx服务器使用的事件驱动
use epoll; -
worker_connections
设置niginx服务器上每个工作进程允许同时连接客户端的最大数量,此配置和linux系统有关 有个open file resouse limit 指令设置linux进程可以打开的文件句柄数量. worker_connections 不能超过 open file resouse limit 的值.
cat /proc/sys/fs/file-max 命令可以查看linux进程最大文件句柄
worker_connections 65535
可以计算出允许最大连接数量 = worker_processes * worker_connections/2 -
worker_rlimit_sigpending
设置linux平台的事件信号队列长度上限
worker_rlimit_sigpending 1024;
Gzip压缩配置
-
gzip
开启或者关闭Gzi功能,
gzip on |off
默认off 仅当on时下面所有gzip配置才有效 -
gzip_buffers
设置gzip压缩文件使用的缓存大小
gizp_buffers 32 4k;
32 表示ngixn服务器向系统申请缓存空间的个数 number
4k 指定每个缓存空间的大小 size
size的值取系统内存页一页的大小.一般为4k或者8k; -
gzip_comp_level
指定gzip的压缩级别1压缩程度最低 9压缩程度最高 压缩效率最低 最费时间.默认为1
gzip_comp_level 1 -
gzip_disable
针对不同的User-Agent 选择性的开启和关闭 gzip,IE6以下浏览器gzip功能有问题,需要使用该配置关闭 -
gzip_http_version
针对不同的http版本,选择性的开启或者关闭gzip功能.
gzip_http_version 1.0|1.1;
默认为1.1版本,表示只有客户端使用1.1版本以上的http协议时才使用gzip,一般不需要配置.几乎都支持的. -
gzip_min_length
gzip_min_length 1024;
当页面的Content-Length >= 1024字节的时候才启用gzip.
gzip_min_length 0;
设置为0表示不管响应页面的大小,统统压缩. -
gzip_proxied
在使用nginx服务器的反向代理功能时有效,具体配置参见手册咯 -
gzip_types
nginx服务器可以根据相应也的MIME类型选择性的开启gzip压缩功能
gzip_types text/html;
表示对MIME类型的页面数据进行gzip压缩,也可以写* 表示所有类型的MIME都进行压缩 -
gzip_vary
使用gzip功能时是否发送 Vary:Accept-Encoding 头域的响应头部.该头域的主要功能是告诉接收方发送的数据经过了压缩功能.
Gzip压缩功能配置实例
全局块
events块
http
{
...
gzip on;
gzip_min_length 1k; #也可以写1024
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gunzip_static on;
gzip_disable "MSIE [1-6]\."; #为了解决IE6不兼容的问题
...
server块
}
也可以在server块中单独为虚拟主机配置gzip,ngixn配置采用就近原则.
nginx服务器组配置
-
upstream
upstream backend { ....}
upstream是配置服务器组的主要指令.和http块 server块类似. 花括号内是具体的配置; -
server
设置组内的服务器.和upstream组合使用
upstream backend
{
server backend1.com weight 5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s
server unix:/tmp/backend3
}
设置了backend组,基于域名的backend1.com,基于ip地址的127.0.0.1:8080,基于进程间通信的unix Domain Socket;
backend1.com 权重为5 (不写默认为1) 为组内最大,优先接收和处理请求.
127.0.0.1:8080 中 max_fails=3 fail_timeout=30s 表示状态检查设置 如果在30s(默认10s)内连续产生3次请求失败(http 404不认为是请求失败),那么该服务器之后的30s内被认为是无效的(down状态).
-
ip_hash
不能和权重同时配置.
实现了某个客户端多次请求定向到一台服务器上,保证客户端和服务器之间会话的稳定. 只有服务器处于down状态,才会转移请求到其他服务器.
upstream backend
{
ip_hash;
server backend1.com ;
server backend2.com ;
}
如果没有ip_hash,将会轮流响应请求.导致会话不稳定.
-
**keepalive **
keepalive 指定的 数值 是 Nginx 每个 worker 连接后端的最大长连接数,而不是整个 Nginx 的。 而且这里的后端指的是「所有的后端」,而不是每一个后端。 -
least_conn
nginx的负载均衡 - 最少连接
我们知道轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同。这有个前提,就是每个请求所占用的后端时间要差不多,如果有些请求占用的时间很长,会导致其所在的后端负载较高。在这种场景下,把请求转发给连接数较少的后端,能够达到更好的负载均衡效果,这就是least_conn算法。