今天项目上线 用到wss协议,然后连接websocket的时候报错了 如下
Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR
这是因为我们websocket 连接的域名不支持wss协议
项目里我用的是swoole,监听端口是9501,因为9501的端口不支持ssl,所以我们利用nginx代理来解决这个问题:
原理:
wss协议 相当于 https 协议,都在443端口需要ssl证书,我们在nginx配置一个域名提供给websocket专用,
然后监听该域名的80端口和443端口,做一个反向代理,指导9501端口,这样就可以实现完整的流程了。
erver {
listen 80;
server_name xxx;
location / {
proxy_pass http://127.0.0.1:9501;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
server {
listen 443;
server_name xxx;
ssl on;
ssl_certificate xxx.pem;
ssl_certificate_key xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_404;
proxy_max_temp_file_size 128m;
proxy_pass http://127.0.0.1:9501;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
知识兔以上都是自己的见解,有问题可以指出