Nginx反向代理运行一日后出现504超时及401认证问题求助
Nginx反向代理问题排查与解决
一、运行一段时间后出现504超时问题
核心原因
- 与AWS私有负载均衡器的连接未复用,频繁创建销毁连接导致资源耗尽
- 未配置合理的上游超时参数,上游处理慢时触发Nginx超时
- Nginx worker进程数不足,并发处理能力跟不上
配置调整方案
- 配置上游连接池,启用长连接复用
在http块中添加上游定义:
upstream aws_private_lb { server example.com; keepalive 32; # 保持32个长连接,可根据实际并发量调整 }
修改location中的proxy_pass为:
proxy_pass http://aws_private_lb/$request_uri;
- 添加代理超时参数
在location块中补充以下配置:
proxy_connect_timeout 30s; # 连接上游的超时时间 proxy_send_timeout 60s; # 向上游发送请求的超时时间 proxy_read_timeout 60s; # 读取上游响应的超时时间 proxy_http_version 1.1; # 启用HTTP/1.1以支持长连接 proxy_set_header Connection ""; # 清除客户端的Connection头,由Nginx管理长连接
- 优化Nginx worker进程数
在events块顶部添加:
worker_processes auto; # 根据CPU核数自动设置进程数,提升并发处理能力
二、Base64认证字符串触发提前401错误问题
问题分析
当前server块全局启用了auth_basic认证,所有请求都会先经过Nginx的本地认证校验,导致客户端携带的Base64认证头无法传递到下游服务就被拦截。若该location无需Nginx本地认证,仅需将认证头透传给下游,可按以下调整:
配置调整方案
在目标location块中关闭本地认证,并修正认证头传递的变量:
location ~* "^/regex/$" { auth_basic off; # 关闭当前路径的Nginx本地认证 proxy_pass http://aws_private_lb/$request_uri; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Authorization $http_authorization; # 传递客户端的Authorization头给下游 # 补充超时配置 proxy_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 60s; proxy_http_version 1.1; proxy_set_header Connection ""; }
三、日志排查优化
将error_log级别调整为debug,获取更详细的请求处理日志:
error_log /var/log/nginx/error.log debug;
重启Nginx后,查看/var/log/nginx/error.log可定位超时、认证等问题的具体原因。
内容的提问来源于stack exchange,提问作者Arcticquiff
相关产品推荐
相关产品推荐

