Nginx 代理 WebSocket 、TCP协议
Nginx 代理 WebSocket
什么是 WebSocket
WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。WebSocket 中的握手和 HTTP 中的握手过程兼容,且可以使用 HTTP 中的 Upgrade 协议头将连接从 HTTP 升级到 WebSocket。
代理结构
WebSocket 可以工作在 80/443 端口,并且使用 ws:// 或 wss:// 标记协议类型。可以 nginx 代理 WebSocket,实现从 HTTP/1.1 到 Websocket 转化,结构图如下:
Client HTTPS <--wss--> Nginx Websocket Proxy <-- ws --> App Server
WebSocket 代理配置: 放置于http 模块之内
PS: 该方法也可用于对 Kubernetes API 的代理。
http {
map $http_upgrade $connection_upgrade {
default upgrade;
' ' close;
}
server {
...
location /chat/ {
proxy_pass http://192.168.100.18:9663;
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;
}
}
}
说明:
关键部分是在 HTTP 的请求中添加了如下 header,将协议从 HTTP1.1 升级到 WebSocket:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 响应
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
=======================================================================
nginx tcp 反向代理:stream和http是在同一级别上
列子1:
stream {
upstream cloudsocket {
hash $remote_addr consistent;
# $binary_remote_addr;
server 192.168.182.155:3306 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 3306; #数据库服务器监听端口
proxy_connect_timeout 10s;
proxy_timeout 300s; #设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。
proxy_pass cloudsocket;
}
}
例子2:
stream {
upstream socket_proxy {
hash $remote_addr consistent;
server 192.168.96.128:22 weight=5 max_fails=3 fail_timeout=300s;
}
server {
listen 22;
proxy_connect_timeout 100s;
proxy_timeout 300s;
proxy_pass socket_proxy;
}
}
列子3:
stream{
upstream tcpstream{
hash $remote_addr consistent;
server 127.0.0.1:8088 max_fails=3 fail_timeout=10s;
}
server{
listen 80;
proxy_connect_timeout 20s;
proxy_timeout 5m;
proxy_pass tcpstream;
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器