nginx配置

2018-11-27  本文已影响0人  dongshixiao

针对CPU的nginx配置优化

  1. worker_processes
    设置nginx服务的进程数,一般设置为cpu核数的倍数.设置完需要设置worker_cpu_affinity指令.

  2. 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个进程够用了

网络相关的配置

  1. keepalive_timeout
    设置nginx服务器与客户端保持连接的超时时间.
    keepalive_timeout 60 50;
    60表示 nginx服务器和客户端连接保持活动的时间是60s,之后断开连接;
    50表示使用keep-alive消息头保持与客户端浏览器的连接时间为50s,之后浏览器主动与服务器断开连接.

  2. send_timeout
    指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。
    send_timeout 10s;
    nginx服务器与客户端建立连接后,某次会话中服务器等待客户端响应超过10s,就自动关闭连接

  3. client_header_buffer_size
    设置nginx服务器允许的客户端请求头部的缓冲区大小,可根据系统分页大小来设置.
    使用 getconfig PAGESIZE 返回linux服务器的分页大小
    出现400错误,大部分原因是因为此设置太小了.
    client_header_buffer_size 4k;

  4. multi_accept
    设置服务器是否尽可能多的接收客户端的网络请求.默认值off,一般设置为on
    multi_accept on;

事件驱动

  1. use
    指定nginx服务器使用的事件驱动
    use epoll;

  2. 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

  3. worker_rlimit_sigpending
    设置linux平台的事件信号队列长度上限
    worker_rlimit_sigpending 1024;

Gzip压缩配置

  1. gzip
    开启或者关闭Gzi功能,
    gzip on |off
    默认off 仅当on时下面所有gzip配置才有效

  2. gzip_buffers
    设置gzip压缩文件使用的缓存大小
    gizp_buffers 32 4k;
    32 表示ngixn服务器向系统申请缓存空间的个数 number
    4k 指定每个缓存空间的大小 size
    size的值取系统内存页一页的大小.一般为4k或者8k;

  3. gzip_comp_level
    指定gzip的压缩级别1压缩程度最低 9压缩程度最高 压缩效率最低 最费时间.默认为1
    gzip_comp_level 1

  4. gzip_disable
    针对不同的User-Agent 选择性的开启和关闭 gzip,IE6以下浏览器gzip功能有问题,需要使用该配置关闭

  5. gzip_http_version
    针对不同的http版本,选择性的开启或者关闭gzip功能.
    gzip_http_version 1.0|1.1;
    默认为1.1版本,表示只有客户端使用1.1版本以上的http协议时才使用gzip,一般不需要配置.几乎都支持的.

  6. gzip_min_length
    gzip_min_length 1024;
    当页面的Content-Length >= 1024字节的时候才启用gzip.
    gzip_min_length 0;
    设置为0表示不管响应页面的大小,统统压缩.

  7. gzip_proxied
    在使用nginx服务器的反向代理功能时有效,具体配置参见手册咯

  8. gzip_types
    nginx服务器可以根据相应也的MIME类型选择性的开启gzip压缩功能
    gzip_types text/html;
    表示对MIME类型的页面数据进行gzip压缩,也可以写* 表示所有类型的MIME都进行压缩

  9. 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服务器组配置

  1. upstream
    upstream backend { ....}
    upstream是配置服务器组的主要指令.和http块 server块类似. 花括号内是具体的配置;

  2. 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状态).

  1. ip_hash
    不能和权重同时配置.
    实现了某个客户端多次请求定向到一台服务器上,保证客户端和服务器之间会话的稳定. 只有服务器处于down状态,才会转移请求到其他服务器.
upstream backend 
{
    ip_hash;
    server backend1.com ;
    server backend2.com ;
}

如果没有ip_hash,将会轮流响应请求.导致会话不稳定.

  1. **keepalive **
    keepalive 指定的 数值 是 Nginx 每个 worker 连接后端的最大长连接数,而不是整个 Nginx 的。 而且这里的后端指的是「所有的后端」,而不是每一个后端。

  2. least_conn
    nginx的负载均衡 - 最少连接
    我们知道轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同。这有个前提,就是每个请求所占用的后端时间要差不多,如果有些请求占用的时间很长,会导致其所在的后端负载较高。在这种场景下,把请求转发给连接数较少的后端,能够达到更好的负载均衡效果,这就是least_conn算法。

上一篇下一篇

猜你喜欢

热点阅读