我的目标是编写 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;
...
}
}