nginx性能优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx性能优化相关的知识,希望对你有一定的参考价值。

nginx性能优化的一些方面

一、显示版本号:不安全

curl -I    http://192.168.4.60,查看版本信息,

修改配置文件:

     http {

            server_tokens off;    //把nginx版本信息关掉了

二、并发量,linux系统内核和nginx配置文件

在nginx配置文件和系统内核中,对并发做了限制,现在来修改:

nginx配置文件:

         worker_processes  1;     //进程数,和CPU的内核相关

          events {

                       worker_connections  80000;

                  }


系统内核:(限制文件,进程,用户数量)  ss -ntup | grep nginx   //查看实时并发数,最大支持2W

ulimit -a    //查看各限制的参数


ulimit  -Hn  100000        ulimit -Sn  100000      //在命令行修改

-s //软限制 (普通用户可以修改)n  最大文件数量

-H //硬限制  (普通用户不可修改) n 最大文件数量

当前有效,重启服务器后失效,要永久更改   vim /etc/security/limits.conf

      *              soft       nofile        100000    

      *              hard     nofile         100000

三、解决头部信息过长,出现错误提示:414,缓存不够

client_header_buffer_size     1k;             //默认请求包头信息的缓存

large_client_header_buffers   4   1m;     //大请求包头部信息的缓存个数与容量

四、nginx压缩(速度,流量)

gzip on;           //开启压缩功能,所以浏览器都支持

gzip_min_length 1000;    //至少1000个字节才压缩

gzip_comp_level 4;       //压缩比率1-9

gzip_types text/plain text/css application/json application/x-javascript text/xml 

application/xml application/xml+rss text/javascript;    

 //对什么格式的文件压缩,一般选择文档压缩:doc,html,css,php,pdf,xls

 mime.types     //支持文件压缩格式的文件,可以在里面查找相应的选项

五、用户的浏览器缓存数据

nginx告诉浏览器,把所有的照片缓存30天,不会变化的数据,mp3,mp4,jpg

修改配置文件:

location / {

           root   html;

           index  index.html index.htm;

              }

       location     ~ \.(gpg|png)$      {

        expires  300d;                //自定义缓存300天

          }

六、自定义报错页面


charset UTF-8;                                     //   更改字符集

error_page   404              /error.html;   //自定义页面

七、优化 Linux 内核参数

/etc/sysctl.conf是一个允许你改变正在运行中的Linux系统的接口。

它包含一些TCP/IP堆栈和虚拟内存系统的高级选项,可用来控制Linux网络配置,

由于/proc/sys/net目录内容的临时性,建议把TCPIP参数的修改添加到/etc/sysctl.conf文件, 

然后保存文件,使用命令“/sbin/sysctl –p”使之立即生效。具体修改方案参照上文:


fs.file-max = 999999
#表示单个进程最大可以打开的句柄数;

net.ipv4.tcp_tw_reuse = 1
#参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,

这对于服务器来说意义重大,因为总有大量TIME_WAIT状态的链接存在;

ner.ipv4.tcp_keepalive_time = 600
#当keepalive启动时,TCP发送keepalive消息的频度;

默认是2小时,将其设置为10分钟,可以更快的清理无效链接。

net.ipv4.tcp_fin_timeout = 30  
#当服务器主动关闭链接时,socket保持在FIN_WAIT_2状态的最大时间

net.ipv4.tcp_max_tw_buckets = 5000
#这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,

如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
#该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器变慢。

net.ipv4.ip_local_port_range = 1024 65000  
#定义UDP和TCP链接的本地端口的取值范围。

net.ipv4.tcp_rmem = 10240 87380 12582912  
#定义了TCP接受缓存的最小值、默认值、最大值。

net.ipv4.tcp_wmem = 10240 87380 12582912  
#定义TCP发送缓存的最小值、默认值、最大值。
net.core.netdev_max_backlog = 8096  
#当网卡接收数据包的速度大于内核处理速度时,

会有一个列队保存这些数据包。这个参数表示该列队的最大值。

net.core.rmem_default = 6291456  
#表示内核套接字接受缓存区默认大小。

net.core.wmem_default = 6291456  
#表示内核套接字发送缓存区默认大小。

net.core.rmem_max = 12582912  
#表示内核套接字接受缓存区最大大小。

net.core.wmem_max = 12582912 
#表示内核套接字发送缓存区最大大小。

注意:以上的四个参数,需要根据业务逻辑和实际的硬件成本来综合考虑;

net.ipv4.tcp_syncookies = 1
#与性能无关。用于解决TCP的SYN攻击。

net.ipv4.tcp_max_syn_backlog = 8192
#这个参数表示TCP三次握手建立阶段

接受SYN请求列队的最大长度,默认1024,将其设置的大一些可以

使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的链接请求。

net.ipv4.tcp_tw_recycle = 1  
#这个参数用于设置启用timewait快速回收。

net.core.somaxconn=262114 
# 选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,

在高并发的请求中,默认的值可能会导致链接超时或者重传,因此需要结合高并发请求数来调节此值。

net.ipv4.tcp_max_orphans=262114  
#选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。

如果超过这个数字,孤立链接将立即被复位并输出警告信息。

这个限制指示为了防止简单的DOS攻击,不用过分依靠这个限制甚至认为的减小这个值,更多的情况是增加这个值。




























以上是关于nginx性能优化的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 性能优化

Nginx安全优化与性能调优

Nginx性能优化

百万并发下的 Nginx 性能优化之道

nginx 性能优化

nginx优化_性能方面的优化