Nginx 反向代理到 HTTPS 上游時出現 502 Bad Gateway?

Nginx 反向代理到 HTTPS 上游時出現 502 Bad Gateway?

我的目標是編寫 Jasmine(一個 JavaScript BDD 測試框架)測試來執行由單獨團隊建立的後端 API。

我有一個在連接埠 9000 上運行的 Jasmine 伺服器。我希望這些請求被導向到後端。

到目前為止,我已經有了一個上游區塊的反向代理,如下所示:

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'ing。我相信它到達了正確的端點,但存在 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。我發誓我在伺服器故障的其他地方看到過類似的配置。例如,是一個非常相似的問題。我缺什麼?可能出了什麼問題?抱歉,如果這含糊不清,我很樂意添加更多細節。

答案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;
        ...
    }
}

相關內容