相关worker设置比较简单,只需要设置正确的数量。
如果您的站点流量不大,Nginx,数据库和Web应用程序都运行在同一台服务器上。则在/etc/nginx/nginx.conf中,设置worker_processes 1;
如果您的站点流量比较大或者服务器只运行了Nginx,请为每个CPU核心设置一个工作线程:worker_processes auto;
如果你想手动设置,你可以使用grep ^processor /proc/cpuinfo | wc -l来查找服务器的cpu线程数。
worker_connections选项设置每个worker进程一次可以处理的最大连接数。 默认情况下,worker连接限制为512,但系统可以处理比这值更多的连接。
适当的值可以通过测试得出。 系统的核心限制也可以通过使用ulimit找到:
输出:
您还可以设置使用epoll,一个可扩展的I/O事件通知机制来触发事件,确保充分利用I/O性能。
最后,您可以使用multi_accept使worker一次接受所有新连接。
设置如下:
Keep alive能减少浏览器重新连接的次数。
keepalive_timeout和keepalive_requests控制保持活动设置。
sendfile优化Nginx提供文件系统的静态文件服务的性能,如logo。
tcp_nodelay允许Nginx使TCP发送多个缓冲区作为单独的数据包。
tcp_nopush通过激活TCP堆栈中的TCP_CORK选项来优化一次向下游发送的数据量。 TCP_CORK阻塞数据,直到分组到达MSS,这等于MTU减去IP报头的40或60字节。
/etc/nginx/nginx.conf
调整缓冲区大小可能是有利的。 如果缓冲区大小太低,那么Nginx将写入一个临时文件。 这将导致过多的磁盘I/O。
client_body_buffer_size处理客户端缓冲区大小。 大多数客户端缓冲区都来自POST方法表单提交。 128k通常是此设置的不错选择。
client_max_body_size设置最大body缓冲区大小。 如果请求中的大小超过配置的值,则会将413(请求实体过大)错误返回给客户端。 不过浏览器无法正确显示413错误。 将大小设置为0将禁用对客户机请求正文大小的检查。
client_header_buffer_size处理客户端头大小。 默认情况下,1k通常是一个合理的选择。
large_client_header_buffers设置客户端头的缓冲区的最大数量和大小。 4个报头与4k缓冲区应该足够了。
output_buffers设置用于从磁盘读取响应的缓冲区的数量和大小。 如果可能,客户端数据的传输将被推迟,直到Nginx至少具有要发送的数据的字节数的集合大小。 零值禁止推迟数据传输。
/etc/nginx/nginx.conf:
可以更改/etc/sysctl.conf文件中的某些指令,以便为连接和buckets设置Linux队列的大小。 更新net.core.somaxconn和net.ipv4.tcp_max_tw_buckets会更改等待Nginx接受的连接的队列大小。 如果内核日志中有错误消息,请增加该值,直到错误消失。
/etc/sysctl.conf:
可以通过使用net.core.netdev_max_backlog标记设置最大积压量,将数据包缓存在网卡中,然后交给CPU。 有关更改此值的建议,请参阅网卡文档。
超时设置还可以大幅提高性能。
client_body_timeout指令设置服务器等待客户端完成发送body的最大时间。
client_header_timeout指令设置服务器等待客户端完成发送header的最大时间。
sent_timeout指定对客户端的响应超时。 此超时不适用于整个传输,而是仅应用于两个后续的客户端读取操作之间。 因此,如果客户端没有读取任何数据这段时间,那么Nginx关闭连接。
/etc/nginx/nginx.conf:
如果您的网站提供静态资源(如CSS/JavaScript/images),Nginx可以缓存这些文件很短的时间。 在配置块中添加这个命令会告诉Nginx缓存1000个文件30秒,不包括在20秒内未被访问的任何文件,只有5倍或更多的文件。 如果你不经常部署,你可以安全地把这些数字调得更高。
/etc/nginx/nginx.conf:
您还可以缓存特定位置的资源。 缓存文件很长时间是有好处的,尤其是如果文件由版本控制系统管理。
/etc/nginx/nginx.conf
对于纯文本的内容,Nginx可以使用gzip压缩将这些资源返回给客户端。 现代的网络浏览器都支持gzip压缩的内容,这将减少网络传输的字节数。 下面的列表是可压缩内容类型的“安全”列表; 但是,您只需要启用您在Web应用程序中使用的内容类型。
/etc/nginx/nginx.conf:
当Nginx充当代理时,到上游服务器的每个连接使用临时或短暂的端口。
ip_local_port_range定义端口范围值。 常见设置为
tcp_fin_timeout指定端口必须处于非活动状态才能重用于其他连接的时间。 默认值通常为60秒,但通常可以安全地减少到30或甚至15秒:
net.ipv4.tcp_max_syn_backlog设置保留在Backlog中的最大数据包数量,超过后内核会丢弃。 正常值为net.ipv4.tcp_max_syn_backlog = 3240000。
文件描述符是用于处理诸如连接和打开文件等操作系统资源。 Nginx每个连接最多可以使用两个文件描述符。 例如,如果它是代理,通常有一个文件描述符用于客户端连接,另一个用于连接到代理服务器,不过如果使用HTTP keep alives,这个比率要低得多。 对于需要服务大量连接的系统,可能需要调整这些设置。
sys.fs.file max定义文件描述符的系统范围限制。 nofile定义用户文件描述符限制,在/etc/security/limits.conf文件中设置。
/etc/security/limits.conf:
/etc/sysctl.conf:
/etc/security/limits.conf:
nginx.conf: