Nginx 优化

对于Nginx的调优,可以大致从如下指令着手:

1. worker_processes 
2. worker_connections
3. Buffers
4. Timeouts
5. Gzip Compression
6. Static File Caching
7. logging

worker_processes

 worker_processes表示工作进程的数量,一般情况设置成CPU核的数量即可,一个cpu配置多于一个worker数,对Nginx而言没有任何益处,另外不要忘了设置worker_cpu_affinity,这个配置用于将worker process与指定cpu核绑定,降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。 grep processor /proc/cpuinfo | wc -l   这个命令会告诉你当前机器是多少核,输出为2即表示2核。

优化绑定不同的nginx进程到不同的CPU上

四核cpu配置

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;

二核cpu配置

worker_processes    2;
worker_cpu_affinity 0101 1010;

worker_connections

worker_connections配置表示每个工作进程的并发连接数,默认设置为1024。

可以更新如下配置文件来修改该值: sudo vim /etc/nginx/nginx.conf

worker_processes 1;
worker_connections 1024;

修改系统连接数
查看当前默认连接数  `` ulimit -n ``
解除 Linux 系统的最大进程数和最大文件打开数限制:
vi /etc/security/limits.conf
        # 添加如下的行
        * soft noproc 11000
        * hard noproc 11000

说明:* 代表针对所有用户,noproc 是代表最大进程数,nofile 是代表最大文件打开数

查看Linux系统级的最大打开文件数限制,使用如下命令:
cat /proc/sys/fs/file-max

这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为22158。修改完后保存此文件。
echo 22158 > /proc/sys/fs/file-max
重启系统

每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为

worker_processes * worker_connections

事件处理模型优化

events {
worker_connections  1024;
use epoll;
}

Buffers

Buffers:另一个很重要的参数为buffer,如果buffer太小,Nginx会不停的写一些临时文件,这样会导致磁盘不停的去读写,现在我们先了解设置buffer的一些相关参数:

client_body_buffer_size:允许客户端请求的最大单个文件字节数
client_header_buffer_size:用于设置客户端请求的Header头缓冲区大小,大部分情况1KB大小足够
client_max_body_size:设置客户端能够上传的文件大小,默认为1m
large_client_header_buffers:该指令用于设置客户端请求的Header头缓冲区大小
具体可参考配置如下:

client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;

Timeouts

client_header_timeout和client_body_timeout设置请求头和请求体(各自)的超时时间,如果没有发送请求头和请求体,Nginx服务器会返回408错误或者request time out。 keepalive_timeout给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接,我们将它设置低些可以让Nginx持续工作的时间更长。 send_timeout 指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,Nginx就会关闭连接。

具体可参考配置如下:

client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

Gzip Compression

开启Gzip,gzip可以帮助Nginx减少大量的网络传输工作,另外要注意gzip_comp_level的设置,太高的话,Nginx服务会浪费CPU的执行周期。

具体可参考配置如下:

gzip             on;
gzip_comp_level  2;
gzip_min_length  1000;
gzip_proxied     expired no-cache no-store private auth;
gzip_types       text/plain application/x-javascript text/xml text/css application/xml;

Static File Caching

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 365d;
}
以上的文件类型可以根据Nginx服务器匹配增加或减少。

logging

access_log设置Nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快。 可以修改配置文件将该功能关闭:

access_log off;
然后重启Nginx服务:

sudo service nginx restart
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 基本安全优化 1.1 隐藏版本信息 一般来说,软件的漏洞都和版本相关,所以我们要隐藏或消除web服务对访问用户...
    秋风LP阅读 3,177评论 0 1
  • 我已经谈过一些关于Nginx的常见问题; 其中有一些是关于如何优化Nginx. 很多Nginx新用户是从Apach...
    daniel_hao阅读 7,399评论 0 10
  • 内核参数优化 把如下的参数追加到Linux系统的/etc/sysctl.conf文件中,然后使用如下命令使修改生效...
    baker_dai阅读 2,540评论 0 1
  • nginx优化 突破十万并发 一、一般来说nginx 配置文件中对优化比较有作用的为以下几项: worker_pr...
    SkTj阅读 4,527评论 0 4
  • Nginx优化详解-------超详细 一、一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. w...
    name_cc2f阅读 3,757评论 0 1

友情链接更多精彩内容