
Mein Ziel ist es, Jasmine-Tests (ein JavaScript-BDD-Testframework) zu schreiben, die eine von einem separaten Team erstellte Back-End-API testen.
Ich habe einen Jasmine-Server, der auf Port 9000 läuft. Dieser Code gibt AJAX-Anfragen mit einem relativen Pfad aus, der mit /web/ beginnt. Ich möchte, dass diese Anfragen an das Backend weitergeleitet werden.
Bisher habe ich einen Reverse-Proxy zu einem Upstream-Block wie folgt:
upstream backend {
server api-dev.example.com;
}
server {
...
location / {
proxy_pass http://localhost:9000;
...
}
location /web/ {
proxy_pass https://backend/web/;
...
}
}
Der Verkehr zu '/' funktioniert einwandfrei, aber die AJAX-Anfragen (zum Beispiel an
http://localhost:50000/web/internal?action=network-statistics
) sind 502-Fehler. Ich glaube, es erreicht den richtigen Endpunkt, aber es liegt ein SSL-Fehler vor. Das Fehlerprotokoll von Nginx scheint meinen Verdacht zu bestätigen:
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/"
Wenn ich den Upstream-Block jedoch wie folgt ändere:
upstream backend {
server api-dev.example.com:443;
}
…dann bekomme ich 404-Fehler. Ich könnte schwören, dass ich ähnliche Konfigurationen schon einmal bei Server Fault gesehen habe. Zum Beispiel:Dasist eine sehr ähnliche Frage. Was übersehe ich? Was könnte schief laufen? Entschuldigen Sie, wenn das vage ist, ich werde gerne mehr Details hinzufügen.
Antwort1
Versuchen Sie, /web/ zu entfernen. Ich glaube, Sie erhalten 404, weil versucht wurde, auf /web/web zuzugreifen, das nicht existiert. Sie sollten in der Lage sein, weitere Hinweise in den Nginx-Protokollen zu finden.
upstream backend {
server api-dev.example.com:443;
}
server {
...
location / {
proxy_pass http://localhost:9000;
...
}
location /web/ {
proxy_pass https://backend;
...
}
}