Nginx 配置和性能调优

本文详细介绍了如何优化 Nginx 的配置,包括调整 worker 进程数,绑定进程到不同 CPU,设置连接超时,限制文件上传大小,启用高效的文件传输模式等,以提升服务器性能并保护资源。同时,还讨论了 Nginx 的连接超时作用、问题及设置策略,以及 location、server 和 upstream 代码块的配置技巧。
摘要由CSDN通过智能技术生成

优化 Nginx worker 进程数

Nginx 有 master 和 worker 两种进程,master 进程用于管理 worker 进程,worker 进程用于 Nginx 服务。

worker 进程数默认为 1 。

worker_processes  1;

worker 进程数应该设置为服务器 CPU 的核数。

[root@localhost ~]# grep -c processor /proc/cpuinfo         # 查看CPU核数
2
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf    # 设置worker进程数
worker_processes  2;

worker_processes 这个参数最好是设置成 auto 自动匹配进程数。

绑定 Nginx 进程到不同的 CPU 上

默认情况下,Nginx 的多个进程有可能跑在某一个 CPU 或 CPU 的某一核上,导致 Nginx 进程使用硬件的资源不均,因此绑定 Nginx 进程到不同的 CPU 上是为了充分利用硬件的多 CPU 多核资源。

[root@localhost ~]# grep -c processor /proc/cpuinfo    # 查看CPU核数
2
worker_processes  2;         # 2核CPU的配置
worker_cpu_affinity 01 10;
worker_processes  4;         # 4核CPU的配置
worker_cpu_affinity 0001 0010 0100 1000;   
worker_processes  8;         # 8核CPU的配置
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000000;

优化 Nginx 单个进程允许的最大连接数

控制 Nginx 单个进程允许的最大连接数的参数为 worker_connections ,这个参数要根据服务器性能和内存使用量来调整。

进程的最大连接数受 Linux 系统进程打开的最大文件数的限制,只有执行了 “ulimit -HSn 65535” 之后,worker_connections 才能生效。

连接数包括代理服务器的连接、客户端的连接等,Nginx 总并发连接数 = worker_processes * worker_connections。总数保持在 3w 左右即可。

worker_processes  2;
worker_cpu_affinity 01 10;
user nginx nginx;
events {
    use epoll;
    worker_connections  15000;
}

优化 Nginx worker 进程打开的最大文件数

worker_rlimit_nofile 65535;    # worker 进程打开的最大文件数,可设置为优化后的 ulimit -HSn 的结果

开启高效文件传输模式

sendfile 参数用于开启文件的高效传输模式,该参数实际上是激活了 sendfile () 功能。

sendfile () 是作用于两个文件描述符之间的数据拷贝函数,这个拷贝操作是在内核之中的,被称为 “零拷贝” 。sendfile 比 read 和 write 函数要高效得多,因为 read 和 write 函数要把数据拷贝到应用层再进行操作。

tcp_nopush 参数用于激活 Linux 上的 TCP_CORK socket 选项,此选项仅仅当开启 sendfile 时才生效,tcp_nopush 参数可以把 http response header 和文件的开始部分放在一个文件里发布,以减少网络报文段的数量。

