2017-07-28 5 views
0

Ich habe folgendes Setup:Nginx als Forward-Proxy für den sicheren websocket (ws -> WSS)

+----------------------------+    +-----------------------------+ 
|       |    |        | 
|       |    |        | 
|       |    |        | 
| +--------+ +--------+ |    | +--------+  +-------+ | 
| |  | |  | |    | |  |  |  | | 
| | client | | nginx | |    | | nginx |  | server| | 
| |  | |  | |    | |  |  |  | | 
| | ws +-------> wss +-------------------------> wss +--------> ws | | 
| |  | |  | |    | |  |  |  | | 
| |  | |  | |    | |  |  |  | | 
| +--------+ +--------+ |    | +--------+  +-------+ | 
|       |    |        | 
|       |    |        | 
+----------------------------+    +-----------------------------+ 

Ich möchte einen Client mit einem Server über eine sichere websocket verbinden. Aber nicht direkt. Der Client und der Server kennen die Sicherheit nicht.

So verbindet sich der Client an: ws://localhost:6277/wstest

Die clientseitige nginx ist 6277 auf Port hört. Ich möchte, dass das Nginx die Verbindung sicher an ws.example.com/wstest weiterleitet.

Die Konfiguration des Nginx ist:

server { 

    server_name localhost; 
    listen 6277; 

    location /wstest { 

     proxy_ssl_certificate   /etc/nginx/ssl/client.crt; 
     proxy_ssl_certificate_key  /etc/nginx/ssl/client.key; 
     proxy_ssl_protocols   TLSv1 TLSv1.1 TLSv1.2; 
     proxy_ssl_ciphers    HIGH:!aNULL:!MD5; 

     proxy_ssl_session_reuse on; 

     resolver 127.0.0.1; 
     proxy_pass https://ws.example.com/wstest; 

     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection $connection_upgrade; 
    } 
} 

Die clientseitige Setup funktioniert nicht. Der Client gibt mir den folgenden Fehler: The HTTP response from the server [500] did not permit the HTTP upgrade to WebSocket. Und Nginx gibt mir: "GET /ocpp/cp-1/ws HTTP/1.1" 500 193 "-" "-".

Wenn ich das clientseitige Nginx umgehen, so dass der Client direkt (wss://ws.example.com/wstest) mit dem Server nur über das serverseitige Nginx verbinden kann, funktioniert alles einwandfrei.

Das Nginx auf Serverseite konvertiert WSS in WS und leitet die Verbindung an den Server weiter.

Stimmt etwas nicht mit der clientseitigen Nginx-Konfiguration? Transform wss zu ws mit Nginx ist kein Problem. Aber ist es überhaupt möglich, ws mit Nginx in wss umzuwandeln?

Antwort

0

Alles funktionierte wie ich erwartet hatte. Ich musste nur einen anderen Resolver einstellen. Zum Beispiel:

resolver 8.8.8.8; 
Verwandte Themen