Nginx 支持 websocket 配置
介绍
WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议,它在 HTTP 的基础上,提供了服务器与客户端之间通信的信道。
要在 Nginx 中配置 WebSocket 支持,需要设置 proxy_pass 来转发请求到后端服务器,并确保 Nginx 不会对 WebSocket 连接的 Upgrade 请求进行错误处理。
websocket 支持配置
首先,确保你的Nginx版本支持WebSocket。通常,这意味着你需要有HTTP/1.1持久连接的支持,这在Nginx 1.3.13及更高版本中是可用的。
在Nginx配置文件中(通常是/etc/nginx/nginx.conf),你需要修改http或server块来支持WebSocket。关键部分在于proxy_pass指令和相关的proxy_http_version、proxy_set_header指令。
这里是一个基本的示例配置,假设你的WebSocket后端服务运行在本地机器上的ws://localhost:8080:
http 块配置
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
}
server 块配置
server {
listen 80;
server_name birdbook.com.cn;
location /ws {
proxy_pass http://localhost:8080/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
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_set_header X-Forwarded-Proto $scheme;
}
}
在这个配置中:
listen 80;
指定监听的端口server_name birdbook.com.cn;
设置服务器名称,用于虚拟主机location /ws
定义了处理WebSocket请求的路径proxy_pass http://localhost:8080/ws;
指定后端WebSocket服务的位置proxy_http_version 1.1;
确保使用HTTP/1.1,因为 WebSocket 握手依赖于 HTTP/1.1proxy_set_header
指令用于传递必要的升级头部信息和其他头部proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
这两行是 WebSocket 支持的关键,它们告诉 Nginx 将 Upgrade 和 Connection 头部原样转发给后端服务器,这样后端服务器才能识别并处理 WebSocket 升级请求。proxy_cache_bypass $http_upgrade
确保不会缓存 WebSocket 连接,因为 WebSocket 通常涉及动态交互proxy_no_cache $http_upgrade
另一个确保不缓存 WebSocket 数据的指令proxy_read_timeout
设置 Nginx 等待后端服务器响应的超时时间。对于 WebSocket,你可能需要设置一个较长的超时时间,因为 WebSocket 连接是持久的