首页 > 系统相关 >Nginx 代理 WebSocket 、TCP协议

Nginx 代理 WebSocket 、TCP协议

时间:2023-07-18 20:56:28浏览次数:39  
标签:upgrade WebSocket header TCP Nginx proxy timeout http

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;
    }
  }

标签:upgrade,WebSocket,header,TCP,Nginx,proxy,timeout,http
From: https://www.cnblogs.com/walkersss/p/17564105.html

相关文章

  • 宝塔面板无法开启nginx是怎么回事
    宝塔面板无法开启nginx是怎么回事诶,好不容易解决一个报错,又来一个报错求助解答:您好,您那边是否有安装网站加速插件呢?如果有安装将此插件卸载然后重新安装插件看下是否正常。......
  • nginx 中根据 $http_upgrade 变量将 HTTP 连接升级为 WebSocket 连接
    配置“$connection_upgrade”变量连接升级通常与WebSockets结合使用。在nginx中,我们可以根据$http_upgrade变量将HTTP连接升级为WebSocket连接。我们可以使用map块在nginx中定义连接和http升级之间的依赖关系:vimnginx.confmap$http_upgrade$connection_......
  • 三菱FX系列PLC以太网通讯处理器ModbusTCP通讯
    大家好,今天我们要来聊一聊转以太网捷米特JM-ETH-FX,这款设备内部集成了ModbusTCP通讯服务器,这意味着什么?ModbusTCP客户机,比如支持ModbusTCP的组态软件、OPC服务器、PLC以及使用高级语言开发的实现ModbusTCP客户机软件等等,可以直接访问三菱FX系列PLC的内部数据区。 Modbus协议地......
  • linux中nginx下载安装部署
    反向代理动静结合负载均衡官网下载稳定版解压tar-zxvfnginx-1.24.0.tar.gz安装nginx的相关依赖yum-yinstallgcczlibzlib-develpcre-developensslopenssl-devel进入解压后的nginx-1.20.2目录cdnginx-1.20.2目录执行configure脚本,设置安装nginx的初始化......
  • Nginx:超时 keeplive_timeout 配置
    参考:Nginx的超时keeplive_timeout配置详解HTTP是一种无状态协议,客户端向服务器发送一个TCP请求,服务端响应完毕后断开连接。如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输数据。HTTP有一个KeepAlive模式,它告诉webserver在处理完一个请求后保持......
  • Nginx负载均衡配置
    Nginx负载均衡实现:需求:两台Web:192.168.1.2/192.168.1.3,nginx负载均衡服务器192.168.1.10Nginx服务器上实现web负载。 配置步骤:1.安装Nginx  (1)安装依赖包  yuminstall-ypcrepcre-developensslopenssl-develgccgccgcc-c++ncurses-develperl  use......
  • Nginx部署/反向代理配置
    1.Nginx用途介绍  主要技术:地址转换  负载均衡:将客户单请求,按照一定的规则分配到一群服务器上,并将处理结果返回给相应的客户端  作用:负责调度客户端请求、消除单点故障、减少错误返回结果、session持久化。  反向代理:客户端请求,经过反向代理,分发到各服务器,然后服务......
  • shell脚本-Nginx访问日志分析
    shell脚本-Nginx访问日志分析1.原理可以通过/usr/local/nginx/logs/access.log文件-查看nginx的日志[root@localhostscripts]#tail-f/usr/local/nginx/logs/access.log192.168.70.1-[17/Jul/2023:17:35:21+0800]"GET/HTTP/1.1"200173833"-""Mozilla......
  • TCP的Keep-Alive机制:链接存在但是没有数据传输,内核怎么处理
    服务端会定期发送探测报文来检测客户端的存活状态。由三个内核参数控制:首次发送探测报文时间:net.ipv4.tcp_keepalive_time有报文传输时重置探测报文的发送间隔:net.ipv4.tcp_keepalive_intvl探测报文的最大重试次数:net.ipv4.tcp_keepalive_probes#sysctl-a|grep......
  • pytest + yaml 框架 -52.支持 websocket 协议
    前言v1.4.2版本支持websocket协议python操作websocket协议环境准备pip3installwebsocket-clientpip3installwebsockets基本代码示例fromwebsocketimportcreate_connectionimportjsonurl='ws://localhost:8081/ws'ws=create_connection(url,timeout......