var uniqueClientID = getUniqueID();
if ('WebSocket' in window) {
websocket = new WebSocket("wss://aaa.com:8008/websocket/" + uniqueClientID + "");
} else {
console.log("您的浏览器不支持对话连接");
}
websocket.onopen = function () {
console.log("连接成功");
}
websocket.onclose = function () {
console.log("退出连接");
}
websocket.onmessage = function (event) {
console.log("收到消息" + event.data);
}
websocket.onerror = function () {
console.log("连接出错");
}
nginx转发之前 WebSocket的链接是ws://aaa.com:8008/websocket/a, a是一个变量
转发后的链接是wss://aaa.com:8008/websocket/a
我的nginx配置
server {
listen 8008 ssl;
server_name aaa.com;
ssl_certificate ssl/4952229_aaa.com.pem;
ssl_certificate_key ssl/4952229_aaa.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
}
location ~ ^/websocket/(.+)$ {
proxy_pass http://aaa.com:8006/websocket/$1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# For WebSocket upgrade header proxy_http_version 1.1;
#告诉nginx使用HTTP/1.1通信协议,这是websoket必须要使用的协议
proxy_set_header Upgrade $http_upgrade;
#告诉nginx,当它想要使用WebSocket时,响应http升级请求
proxy_set_header Connection "upgrade";
client_max_body_size 10m;
client_body_buffer_size 512k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
add_header Access-Control-Allow-Origin '*';
}
}
**
像我这样将变量作为反向代理的地址最重要的一点
**
将变量作为反向代理的地址的话会在Nginx0.6.18以后的版本中都会提示“ no resolver defined to resolve ”的类似错误,而在proxy_pass 中直接设置地址却不会。,原因是Nginx0.6.18以后的版本中启用了一个resolver指令,在使用变量来构造某个server地址的时候一定要用resolver指令来制定DNS服务器的地址,所以解决这个问题的方法很简单:在nginx的配置文件中的http{}部分添加一行resolver 8.8.8.8;即可