Nginx作为安全websocket的转发代理(ws - > wss)

时间:2017-07-28 07:05:36

标签: nginx websocket proxy

我有以下设置:

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

我想通过安全的websocket连接客户端和服务器。但不是直接的。客户端和服务器不知道安全性。

所以客户端连接到:ws://localhost:6277/wstest

客户端nginx正在端口6277上侦听。我希望Nginx将连接安全地转发到ws.example.com/wstest

Nginx的配置是:

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;
    }
}

客户端设置不起作用。客户端给我以下错误:The HTTP response from the server [500] did not permit the HTTP upgrade to WebSocket。 Nginx给了我:"GET /ocpp/cp-1/ws HTTP/1.1" 500 193 "-" "-"

当我绕过客户端Nginx时,客户端只能通过服务器端Nginx直接连接(wss://ws.example.com/wstest)到服务器,一切正常。

服务器端的Nginx将wss转换为ws并将连接转发到服务器。

客户端Nginx配置有问题吗?使用Nginx将wss转换为ws是没有问题的。但是甚至可以用wgin将ws转换成wss吗?

1 个答案:

答案 0 :(得分:1)

一切都像我预期的那样奏效。我只需要设置一个不同的解析器。例如:

resolver 8.8.8.8;