【问题标题】:Nginx as forward proxy for secure websocket (ws -> wss)Nginx 作为安全 websocket 的转发代理 (ws -> wss)
【发布时间】:2018-01-04 03:18:14
【问题描述】:

我有以下设置:

+----------------------------+                +-----------------------------+
|                            |                |                             |
|                            |                |                             |
|                            |                |                             |
|   +--------+   +--------+  |                |  +--------+     +-------+   |
|   |        |   |        |  |                |  |        |     |       |   |
|   | 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 是没有问题的。但是用 Nginx 甚至可以将 ws 转换为 wss 吗?

【问题讨论】:

    标签: nginx websocket proxy


    【解决方案1】:

    一切都如我所料。我只需要设置一个不同的解析器。例如:

    resolver 8.8.8.8;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2014-10-27
      • 2018-08-03
      • 2017-10-25
      • 1970-01-01
      • 2019-05-13
      相关资源
      最近更新 更多