为什么要在nginx转发websocket链接?
1. 反向代理和负载均衡:
- 当你有多个后端 WebSocket 服务器,需要通过 Nginx 进行负载均衡。
- 使用 Nginx 作为入口点,将请求分发到适当的后端服务。2. 安全性增强:
- 使用 Nginx 作为前端服务器,可以添加额外的安全层,如 SSL/TLS 加密。
- 可以在 Nginx 层实现 IP 限制、访问控制等安全策略。3. 路径重写和 URL 规范化:
- 当需要将外部暴露的 URL 路径映射到内部服务的不同路径时。
- 统一对外接口,隐藏内部服务结构。4. ...
如何配置websocket转发
1. 在 http, server 或 location 块中添加, 但是通常将这个 map
块放在 http
块内,server
块外.
http {
...
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
...
server {}
}
这个配置的含义和作用
功能: 它根据
$http_upgrade
头的值来设置$connection_upgrade
变量。工作原理:
- 如果
$http_upgrade
有值(通常是"websocket"),则$connection_upgrade
被设置为 "upgrade"。- 如果
$http_upgrade
为空,则$connection_upgrade
被设置为 "close"。优点:
- 自动处理: 它可以自动处理WebSocket和非WebSocket请求。
- 更灵活: 相比硬编码 "upgrade",这种方式更加灵活。
使用方法: 在你的
location
块中,你可以这样使用它:proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;
为什么有用:
- 对于WebSocket连接,它会正确设置 "upgrade"。
- 对于普通HTTP请求,它会保持连接关闭,这是正确的行为。
2. 添加location块
location /wspath/ {
proxy_pass http://ip:port/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}