我有以下设置:
+----------------------------+ +-----------------------------+
| | | |
| | | |
| | | |
| +--------+ +--------+ | | +--------+ +-------+ |
| | | | | | | | | | | |
| | 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吗?
答案 0 :(得分:1)
一切都像我预期的那样奏效。我只需要设置一个不同的解析器。例如:
resolver 8.8.8.8;