theme: default themeName: "默认主题" title: "Nginx性能调优:让你的Web服务器跑得比竞争对手快一倍"
Nginx性能调优:让你的Web服务器跑得比竞争对手快一倍
Nginx是目前最流行的Web服务器之一,但很多人装完就用默认配置,完全没发挥出它的潜力。我见过不少公司花大价钱买了高配服务器,结果Nginx配置一塌糊涂,性能还不如人家低配机器。
今天把我多年调优Nginx的经验整理出来,从内核参数到Nginx配置,全链路优化,让你的服务器性能翻倍。
第一层:操作系统内核参数
Nginx再强,底层OS不配合也白搭。先把内核参数调好。
文件描述符限制
Nginx每个连接都需要一个文件描述符,默认限制1024太低了。
# 查看当前限制
ulimit -n
临时修改
ulimit -n 65535
永久修改 /etc/security/limits.conf
nginx soft nofile 65535 nginx hard nofile 65535 root soft nofile 65535 root hard nofile 65535
TCP参数优化
# /etc/sysctl.conf
增大TCP连接队列
net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535
开启TCP快速回收和重用
net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30
增大本地端口范围
net.ipv4.ip_local_port_range = 1024 65535
增大接收/发送缓冲区
net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216
开启TCP BBR拥塞控制(Linux 4.9+)
net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr
# 应用配置
sysctl -p
TCP BBR是Google开发的拥塞控制算法,在高延迟、高丢包网络下效果显著,实测吞吐量可以提升2-10倍。
第二层:Nginx主配置优化
Worker进程配置
# nginx.conf
Worker进程数,通常设为CPU核心数
worker_processes auto;
Worker进程绑定CPU(减少CPU切换开销)
worker_cpu_affinity auto;
每个Worker的最大连接数
events { worker_connections 65535; # 使用epoll(Linux最高效的IO多路复用) use epoll; # 允许一次接受多个连接 multi_accept on; }
HTTP全局配置
http {
# 开启sendfile,减少内核态/用户态切换 sendfile on; tcp_nopush on; tcp_nodelay on;
# 长连接超时 keepalive_timeout 65; keepalive_requests 1000;
# 关闭版本号显示(安全) server_tokens off;
# 开启Gzip压缩 gzip on; gzip_min_length 1k; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_vary on; gzip_proxied any;
# 客户端请求体大小限制 client_max_body_size 100m; client_body_buffer_size 128k;
# 请求头缓冲区 client_header_buffer_size 4k; large_client_header_buffers 4 16k;
# 超时设置 client_header_timeout 15s; client_body_timeout 15s; send_timeout 15s; }
静态文件缓存
server {
# 静态文件缓存
location ~* \.(jpg jpeg png gif ico css js woff woff2 ttf svg)$ {
expires 30d; add_header Cache-Control "public, immutable"; access_log off;
# 开启open_file_cache,减少文件系统调用 open_file_cache max=10000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; } }
反向代理优化
upstream backend {
# 使用最少连接算法 least_conn;
server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=30s; server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=30s;
# 长连接到后端 keepalive 32; }
server { location / { proxy_pass http://backend;
# 长连接 proxy_http_version 1.1; proxy_set_header Connection "";
# 缓冲区设置 proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_busy_buffers_size 8k;
# 超时设置 proxy_connect_timeout 5s; proxy_read_timeout 60s; proxy_send_timeout 60s;
# 传递真实IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } }
第三层:HTTPS性能优化
HTTPS是现在的标配,但TLS握手有性能开销,需要专门优化。
SSL会话缓存
http {
# SSL会话缓存,减少重复握手 ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; ssl_session_tickets off;
# 使用TLS 1.2和1.3 ssl_protocols TLSv1.2 TLSv1.3;
# 高性能加密套件 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off;
# OCSP Stapling,减少证书验证时间 ssl_stapling on; ssl_stapling_verify on; resolver 223.5.5.5 223.6.6.6 valid=300s; }
HTTP/2
server {
listen 443 ssl http2; # HTTP/2多路复用,一个连接处理多个请求 # 比HTTP/1.1性能提升30-50% }
第四层:缓存层优化
Nginx Proxy Cache
http {
# 定义缓存区域 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server { location / { proxy_cache my_cache; proxy_cache_valid 200 1d; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_cache_lock on;
# 缓存命中率监控 add_header X-Cache-Status $upstream_cache_status; } } }
性能测试验证
调优完了要验证效果,推荐用`wrk`做压测:
# 安装wrk
apt install wrk
压测:4线程,400并发,持续30秒
wrk -t4 -c400 -d30s http://your-server/
输出示例
Running 30s test @ http://your-server/ 4 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 12.34ms 5.67ms 89.12ms 78.90% Req/Sec 8.12k 1.23k 12.34k 67.89% 972345 requests in 30.01s, 1.23GB read Requests/sec: 32401.23 Transfer/sec: 42.00MB
对比调优前后的`Requests/sec`,就能看出优化效果。
写在最后
Nginx调优是个系统工程,从OS内核到应用层,每一层都有优化空间。
优化优先级:1. 内核参数(文件描述符、TCP参数) 2. Worker进程和连接数 3. Gzip压缩 4. 静态文件缓存 5. HTTPS/HTTP2优化 6. 代理缓存
每次调优后都要做压测验证,不要凭感觉说「应该更快了」。数据说话,才是工程师的态度。
【放心,我们兜底】
不管你是自己尝试修复,还是需要专业人员上门,易云城IT服务都给你托底。修不好不收费,修好了质保期内随时找我。
📞 服务热线:13708730161 💬 微信:eyc1689 📧 邮箱:service@eycit.com 🌐 https://www.eycit.com
您身边的IT专家。