You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:35:10