【问题标题】:NGINX proxy_pass Second Location Block 504 Gateway Time-OutNGINX proxy_pass 第二个位置块 504 网关超时
【发布时间】:2021-01-20 21:33:42
【问题描述】:

在服务器上,我有 2 个容器,前端在 8092 端口上运行,后端在 3011 端口上运行。 在浏览器中,我可以看到前端,但所有后端调用都收到 504 网关超时。 前端是 Angular 应用,后端是 express nodejs 应用。

后端端点正在调用https://test.example.com/api/some-path 如果我去https://xxx.domain.local:3011/api/some-path 我会收到回复。

server {
    listen 443 ssl;
    server_name test.example.com;

    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/web.key;

    location / {
        proxy_pass http://xxx.domain.local:8092;
        proxy_set_header Host $host;
        proxy_set_header X-Real_IP $remote_addr;
    }

    location /api {
        proxy_pass https://xxx.domain.local:3011;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

【问题讨论】:

  • 您是如何容器化您的后端应用程序的?
  • 使用 Docker 和 NGINX
  • 你是不是通过docker暴露了端口?
  • 是的。在浏览器中,我可以得到来自xxx.domain.local:3011/api/some-path 的回复。但是当通过反向代理调用时,服务器要么没有收到请求,要么没有响应。
  • 我想我找到了问题所在。配置显示 https 而不是 http。如果您的容器不提供 https,请确保将 proxy_pass https://xxx.domain.local:3011; 更改为 proxy_pass http://xxx.domain.local:3011;

标签: node.js express nginx


【解决方案1】:

504 Gateway Time-out 表示 NGINX 代理在指定的时间跨度内没有从容器中得到响应。

确保您的后端容器正在运行,并且使用并公开了正确的端口。

如果您的容器没有 ssl 证书,请确保您使用的是 http 而不是 https。

location /api {
        proxy_pass http://xxx.domain.local:3011;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

【讨论】:

  • 后端容器正在运行,如果我直接进入它,我会得到响应,配置中是否有任何内容会导致后端容器不响应代理?
猜你喜欢
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 2011-04-08
  • 2011-10-04
  • 2019-10-22
  • 2019-12-02
相关资源
最近更新 更多