使用Nginx子目录+SSL反向代理出现504网关超时错误求助
问题分析与解决方案
核心问题定位
504 Gateway Time-out 表明Nginx无法在超时时间内从后端服务 http://dev.yusufss.com:32769 获取响应;old SSL session ID is stale, removing 属于SSL会话缓存的常规清理日志,和504错误无直接关联,但需先确认代理链路的核心问题。
排查与修复步骤
1. 验证Nginx容器到后端服务的网络连通性
Docker容器间的网络隔离是常见诱因,先从Nginx容器内部测试后端可达性:
- 进入Nginx容器:
docker exec -it <nginx-container-id> /bin/bash - 执行测试命令:
curl http://<backend-container-ip>:32768(优先用Docker内部容器IP/名称,而非外部域名端口,避免走外部链路)
若测试失败,修复Docker网络配置:
- 检查容器是否在同一网络:
docker network inspect <network-name> - 将Nginx容器加入后端所在网络:
docker network connect <backend-network> <nginx-container-name>
2. 修正Nginx反向代理配置
以下是适配需求的配置示例,重点解决路径转发与超时问题:
server { listen 443 ssl; server_name dev.yusufss.com; # SSL证书配置(替换为你的证书路径) ssl_certificate /etc/nginx/certs/dev.yusufss.com.pem; ssl_certificate_key /etc/nginx/certs/dev.yusufss.com.key; # 主域名着陆页配置 location / { root /usr/share/nginx/html/landing; index index.html; } # /hawkbit路径代理配置 location /hawkbit/ { # 用Docker内部后端地址替代外部域名,避免网络绕路 proxy_pass http://<backend-container-name>:32768/; # 传递必要的请求头,确保后端服务识别请求来源 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 X-Forwarded-Proto $scheme; # 延长超时时间,适配后端服务响应速度 proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 30s; } } server { listen 80; server_name dev.yusufss.com; # HTTP跳转HTTPS return 301 https://$host$request_uri; }
配置关键点:
proxy_pass末尾的/:会自动去掉请求路径中的/hawkbit前缀,若后端服务本身挂载在/hawkbit路径下,需删除该后缀- 避免使用外部域名作为代理目标,优先用Docker内部容器IP/名称,减少网络延迟与故障点
- 调整超时参数,避免因后端响应慢触发504
3. 处理SSL会话警告
该警告属于正常日志,若需消除,可优化SSL会话缓存配置:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
调整后可降低过期会话的清理频率,减少此类日志输出。
4. 通过Nginx日志定位精准故障
查看Nginx错误日志(通常路径:/var/log/nginx/error.log),若出现 upstream timed out (110: Connection timed out) while connecting to upstream,则说明:
- 后端服务未监听目标端口
- 防火墙/Docker网络规则阻断了连接
- 后端服务崩溃或无响应
5. 确认端口映射一致性
核对后端容器的端口映射规则:若宿主机端口32769映射到容器内部32768,Nginx容器内部需访问容器的32768端口,而非宿主机的32769端口(容器访问宿主机需用宿主机内部IP,如 172.17.0.1)
验证修复
修改配置后,重新加载Nginx:docker exec <nginx-container-id> nginx -s reload,再访问 https://dev.yusufss.com/hawkbit 测试。
内容的提问来源于stack exchange,提问作者Yusufss
相关产品推荐
相关产品推荐

