前言
Nginx作為現代互聯網架構中最重要的Web服務器和反向代理服務器,其性能調優對企業級應用的穩定性和效率至關重要。本指南將從運維實踐角度出發,詳細介紹Nginx在企業環境中的各種調優策略和最佳實踐。
一、基礎配置調優
1.1 工作進程配置
# 根據CPU核心數設置工作進程數 worker_processesauto; # 工作進程綁定CPU核心 worker_cpu_affinityauto; # 單個工作進程最大連接數 worker_connections65535; # 工作進程最大打開文件數 worker_rlimit_nofile65535;
1.2 事件模型優化
events{ # 使用epoll事件模型(Linux系統) useepoll; # 允許同時接受多個新連接 multi_accepton; # 工作進程最大連接數 worker_connections65535; # 接受連接鎖 accept_mutexoff; }
1.3 網絡連接優化
# 啟用高效文件傳輸 sendfileon; # 優化sendfile性能 tcp_nopushon; tcp_nodelayon; # 連接保持時間 keepalive_timeout65; keepalive_requests100; # 客戶端請求頭超時 client_header_timeout15; # 客戶端請求體超時 client_body_timeout15; # 向客戶端發送響應超時 send_timeout15;
二、內存和緩沖區調優
2.1 緩沖區設置
# 客戶端請求頭緩沖區 client_header_buffer_size4k; large_client_header_buffers88k; # 客戶端請求體緩沖區 client_body_buffer_size128k; client_max_body_size100m; # 代理緩沖區 proxy_buffer_size4k; proxy_buffers84k; proxy_busy_buffers_size8k; # FastCGI緩沖區 fastcgi_buffer_size4k; fastcgi_buffers84k; fastcgi_busy_buffers_size8k;
2.2 文件緩存配置
# 打開文件緩存 open_file_cachemax=100000inactive=20s; open_file_cache_valid30s; open_file_cache_min_uses2; open_file_cache_errorson; # 日志緩存 access_log/var/log/nginx/access.log main buffer=32kflush=5s; error_log/var/log/nginx/error.logwarn;
三、壓縮優化
3.1 Gzip壓縮
# 啟用Gzip壓縮 gzipon; gzip_varyon; gzip_min_length1000; gzip_comp_level6; gzip_proxiedany; # 壓縮文件類型 gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml+rss application/atom+xml image/svg+xml; # 壓縮緩沖區 gzip_buffers168k; gzip_http_version1.1;
3.2 Brotli壓縮(需要模塊支持)
# 啟用Brotli壓縮 brotlion; brotli_comp_level6; brotli_min_length1000; brotli_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml application/rss+xml application/atom+xml image/svg+xml;
四、SSL/TLS優化
4.1 SSL配置優化
# SSL協議版本 ssl_protocolsTLSv1.2TLSv1.3; # 加密套件 ssl_ciphersECDHE-RSA-AES128-GCM-SHA256ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384; ssl_prefer_server_cipherson; # SSL會話緩存 ssl_session_cacheshared50m; ssl_session_timeout1d; ssl_session_ticketsoff; # OCSP Stapling ssl_staplingon; ssl_stapling_verifyon; ssl_trusted_certificate/path/to/ca-bundle.crt;
4.2 HTTP/2配置
server{ listen443ssl http2; server_nameexample.com; # HTTP/2推送 http2_push_preloadon; # 其他SSL配置... }
五、負載均衡和代理優化
5.1 上游服務器配置
upstreambackend { # 負載均衡算法 ip_hash; # 后端服務器 server192.168.1.10:8080weight=3max_fails=3fail_timeout=30s; server192.168.1.11:8080weight=2max_fails=3fail_timeout=30s; server192.168.1.12:8080weight=1max_fails=3fail_timeout=30sbackup; # 連接保持 keepalive32; keepalive_requests100; keepalive_timeout60s; }
5.2 代理配置優化
location/ { proxy_passhttp://backend; # 代理超時設置 proxy_connect_timeout5s; proxy_send_timeout60s; proxy_read_timeout60s; # 代理緩沖 proxy_bufferingon; proxy_buffer_size4k; proxy_buffers84k; # 代理頭信息 proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerX-Forwarded-Proto$scheme; # HTTP版本 proxy_http_version1.1; proxy_set_headerConnection""; }
六、緩存策略
6.1 靜態資源緩存
# 圖片、CSS、JS緩存 location~* .(jpg|jpeg|png|gif|ico|css|js)${ expires1y; add_headerCache-Control"public, immutable"; add_headerVary Accept-Encoding; } # 字體文件緩存 location~* .(woff|woff2|ttf|eot)${ expires1y; add_headerCache-Control"public"; add_headerAccess-Control-Allow-Origin *; }
6.2 代理緩存
# 緩存配置 proxy_cache_path/var/cache/nginx levels=1:2keys_zone=my_cache:10mmax_size=10ginactive=60muse_temp_path=off; server{ location/ { proxy_cachemy_cache; proxy_cache_valid20030210m; proxy_cache_valid4041m; proxy_cache_use_staleerrortimeout updating http_500 http_502 http_503 http_504; proxy_cache_lockon; proxy_cache_lock_timeout5s; # 緩存key proxy_cache_key$scheme$proxy_host$request_uri; # 緩存頭信息 add_headerX-Cache-Status$upstream_cache_status; proxy_passhttp://backend; } }
七、安全加固
7.1 基礎安全配置
# 隱藏版本信息 server_tokensoff; # 安全頭 add_headerX-Frame-Options"SAMEORIGIN"always; add_headerX-Content-Type-Options"nosniff"always; add_headerX-XSS-Protection"1; mode=block"always; add_headerReferrer-Policy"strict-origin-when-cross-origin"always; # 限制請求方法 if($request_method!~ ^(GET|HEAD|POST)$){ return405; }
7.2 請求限制
# 限制請求頻率 limit_req_zone$binary_remote_addrzone=api:10mrate=10r/s; limit_req_zone$binary_remote_addrzone=login:10mrate=1r/s; server{ location/api/ { limit_reqzone=api burst=20nodelay; limit_req_status429; } location/login { limit_reqzone=login burst=5nodelay; limit_req_status429; } } # 限制連接數 limit_conn_zone$binary_remote_addrzone=conn_limit_per_ip:10m; limit_connconn_limit_per_ip10;
八、監控和日志
8.1 訪問日志優化
# 自定義日志格式 log_formatmain'$remote_addr-$remote_user[$time_local] "$request" ' '$status$body_bytes_sent"$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '$request_time$upstream_response_time'; # 條件日志記錄 map$status$loggable{ ~^[23] 0; default1; } access_log/var/log/nginx/access.log main buffer=32kflush=5sif=$loggable;
8.2 狀態監控
# 啟用狀態頁面 location/nginx_status { stub_statuson; access_logoff; allow127.0.0.1; allow192.168.1.0/24; denyall; }
九、系統級優化
9.1 內核參數調優
# /etc/sysctl.conf net.core.somaxconn = 65535 net.core.netdev_max_backlog = 5000 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 1024 65535 fs.file-max = 6815744
9.2 文件描述符限制
# /etc/security/limits.conf nginx soft nofile 65535 nginx hard nofile 65535 nginx softnproc65535 nginx hardnproc65535
十、性能監控和調優工具
10.1 監控指標
關鍵監控指標包括:
? 請求處理時間
? 并發連接數
? 錯誤率
? 內存使用情況
? CPU使用率
? 網絡帶寬利用率
10.2 性能測試工具
# 使用wrk進行壓力測試 wrk -t12 -c400 -d30s --latency http://example.com/ # 使用ab進行基準測試 ab -n 10000 -c 100 http://example.com/ # 使用siege進行并發測試 siege -c 100 -t 30s http://example.com/
十一、最佳實踐總結
1.合理配置工作進程數:通常設置為CPU核心數或使用auto自動檢測
2.優化緩沖區大小:根據實際業務需求調整緩沖區大小
3.啟用壓縮:對文本類型資源啟用gzip壓縮
4.配置合理的超時時間:避免長時間占用連接
5.使用HTTP/2:提升多路復用性能
6.實施緩存策略:合理設置靜態資源和代理緩存
7.定期監控和優化:持續監控性能指標并進行調優
十二、故障排查
12.1 常見問題診斷
# 檢查Nginx配置 nginx -t # 查看錯誤日志 tail-f /var/log/nginx/error.log # 檢查進程狀態 ps aux | grep nginx # 查看連接狀態 netstat -an | grep :80 |wc-l # 檢查文件描述符使用情況 lsof -u nginx |wc-l
12.2 性能問題排查
當遇到性能問題時,應該:
1. 檢查系統資源使用情況
2. 分析訪問日志模式
3. 監控上游服務器響應時間
4. 檢查緩存命中率
5. 分析網絡連接狀態
通過系統性的調優和持續的監控,可以顯著提升Nginx在企業環境中的性能表現,確保業務的穩定運行。
-
互聯網
+關注
關注
55文章
11249瀏覽量
106375 -
服務器
+關注
關注
13文章
9791瀏覽量
87929 -
nginx
+關注
關注
0文章
171瀏覽量
12590
原文標題:大廠Nginx調優秘籍:QPS提升500%的核心配置技巧
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論