nginx优化配置

在使用java web container的时候,我们都在前面挡一层nginx,方便使用各种nginx的功能,设置成代理。 访问特别多的时候发现,服务器上存在大量的TIME_WAIT状态的连接。 经分析,可能是nginx早期版本的upstream还是使用的1.0的短连接代理,java container老是以1.0的方式主动断开进入TIME_WAIT状态,浪费了大量的连接。

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'





修改配置添加keepalive字段到upstream,nginx 与后端的服务器连接默认是使用的http 1.0,这个大家应该都了解,如果设置为HTTP1.1 复用链接的话就会大大降低了tcp开销,节省系统资源

    upstream nginx_test {
       server 192.168.128.128:8080 weight=5;
       server 192.168.128.132:8080 weight=5;
       keepalive 20;
      # 设置持久连接时间。
    }
     

同时修改配置添加http1.1声明和header中connection重写。

server {
    location / {
        proxy_http_version 1.1; #开启对http1.1支持 
        proxy_set_header Connection ""; # 设置Connection为空串,以禁止传递头部到后端,http1.0中默认值Connection: close
        proxy_pass http://nginx_test;
   }
}


修改后TIME_WAIT大量减少十倍以上



其他优化配置

worker_processes 8;

nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。

开启的工作进程最好与你的硬件CPU个数一致,一味的加大processes,会使得系统的切换开销增大得不偿失

proxy_connect_timeout 180;
proxy_read_timeout 180;
proxy_send_timeout 180; //将nginx与后端的tomcat连接超时,上行超时,下行超时的时间都设置的尽量大,范围大并发的情况下出现502 504.

压缩打开

gzip  on;

events
{
use epoll;  #nginx事件处理模型,使用于Linux内核2.6版本及以后的系统
worker_connections 204800;  #ginx 单个进程的最大并发连接数
}

下面是关于系统连接数的优化

linux 默认值 open files 和 max user processes 为 1024

#ulimit –u

1024

问题描述: 说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程

使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。

新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。因此,需要将其改大。

解决方法:

使用 ulimit –n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)

有如下三种修改方式:

1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
2. 在/etc/profile 中增加一行 ulimit -SHn 65535
3. 在/etc/security/limits.conf 最后增加:

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2 种有效果

 # ulimit -n

65535

 
原文地址:https://www.cnblogs.com/shihaiming/p/5984593.html