Nginx 代理 和负载均衡WebSocket 应用

WebSocket 介绍

WebSocket是目前比较成熟的技术了,大部分现在的浏览器都支持WebSocket,比如Firefox,IE,Chrome,Safari,Opera,并且越来越多的服务器框架现在也同样支持WebSocket。WebSocket 和HTTP虽然是不同协议,但是两者"握手"方式兼容。通过HTTP升级机制,使用HTTP的Upgrade和Connection协议头的方式可以将连接从HTTP升级为WebSocket。NGINX从1.3版本开始支持WebSocket,其可以作为一个反向代理和为WebSocket程序做负载均衡。即将Upgrade: websocket和Connection: Upgrade必须设置一致

复制代码
GET /app/websocket/ HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dddskkkdsjss
Origin: http://localhost
Sec-WebSocket-Version: 13

一个典型的Websocket握手请求如下:

客户端请求:

复制代码
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13

服务器回应:

复制代码
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
Sec-WebSocket-Location: ws://example.com/

二.Nginx开启websocket代理功能的配置如下

复制代码
编辑vhosts下虚拟主机的配置文件,在location匹配配置中添加如下内容:proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";

具体配置实例如下

复制代码
server {
    listen       80;
    server_name  域名;
 
    proxy_http_version  1.1;
   #启用支持websocket连接的配置
    proxy_set_header    Upgrade             $http_upgrade;
    proxy_set_header    Connection          "upgrade";
    upstream myweb_backend {
      hash $remote_addr consistent;
      server 10.10.12.108:9001;
      server 10.10.12.109:9001;
    }
    location / {
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-scheme $scheme;
        proxy_pass http://myweb_backend;
        proxy_connect_timeout 60; #配置规避webSocket连接中断
        proxy_read_timeout 600;  #配置规避webSocket连接中断
        proxy_send_timeout 600;  #配置规避webSocket连接中断
    }
 
}

proxy_set_header Upgrade $http_upgrade和proxy_set_header Connection "upgrade"也可以配置到location里面 ,配置如下

复制代码
server {
    listen       80;
    server_name  域名;
    upstream myweb_backend {
      hash $remote_addr consistent;
      server 10.10.12.108:9001;
      server 10.10.12.109:9001;
    }
    location / {
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-scheme $scheme;
        proxy_pass http://myweb_backend;
        proxy_connect_timeout 60; #配置规避webSocket连接中断
        proxy_read_timeout 600; #配置规避webSocket连接中断
        proxy_send_timeout 600;#配置规避webSocket连接中断
        proxy_http_version  1.1;
        #启用支持websocket连接的配置
        proxy_set_header    Upgrade             $http_upgrade;
        proxy_set_header    Connection          "upgrade";
    }
 
}
相关推荐
.柒宇.32 分钟前
AI掘金头条项目部署实践指南
linux·运维·python·fastapi
budingxiaomoli33 分钟前
多机部署,负载均衡-LoadBalancer
运维·spring cloud·负载均衡
JesseDev1 小时前
Docker lnmp环境快速搭建开箱即用
运维·docker·容器
金牛IT1 小时前
Gogs 轻量级 Git 服务器搭建与使用
运维·服务器·git
不做无法实现的梦~1 小时前
linux怎么使用正点原子无线dap烧录器
linux·运维·postgresql
念一不念二1 小时前
VScode+云服务器
运维·服务器
vortex52 小时前
Kali Linux 磁盘扩容后内部分配完整教程
linux·运维
想唱rap2 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
开开心心_Every2 小时前
轻量级PDF阅读器,仅几M大小打开秒开
linux·运维·服务器·安全·macos·pdf·phpstorm
云达闲人2 小时前
搭建DevOps企业级仿真实验环境:006Proxmox 基础环境验证
运维·devops·proxmox ve·sre·仿真实验环境·快照与克隆·运维实操教程