http {
   include       mime.types;
   default_type  application/octet-stream;
   sendfile      on;    # 开启文件的高效传输模式
   tcp_nopush    on;    # 激活 TCP_CORK socket 选择
   tcp_nodelay   on;    # 数据在传输的过程中不进缓存
   keepalive_timeout  65;
   include vhosts/*.conf;
}

优化 Nginx 连接的超时时间

连接超时的作用

  • 将无用的连接设置为尽快超时,可以保护服务器的系统资源(CPU、内存、磁盘)

  • 当连接很多时,及时断掉那些建立好的但又长时间不做事的连接,以减少其占用的服务器资源

  • 如果黑客攻击,会不断地和服务器建立连接,因此设置连接超时以防止大量消耗服务器的资源

  • 如果用户请求了动态服务,则 Nginx 就会建立连接,请求 FastCGI 服务以及后端 MySQL 服务,设置连接超时,使得在用户容忍的时间内返回数据

连接超时存在的问题

  • 服务器建立新连接是要消耗资源的,因此,连接超时时间不宜设置得太短,否则会造成并发很大,导致服务器瞬间无法响应用户的请求。

  • 有些 PHP 站点会希望设置成短连接,因为 PHP 程序建立连接消耗的资源和时间相对要少些。

  • 有些 Java 站点会希望设置成长连接,因为 Java 程序建立连接消耗的资源和时间要多一些,这是由语言的运行机制决定的。

设置超时时间

  • keepalive_timeout:用于设置客户端连接保持会话的超时

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Nginx 性能调优的方法有很多,主要包括以下几点: 1. 减少 worker_processes 的数量:默认为 CPU 核数,可根据实际情况减少。 2. 增加 worker_connections 的值:默认为 1024,可根据实际情况增加。 3. 使用 sendfile on 或 offload:sendfile on 表示允许 Nginx 使用 sendfile 系统调用,offload 则表示使用硬件加速。 4. 配置缓存:使用 proxy_cache 或 fastcgi_cache 可以缓存静态文件,提高访问速度。 5. 合理配置 keepalive_timeout:设置连接保持时间,防止频繁建立连接。 6. 日志优化:使用 log_subrequest on 或 off,来关闭子请求日志记录。 7. 使用性能监控工具:例如 nginx-module-vts ,这样可以更直观的查看Nginx的运行状态. 8. 在硬件上进行调优,例如内存、磁盘、网络等。 这只是一些常用的性能调优方法,具体情况需要根据实际情况进行调整。 ### 回答2: 对于Nginx性能调优,可以从以下几个方面进行考虑: 1. 调整worker_processes参数:这个参数指定Nginx使用的CPU核心数,可以根据服务器的配置情况设置合适的值。通常情况下,可以将其设置为与服务器的CPU核心数相同。 2. 调整worker_connections参数:该参数指定每个worker进程的最大连接数。对于高并发的情况,可以适当增加该值。但是需要根据服务器的内存等资源来进行合理的设置。 3. 启用事件驱动模型:在Nginx配置文件中,可以启用epoll、kqueue等事件驱动模型,提高性能和并发能力。 4. 启用缓存:Nginx内置了缓存模块,可以将常被请求的静态资源缓存在内存中,从而减轻后端服务器的负担,提高响应速度。 5. 调整buffer参数:可以调整proxy_buffer_size和proxy_buffers参数来优化web服务器的传输速度和内存消耗。 6. 启用Gzip压缩:启用Nginx的gzip模块,可以对传输的数据进行压缩,减小文件的体积,提高传输速度。 7. 使用反向代理:将动态请求转发给后端应用服务器,可以提高静态资源的响应速度。 8. 开启HTTP Keep-Alive:通过开启Keep-Alive,可以在同一个TCP连接上处理多个HTTP请求,减少TCP三次握手和四次挥手的消耗,提高性能。 9. 避免不必要的重定向:合理使用rewrite规则,避免多次重定向,减少性能损耗。 10. 定期检查和优化配置文件:定期检查Nginx配置文件,避免不必要的配置错误,同时可以根据实际情况进行优化和调整。 通过以上的优化方法,可以有效提高Nginx的性能和并发能力,提供更快的服务响应速度。 ### 回答3: Nginx是一款高性能的Web服务器和反向代理服务器,可以通过一些调优方法进一步提高其性能。 首先,可以通过调整Nginx的工作进程数来提高性能。可以根据系统的CPU核心数和负载情况,在Nginx配置文件中设置worker_processes参数,使其与CPU核心数匹配,以充分利用系统资源。 其次,使用适当的缓存机制可以减轻服务器负担。通过Nginx的proxy_cache模块,可以将经常访问的静态内容缓存起来,减少后续请求的响应时间。 另外,合理配置Nginx的连接池和缓冲区大小也可以改善性能。可以通过调整worker_connections参数来控制连接池的大小,使其适应系统的负载。同时,通过调整proxy_buffer_size和proxy_buffers参数,可以优化反向代理性能。 此外,采用压缩传输和启用Keep-Alive功能也能提升性能。启用Gzip压缩可以减小数据传输量,加快网络传输速度。通过启用Keep-Alive功能,允许多个请求复用同一个TCP连接,减少连接建立和断开的开销。 另外,合理配置Nginx的日志记录也很重要。将需要的日志级别设为合理的水平,避免记录过多无用的信息,节省磁盘空间和IO资源。 最后,定期监测和调整Nginx的性能是必要的。可以通过工具如Nginx Amplify和掌握一些基本的性能监控指标来了解系统的负载和瓶颈,进行及时的调整和优化。 总而言之,通过合理的配置,使用缓存机制,优化连接池和缓冲区大小,启用压缩传输和Keep-Alive功能,以及有效地记录和监测性能,可以使Nginx发挥出更好的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值