前言
Nginx作為現(xiàn)代互聯(lián)網(wǎng)架構(gòu)中最重要的Web服務(wù)器和反向代理服務(wù)器,其性能調(diào)優(yōu)對(duì)企業(yè)級(jí)應(yīng)用的穩(wěn)定性和效率至關(guān)重要。本指南將從運(yùn)維實(shí)踐角度出發(fā),詳細(xì)介紹Nginx在企業(yè)環(huán)境中的各種調(diào)優(yōu)策略和最佳實(shí)踐。
一、基礎(chǔ)配置調(diào)優(yōu)
1.1 工作進(jìn)程配置
# 根據(jù)CPU核心數(shù)設(shè)置工作進(jìn)程數(shù) worker_processesauto; # 工作進(jìn)程綁定CPU核心 worker_cpu_affinityauto; # 單個(gè)工作進(jìn)程最大連接數(shù) worker_connections65535; # 工作進(jìn)程最大打開文件數(shù) worker_rlimit_nofile65535;
1.2 事件模型優(yōu)化
events{
# 使用epoll事件模型(Linux系統(tǒng))
useepoll;
# 允許同時(shí)接受多個(gè)新連接
multi_accepton;
# 工作進(jìn)程最大連接數(shù)
worker_connections65535;
# 接受連接鎖
accept_mutexoff;
}
1.3 網(wǎng)絡(luò)連接優(yōu)化
# 啟用高效文件傳輸 sendfileon; # 優(yōu)化sendfile性能 tcp_nopushon; tcp_nodelayon; # 連接保持時(shí)間 keepalive_timeout65; keepalive_requests100; # 客戶端請(qǐng)求頭超時(shí) client_header_timeout15; # 客戶端請(qǐng)求體超時(shí) client_body_timeout15; # 向客戶端發(fā)送響應(yīng)超時(shí) send_timeout15;
二、內(nèi)存和緩沖區(qū)調(diào)優(yōu)
2.1 緩沖區(qū)設(shè)置
# 客戶端請(qǐng)求頭緩沖區(qū) client_header_buffer_size4k; large_client_header_buffers88k; # 客戶端請(qǐng)求體緩沖區(qū) client_body_buffer_size128k; client_max_body_size100m; # 代理緩沖區(qū) proxy_buffer_size4k; proxy_buffers84k; proxy_busy_buffers_size8k; # FastCGI緩沖區(qū) 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;
三、壓縮優(yōu)化
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; # 壓縮緩沖區(qū) 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優(yōu)化
4.1 SSL配置優(yōu)化
# SSL協(xié)議版本 ssl_protocolsTLSv1.2TLSv1.3; # 加密套件 ssl_ciphersECDHE-RSA-AES128-GCM-SHA256ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384; ssl_prefer_server_cipherson; # SSL會(huì)話緩存 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配置...
}
五、負(fù)載均衡和代理優(yōu)化
5.1 上游服務(wù)器配置
upstreambackend {
# 負(fù)載均衡算法
ip_hash;
# 后端服務(wù)器
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 代理配置優(yōu)化
location/ {
proxy_passhttp://backend;
# 代理超時(shí)設(shè)置
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 靜態(tài)資源緩存
# 圖片、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 基礎(chǔ)安全配置
# 隱藏版本信息 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; # 限制請(qǐng)求方法 if($request_method!~ ^(GET|HEAD|POST)$){ return405; }
7.2 請(qǐng)求限制
# 限制請(qǐng)求頻率
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;
}
}
# 限制連接數(shù)
limit_conn_zone$binary_remote_addrzone=conn_limit_per_ip:10m;
limit_connconn_limit_per_ip10;
八、監(jiān)控和日志
8.1 訪問日志優(yōu)化
# 自定義日志格式
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 狀態(tài)監(jiān)控
# 啟用狀態(tài)頁(yè)面
location/nginx_status {
stub_statuson;
access_logoff;
allow127.0.0.1;
allow192.168.1.0/24;
denyall;
}
九、系統(tǒng)級(jí)優(yōu)化
9.1 內(nèi)核參數(shù)調(diào)優(yōu)
# /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
十、性能監(jiān)控和調(diào)優(yōu)工具
10.1 監(jiān)控指標(biāo)
關(guān)鍵監(jiān)控指標(biāo)包括:
? 請(qǐng)求處理時(shí)間
? 并發(fā)連接數(shù)
? 錯(cuò)誤率
? 內(nèi)存使用情況
? CPU使用率
? 網(wǎng)絡(luò)帶寬利用率
10.2 性能測(cè)試工具
# 使用wrk進(jìn)行壓力測(cè)試 wrk -t12 -c400 -d30s --latency http://example.com/ # 使用ab進(jìn)行基準(zhǔn)測(cè)試 ab -n 10000 -c 100 http://example.com/ # 使用siege進(jìn)行并發(fā)測(cè)試 siege -c 100 -t 30s http://example.com/
十一、最佳實(shí)踐總結(jié)
1.合理配置工作進(jìn)程數(shù):通常設(shè)置為CPU核心數(shù)或使用auto自動(dòng)檢測(cè)
2.優(yōu)化緩沖區(qū)大小:根據(jù)實(shí)際業(yè)務(wù)需求調(diào)整緩沖區(qū)大小
3.啟用壓縮:對(duì)文本類型資源啟用gzip壓縮
4.配置合理的超時(shí)時(shí)間:避免長(zhǎng)時(shí)間占用連接
5.使用HTTP/2:提升多路復(fù)用性能
6.實(shí)施緩存策略:合理設(shè)置靜態(tài)資源和代理緩存
7.定期監(jiān)控和優(yōu)化:持續(xù)監(jiān)控性能指標(biāo)并進(jìn)行調(diào)優(yōu)
十二、故障排查
12.1 常見問題診斷
# 檢查Nginx配置 nginx -t # 查看錯(cuò)誤日志 tail-f /var/log/nginx/error.log # 檢查進(jìn)程狀態(tài) ps aux | grep nginx # 查看連接狀態(tài) netstat -an | grep :80 |wc-l # 檢查文件描述符使用情況 lsof -u nginx |wc-l
12.2 性能問題排查
當(dāng)遇到性能問題時(shí),應(yīng)該:
1. 檢查系統(tǒng)資源使用情況
2. 分析訪問日志模式
3. 監(jiān)控上游服務(wù)器響應(yīng)時(shí)間
4. 檢查緩存命中率
5. 分析網(wǎng)絡(luò)連接狀態(tài)
通過系統(tǒng)性的調(diào)優(yōu)和持續(xù)的監(jiān)控,可以顯著提升Nginx在企業(yè)環(huán)境中的性能表現(xiàn),確保業(yè)務(wù)的穩(wěn)定運(yùn)行。
-
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
55文章
11333瀏覽量
109754 -
服務(wù)器
+關(guān)注
關(guān)注
14文章
10223瀏覽量
91409 -
nginx
+關(guān)注
關(guān)注
0文章
184瀏覽量
13081
原文標(biāo)題:大廠Nginx調(diào)優(yōu)秘籍:QPS提升500%的核心配置技巧
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
HarmonyOSAI編程智慧調(diào)優(yōu)
KeenTune的算法之心——KeenOpt 調(diào)優(yōu)算法框架 | 龍蜥技術(shù)
如何對(duì)電機(jī)進(jìn)行調(diào)優(yōu)?調(diào)優(yōu)的好處是什么?
基于臭氧的Kafka自適應(yīng)調(diào)優(yōu)方法ENLHS
Linux用電功耗調(diào)優(yōu)的筆記分享
關(guān)于JVM的調(diào)優(yōu)知識(shí)
KeenOpt調(diào)優(yōu)算法框架實(shí)現(xiàn)對(duì)調(diào)優(yōu)對(duì)象和配套工具的快速適配
高性能Nginx HTTPS調(diào)優(yōu)-如何為HTTPS提速30%
javajvm調(diào)優(yōu)有幾種方法
什么場(chǎng)景需要jvm調(diào)優(yōu)
jvm調(diào)優(yōu)主要是調(diào)哪里
鴻蒙開發(fā)實(shí)戰(zhàn):【性能調(diào)優(yōu)組件】
深度解析JVM調(diào)優(yōu)實(shí)踐應(yīng)用
xgboost超參數(shù)調(diào)優(yōu)技巧 xgboost在圖像分類中的應(yīng)用
Nginx性能優(yōu)化終極指南
Nginx在企業(yè)環(huán)境中的調(diào)優(yōu)策略
評(píng)論