Myluzh Blog

Nginx性能优化笔记

发布时间: 2024-9-3 文章作者: myluzh 分类名称: NOTE 朗读文章


0x01 Nginx 工作进程数量
Nginx 的 worker_processes 参数设置了工作进程的数量。通常建议将其设置为 CPU 核心数的数量或核心数的两倍。可以使用以下命令查看 CPU 核心数:
grep ^processor /proc/cpuinfo | wc -l
配置示例:
worker_processes 4;

0x02 CPU 亲和力设置
worker_cpu_affinity 参数用于指定每个工作进程绑定的 CPU 核心。根据 CPU 核心数进行配置:
对于 4 核 CPU:
worker_cpu_affinity 0001 0010 0100 1000;
对于 8 核 CPU:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
注: worker_processes 最多设置为 8,超过这个数值可能不会带来性能提升。

0x03 最大打开文件数
worker_rlimit_nofile 用于设置 Nginx 进程可以打开的最大文件数。通常设置为 ulimit -n 的值,以确保一致性。
worker_rlimit_nofile 65535;

0x04 事件处理模型
Nginx 默认使用 epoll 事件模型。配置示例:
events {
 use epoll;
 worker_connections 65535;
 multi_accept on;
}
worker_connections:每个 worker 进程的最大连接数。根据服务器性能和内存设置。
multi_accept:设置为 on 时,worker 将一次性接受尽可能多的连接。

0x05 高效传输模式
启用高效的文件传输模式:
http {
 include mime.types;
 default_type application/octet-stream;
 sendfile on;
 tcp_nopush on;
}
sendfile on:开启高效文件传输模式。
tcp_nopush on:减少网络报文段的数量,减少阻塞。

0x06 连接超时时间
控制连接超时以保护服务器资源:
keepalive_timeout 60;
tcp_nodelay on;
client_header_buffer_size 4k;
open_file_cache max=102400 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
client_header_timeout 15;
client_body_timeout 15;
reset_timedout_connection on;
send_timeout 15;
server_tokens off;
client_max_body_size 10m;
keepalive_timeout:保持会话的超时时间。
tcp_nodelay:防止网络阻塞。
client_header_buffer_size 和 client_body_timeout:控制请求头部和请求体的超时时间。
open_file_cache:配置文件缓存。

0x07 FastCGI 调优
优化 FastCGI 配置以提升性能:
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_temp_path /usr/local/nginx1.10/nginx_tmp;
fastcgi_intercept_errors on;
fastcgi_cache_path /usr/local/nginx1.10/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g;
fastcgi_cache_path:配置 FastCGI 缓存目录。
fastcgi_cache:启用 FastCGI 缓存。

0x08 Gzip 压缩
启用 Gzip 压缩以节省带宽:
gzip on;
gzip_min_length 2k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_proxied any;
gzip_min_length:设置允许压缩的页面最小字节数。
gzip_comp_level:指定压缩比。

0x09 Expires 缓存
配置浏览器缓存以提高性能:
location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ {
 expires 30d;
}

location ~* \.(js|css)$ {
 expires 7d;
}
expires:设置资源的缓存过期时间。

0x10 内核参数优化
调整内核参数以提升网络性能:
fs.file-max = 999999 # 最大打开文件描述符数量,提升这个值可以增加系统的并发处理能力。
net.ipv4.tcp_max_tw_buckets = 6000 # TIME-WAIT状态的最大数量,减少该数量可以降低TIME-WAIT连接的资源占用。
net.ipv4.ip_local_port_range = 1024 65000 # 可用的本地端口范围,扩大此范围可以避免端口耗尽。
net.ipv4.tcp_tw_recycle = 1 # 启用TIME-WAIT状态的快速回收,提升连接处理能力(注意可能对NAT环境有影响)。
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME-WAIT状态的套接字,增加端口利用率。
net.ipv4.tcp_keepalive_time = 30 # 空闲TCP连接发送keepalive消息的时间,设置短时间可更快发现死连接。
net.ipv4.tcp_syncookies = 1 # 启用SYN Cookies防止SYN Flood攻击,提升系统的稳定性。
net.core.somaxconn = 40960 # 每个端口的最大监听队列长度,增加该值可处理更多的入站连接请求。
net.core.netdev_max_backlog = 262144 # 网络接口接收数据包的最大队列长度,提升此值可以减少数据包丢失。
net.ipv4.tcp_max_syn_backlog = 262144 # TCP SYN队列的最大长度,增大此值可以提高高并发连接的处理能力。
注: 使用 sysctl -p 应用更改。

标签: nginx 性能优化笔记

发表评论