7个角度进行nginx性能优化

简介

在大多数情况下,一个常规安装的Nginx对网站来说已经能很好地工作了。然而如果想挤压出Nginx的性能,就需要了解哪些指令会影响Nginx性能,在本文中将解释Nginx的哪些设置可以微调。需要注意一点,这是一个简单的预览——那些可以通过微调来提高性能设置的概述,不同的环境可能情况不太一样。

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

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

1. worker_processes

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

2. worker_connections

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

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

worker_processes 1;worker_connections 1024;

3. 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;

4. Timeouts

client_header_timeoutclient_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;

5. 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;

6. Static File Caching

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 365d;
}

以上的文件类型可以根据Nginx服务器匹配增加或减少。

7. logging

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

access_log off;

然后重启Nginx服务:

sudo service nginx restart

原文发布于微信公众号 - nginx(nginx-study)

原文发表时间:2018-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏晨星先生的自留地

攻破VulnOS(3)之挑战PwnLad

4016
来自专栏王硕

原 Windows 64位下 PostgreSQL的编译

38411
来自专栏技术博客

Web.Config文件中使用configSource

我们都知道,在asp.net中修改了配置文件web.config后,会导致应用程序重启,所有会话(session)丢失。然而,应用程序的配置信息放在配置文件里是...

1162
来自专栏我是业余自学C/C++的

汇编语言-第二章 寄存器(CPU工作原理)

1422
来自专栏Spark学习技巧

高性能:MYSQL异步客户端

实时处理领域,当需要使用外部存储数据染色的时候,需要慎重对待,不能让与外部系统之间的交互延迟对流的整个进度取决定性的影响。

2722
来自专栏java学习

MySQL安装图解

MySQL安装图解 一、MYSQL的安装 1、打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”。...

4166
来自专栏偏前端工程师的驿站

网页优化系列一:合并文件请求(asp.net版)

  最近因公司需要对网站的优化处理学习了一番,现在借本系列博文与大家分享一下自己的学习成果,有纰漏处请大家多多指正。   首先推荐一篇十分全面的网页优化文章  ...

2028
来自专栏数据和云

【12.2新特性】In-Memory列存储的FastStart管理

启用IM列存储时,In-Memory FastStart通过将IMCU直接存储在磁盘上来优化IM列存储中数据库对象的数量,使数据库通过将列数据存储在磁盘上更快地...

3539
来自专栏互联网技术栈

Redis 队列

举例: 队列主要用在系统解耦、流量削峰、异步处理、数据顺序处理等场景。新手在使用时可能会犯一些常见的错误。下面讲一个新手容易犯的错误,在这个示例中把队列的入...

3135
来自专栏Coding迪斯尼

java开发操作系统:一个程序向另一个程序伸出的咸猪手

1584

扫码关注云+社区