【发布时间】: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 吗?
【问题讨论】: