如何配置Nginx作为Websocket代理服务器负载均衡
WebSocket协议与HTTP协议是不一样的,但是WebSocket的握手兼容HTTP协议的方式,使用Proxy指令的HTTP Upgrade参数的让HTTP协议升级到WebSocket协议,在本教程中将说明如何配置Nginx作为Websocket代理服务器,即Nginx的Socket负载均衡
2 min read
By
myfreax
众所周知浏览器有个同源策略的机制,因此在Webscoeket,Ajax,Fetch在对不同的域发起请求时都会被限制,WebSocket协议与HTTP协议是不一样的,但是WebSocket的握手兼容HTTP协议的方式,使用Proxy指令的HTTP Upgrade参数的让HTTP协议升级到WebSocket协议,这样WebSocket就可以嵌入已有的基础设施,比如,和标准的HTTP协议共同使用80与443端口
在本教程中将说明如何配置Nginx作为Websocket代理服务器,即Nginx的Socket负载均衡。
多Websocket服务器高可用与性能
可以在中间在加入一个代理服务器Nginx,HAProxy,下面是使用Nginx的upstream指令
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server 192.168.100.10:8010;
}
server {
listen 8020;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
}
HTTP协议与Websocket协议切换
浏览器端发起一个带有Upgrade,Connection Header的HTTP请求到Websocket服务器。之后服务器将会响应状态码为101切换到Websocket协议
browser request to server
Accept-Language:en-US,en;q=0.8
Connection:Upgrade
Origin:http://127.0.0.1
Upgrade:websocket
HTTP/1.1 101 Switching Protocols handshake
Connection:upgrade
Sec-WebSocket-Location:ws://jwebsocket.org/jWebSocket/jWebSocket
Sec-WebSocket-Origin:http://127.0.0.1
Server:nginx/1.6.2
Upgrade:websocket