降低 Nginx 日志中请求延迟的实用方案
一 明确延迟来源
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'request_time=$request_time upstream_response_time=$upstream_response_time';
access_log /var/log/nginx/access.log main;
通过对比两者即可快速定位优化方向。二 快速定位慢请求
awk '{print $NF, $7}' /var/log/nginx/access.log | sort -k1 -nr | head -10
cat /var/log/nginx/access.log | docker run --rm -i diyan/goaccess \
--time-format='%H:%M:%S' --date-format='%d/%b/%Y' \
--log-format='%h %^[%d:%t %^] "%r" %s %b "%R" "%u"' > index.html
pip install ngxtop
ngxtop -c /etc/nginx/nginx.conf -t 1
三 Nginx 层优化要点
proxy_http_version 1.1; proxy_set_header Connection "";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_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
四 上游与应用层优化
五 监控与持续优化