• nginx反向代理WebSocket


    nginx反向代理WebSocket

    WebSocket工作在HTTP的80和443端口并使用前缀ws://或者wss://进行协议标注,在建立连接时使用HTTP/1.1的101状态码进行协议切换, 当前标准不支持两个客户端之间不借助HTTP直接建立Websocket连接。

     map $http_upgrade $connection_upgrade {
         default upgrade;
         '' close;
     }
     
     upstream websocket {
         server localhost:8282; # appserver_ip:ws_port
     }
     
     server {
          server_name test.enzhico.net;
          listen 443 ssl;
          location / {
              proxy_pass http://websocket;
              proxy_read_timeout 300s;
              proxy_send_timeout 300s;
             
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection $connection_upgrade;
          }
     }

     

    最重要的就是在反向代理的配置中增加了如下两行,其它的部分和普通的HTTP反向代理没有任何差别。

     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection $connection_upgrade

    这里面的关键部分在于HTTP的请求中多了如下头部:

     Upgrade: websocket
     Connection: Upgrade

    使用map指令可以将变量组合成为新的变量,会根据客户端传来的连接中是否带有Upgrade头来决定是否给源站传递Connection头, 这样做的方法比直接全部传递upgrade更加优雅。

     

    两个超时参数

    proxy_read_timeout

    语法 proxy_read_timeout time 默认值 60s 上下文 http server location 说明 该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。 这个时间不是获得整个response的时间,而是两次reading操作的时间。

    proxy_send_timeout

    语法 proxy_send_timeout time 默认值 60s 上下文 http server location 说明 这个指定设置了发送请求给upstream服务器的超时时间。超时设置不是为了整个发送期间,而是在两次write操作期间。 如果超时后,upstream没有收到新的数据,nginx会关闭连接

     

    参考文章: https://www.xncoding.com/2018/03/12/fullstack/nginx-websocket.html

  • 相关阅读:
    Redis入门--- 五大数据类型 ---String ,List
    Redis入门 --- 安装
    Netty 应用实例-群聊系统,心跳检测机制案例 ,WebSocket 编程实现服务器和客户端长连接
    红锁的实现
    基于Redis实现分布式锁
    基于分布式锁 分布式全局唯一ID
    Netty Java BIO 编程 (一)
    Netty Java NIO 基本介绍Channel 和 buffer (二)
    Java AIO 基本介绍
    SpringBoot 系列教程自动配置选择生效
  • 原文地址:https://www.cnblogs.com/tl542475736/p/13612945.html
Copyright © 2020-2023  润新知