Nginx 反向代理到 HTTPS 上游获取 502 Bad Gateway?

Nginx 反向代理到 HTTPS 上游获取 502 Bad Gateway?

我的目标是编写 Jasmine(一个 JavaScript BDD 测试框架)测试,以运行由独立团队构建的后端 API。

我有一个在端口 9000 上运行的 Jasmine 服务器。该代码发出以 /web/ 开头的相对路径的 AJAX 请求。我希望这些请求被定向到后端。

到目前为止,我有一个到上游块的反向代理,如下所示:

upstream backend {
  server api-dev.example.com;
}

server {
  ...

  location / {
    proxy_pass http://localhost:9000;
    ...
  }

  location /web/ {
    proxy_pass https://backend/web/;
    ...
  }
}

到“/”的流量运行正常,但 AJAX 请求(例如,到

http://localhost:50000/web/internal?action=network-statistics

) 出现 502 错误。我相信它到达了正确的端点,但有一个 SSL 错误。Nginx 的错误日志似乎证实了我的怀疑:

2013/12/13 16:55:28 [error] 1885#0: *257 SSL_do_handshake() failed (SSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol) while SSL handshaking to upstream, client: 127.0.0.1, server: localhost, request: "GET /web/internal/stats?action=network-statistics&request=null HTTP/1.1", upstream: "https://50.18.192.173:80/web/internal/stats?action=network-statistics", host: "localhost:50000", referrer: "http://localhost:50000/"

但是,如果我将上游块更改为:

upstream backend {
  server api-dev.example.com:443;
}

然后我得到了 404。我敢发誓我在 Server Fault 的其他地方看到过类似的配置。例如,是一个非常相似的问题。我遗漏了什么?可能出了什么问题?抱歉,如果这不清楚,我很乐意添加更多细节。

答案1

尝试删除 /web/。我认为您收到 404 是因为它尝试访问不存在的 /web/web。您应该能够从 Nginx 日志中找到更多提示。

upstream backend {
        server api-dev.example.com:443;
}

server {
        ...

    location / {
        proxy_pass http://localhost:9000;
        ...
    }

    location /web/ {
        proxy_pass https://backend;
        ...
    }
}

相关内容