使用nginx反向代理websocket

随着HTML5大大简化了websocket的开发,websocket的使用越来越广泛,毕竟它在实时交互场景下较http有很大的优势。websocket的协议为ws或wss,使用nginx能很方便的反向代理。

下面是一个典型的配置。原本这个站点只是支持将xxx.lefer.cn转发给http://127.0.0.1:7017处理。但在增加了11行,12行,13行后,就一并对websocket进行了转发。整个配置很简单,这得益于HTTP 中的 Upgrade 协议头将连接从HTTP升级到WebSocket,使得http和websocket的信息得以复用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name xxx.lefer.cn;
ssl on;
...
location / {
proxy_pass http://127.0.0.1:7017;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

可参考nginx官方文档