【Websocket和nginx配置】

假设你的 Nginx 配置的目的是通过 8085 端口接受前端请求,前端请求有两类:

普通的 HTTP 请求(如页面加载、API 请求等)

WebSocket 请求(如实时通信)

这里有两个要点需要特别注意:

普通 HTTP 请求 需要正确转发给后端服务,同时确保支持 HTTP 的代理。
WebSocket 请求 需要特殊处理,因为 WebSocket 使用了 HTTP 协议进行连接升级(Upgrade 请求头)。
更新后的 Nginx 配置

nginx 复制代码
server {
    listen 8085;
    server_name localhost;

    # 处理普通的 HTTP 请求
    location / {
        proxy_pass http://localhost:8086;  # 将请求代理到后端的 HTTP 服务
        proxy_http_version 1.1;  # 必须指定 HTTP/1.1,WebSocket 也需要这个协议版本
        proxy_set_header Host $host;  # 保证后端能够获取到原始请求的 Host
        proxy_set_header X-Real-IP $remote_addr;  # 转发客户端的真实 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发客户端的真实 IP 链
        proxy_set_header X-Forwarded-Proto $scheme;  # 转发请求协议(http 或 https)
        proxy_cache_bypass $http_upgrade;  # 确保 WebSocket 不会缓存
    }

    # 处理 WebSocket 请求
    location /ws/ {  # 假设 WebSocket 请求路径为 /ws/
        proxy_pass http://localhost:8086;  # 将 WebSocket 请求代理到后端的 WebSocket 服务
        proxy_http_version 1.1;  # WebSocket 必须使用 HTTP/1.1
        proxy_set_header Upgrade $http_upgrade;  # WebSocket 握手需要 Upgrade 请求头
        proxy_set_header Connection 'upgrade';  # WebSocket 握手需要 Connection 为 upgrade
        proxy_set_header Host $host;  # 确保后端知道请求的主机名
        proxy_cache_bypass $http_upgrade;  # 禁止 WebSocket 请求被缓存
    }
}

解释和重点调整
location /: 这一部分负责处理普通的 HTTP 请求。只要路径不涉及 /ws/,所有请求都会匹配这个 location 规则。我们确保通过 proxy_pass 将请求代理到 localhost:8086(后端服务)。

  • proxy_http_version 1.1:这里设置 HTTP 版本为 1.1,这是为了支持 WebSocket 协议,同时确保代理时没有版本冲突。
  • proxy_set_header:这些代理头部帮助后端服务获取正确的请求信息(如 Host、客户端的真实 IP 地址等)。

location /ws/: 这一部分专门处理 WebSocket 请求。当请求路径以 /ws/ 开头时,Nginx 会将请求转发到后端的 8086 端口。

  • proxy_set_header Upgrade 和 proxy_set_header Connection:这两项配置确保 WebSocket 握手时,Upgrade 和 Connection 请求头正确地传递,后端才会知道这是一条 WebSocket 请求。

总结

普通 HTTP 请求:这些请求会通过 / 匹配,并被转发到 localhost:8086。

WebSocket 请求:这些请求通过 /ws/ 匹配,并被正确地升级到 WebSocket 连接,代理到后端的 WebSocket 服务。

这样的配置可以同时处理普通的 HTTP 请求和 WebSocket 请求,并根据不同的路径(例如 /ws/)做出正确的代理

相关推荐
盛世宏博智慧档案4 小时前
算力机房多协议融合:Modbus TCP 温湿度变送器与 SNMP 设备混合组网方案
网络·网络协议·tcp/ip·传感器·温湿度
川石课堂软件测试6 小时前
涨薪技术|0到1学会性能测试第9课-HTTP响应统计
数据库·功能测试·网络协议·http·kubernetes·单元测试·测试用例
可信时间戳6 小时前
原创作品怎么申请版权?草稿、定稿、已发布、已授权,四个阶段四个做法
网络协议·http·https
李纲明7 小时前
WordPress 古腾堡点「更新」报「不是有效的 JSON 响应」:我按 REST 接口一路查下来的顺序
运维·nginx·php·wordpress·rest api
话梅姐姐呀7 小时前
TCP/IP 架构各层的协议概述
人工智能·物联网·网络协议·tcp/ip·iot
你看我名字8 小时前
LNMP 生产架构与云运维实践:Nginx、PHP-FPM、MySQL 全链路分析
运维·nginx·架构
husterlichf8 小时前
网关、掩码、子网、vlan、交换机
网络·网络协议
斌糖雪梨11 小时前
registerListeners(); 方法详解
网络·网络协议·rpc
福芯微电子有限公司nfc11 小时前
国产收音芯片 FSV4755:多波段调谐与高集成设计,赋能多种音频终端
网络协议·网络安全·音视频·信息与通信·信号处理
疯狂成瘾者12 小时前
海康威视 WSS 视频取流原理:6014/559 端口、Nginx 代理与 TLS 证书问题
运维·nginx·音视频