千家信息网

Nginx中怎么转发socket

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,Nginx中怎么转发socket,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Nginx转发socket配置前的准备工作
千家信息网最后更新 2025年02月04日Nginx中怎么转发socket

Nginx中怎么转发socket,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Nginx转发socket

  • 配置前的准备工作

Nginx转发socket需要stream模块的支持,编译时需要--with-stream,该模块在Nginx安装时是默认不安装的.同时Nginx版本应高等于于1.9;
  • 通过反向代理,进行转发操作

注释:    官方提供的转发方式, 缺点,不能共用80端口,需要增开端口.    stream模块和event模块是平级的.stream {    # 添加socket转发的代理(上游服务器)    upstream bss_num_socket {        hash $remote_addr consistent;        # 转发的目的地址和端口        server 130.51.11.33:19001 weight=5 max_fails=3 fail_timeout=30s;    }    # 提供转发的服务,即访问localhost:30001,会跳转至代理bss_num_socket指定的转发地址    server {       listen 30001;       proxy_connect_timeout 1s;       proxy_timeout 3s;       proxy_pass bss_num_socket;    }}以上部分,参考官方文档.(一模一样的)
  • 另一种操作

该方式, 通过前端访问,一个专门的URI, Nginx通过URI来确认转发.优点,共用80端口.注意, location自然是要在server之内的, 与其他location同级location = /socket {    # 转发到该地址    # 转发地址可以直接用IP:端口的形式如:http://127.0.0.1:9999    proxy_pass http://socket.byingcn.com/;    # 转发时设置header头,在域名后添加端口号    proxy_set_header Host $host:9502;    # 设置HTTP1.1    proxy_http_version 1.1;        # 将客户端的Upgrade(作为websocket重要标识)请求转发(必须)    proxy_set_header Upgrade $http_upgrade;    # 将客户端的Connection(作为websocket重要标识)转发(非必须,但是最好转发一下)    proxy_set_header Connection "upgrade";    # 转发IP地址    proxy_set_header X-Forwarded-For $remote_addr;}小结:    如果不太懂上面两个proxy_set_header的意义可以通过前台抓包看下, websocket请求头即可明白.    proxy_set_header 作为设置请求头自然是不用说的.        Upgrade和Connection资料比较少.应该记一下,通过查了不少资料和亲测实践.    此处设置的Upgrade和Connection    即为http请求头中的Upgrade和Connection.    而$http_upgrade系统变量则是,Nginx定义的用来获取请求头中的Upgrade的系统变量.    通过我将Upgrade $http_upgrade;项的设置改为Upgrade "websocket"(和请求头一样);完美运行.    基本上可以认为上面的说法是正确的.        总结一下, 基本上就是在转发时,要把转发的TCP/IP(socket)数据的头中的Upgrade和Connection给带过去(或设置的和前端一样)即可.注释:    该部分是放在普通的server模块中的;    给方式不用重开其他端口,只需指定某文件即可.    原理部分在于:    前端websocket部分请求到/socket文件.    Nginx通过侦听,获取凡是请求该文件的操作,全部转发的http://socket.byingcn.com/;    但是该操作同时也需要Nginx安装 --with-stream
  • websocket 请求头

GET /socket HTTP/1.1Host: test.virtualserver.comConnection: Upgrade Pragma: no-cacheCache-Control: no-cacheUpgrade: websocket Origin: chrome-extension://pfdhoblngboilpfeibdedpjgfnlcodooSec-WebSocket-Version: 13User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Sec-WebSocket-Key: /mFCat+ePPs61TKUBZ5zHA==Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits注释:    Connection字段和Upgrade字段在http权威指南中有详解(http请求头章);

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0