设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间09 现在时间09 缓存数据 当你还没强大到一定程度,没必要到处抱怨你的处境,默默做好你该做的事情,等你变得足够好,自然会有配得上你的人,拉你进更好的圈子,到那时,你会站在新的高度,拥抱更美的风景。

当你还没强大到一定程度,没必要到处抱怨你的处境,默默做好你该做的事情,等你变得足够好,自然会有配得上你的人,拉你进更好的圈子,到那时,你会站在新的高度,拥抱更美的风景。

查看: 553|回复: 2

Nginx配置WebSocket代理的示例代码

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
29
主题
25
精华
0
金钱
89
积分
54
注册时间
2023-9-29
最后登录
2025-6-1

发表于 2024-10-15 01:07:09 | 显示全部楼层 |阅读模式
目录


  • 官方文档代理样例
  • Linux 查看安装文件命令手册

    • Nginx 日志配置方案

  • 成功解决问题–使用 Nginx 代理 WebSocket
  • 可能出现的问题
  1. Nginx
复制代码
官方文档网址 nginx documentation
  1. ...
  2. http:{
  3.   ...
  4.   server{
  5.     ...
  6.     # WebSocket代理
  7.     location /wsUrl/ {
  8.       rewrite ^/wsUrl/(.*)$ /$1 break; #拦截标识去除
  9.       proxy_pass http://192.168.100.20:8080; #这里是http不是ws,不用怀疑,代理的ip和port写ws访问的实际地址
  10.       proxy_http_version 1.1; #这里必须使用http 1.1
  11.       #下面两个必须设置,请求头设置为ws请求方式
  12.       proxy_set_header Upgrade $http_upgrade;
  13.       proxy_set_header Connection "upgrade";
  14.     }
  15.     ...
  16.   }
  17.   ...
  18. }
复制代码
官方文档代理样例
  1. http {
  2.     include       mime.types;
  3.     default_type  application/octet-stream;
  4.     sendfile        on;
  5.     keepalive_timeout  65;
  6.    
  7.     map $http_upgrade $connection_upgrade {
  8.                 default upgrade;
  9.                 ''      close;
  10.         }
  11.        
  12.     server {
  13.         listen       9001;
  14.         server_name  localhost;

  15.         location / {
  16.             root   html;
  17.             index  index.html index.htm;
  18.         }

  19.         location ^~ /websocket {
  20.             proxy_pass http://localhost:8090/;
  21.             proxy_http_version 1.1;
  22.             proxy_set_header Host $host;
  23.             proxy_set_header X-Real-IP $remote_addr;
  24.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  25.             proxy_read_timeout 120s;

  26.             proxy_set_header Upgrade websocket;
  27.             proxy_set_header Connection Upgrade;
  28.         }
  29.     }
  30. }
复制代码
Linux 查看安装文件命令手册
  1. [!起因]我使用指令 whereis nginx 跳出来了很多路径,但是我不太明白每个路径是什么意思,就仔细去看了看,然后发现了一个路径 /usr/share/man/man8/ 这个目录,下面一般都是手册路径,在这里面可以看很多软件的基本指令操作 可使用指令 man nginx 来查看 nginx.8.gz 手册。
复制代码
Nginx 日志配置方案

可以参考 Nginx访问日志(access_log)配置及信息详解
一般使用
  1. main
复制代码
格式
如下
  1. log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  2.                       '$status $body_bytes_sent "$http_referer" '
  3.                       '"$http_user_agent" "$http_x_forwarded_for"'
  4.                        '$upstream_addr $upstream_response_time $request_time ';
  5. access_log  logs/access.log  main;
复制代码

    1. $remote_addr
    复制代码
    : 客户端的IP地址。
    1. $remote_user
    复制代码
    : 使用HTTP基本身份验证的情况下,远程用户的用户名。
    1. $time_local
    复制代码
    : 本地时间的访问时间。
    1. $request
    复制代码
    : 客户端请求的内容。
    1. $status
    复制代码
    : 服务器响应的HTTP状态码。
    1. $body_bytes_sent
    复制代码
    : 发送给客户端的字节数,不包括响应头的大小。
    1. $http_referer
    复制代码
    : 引用页面的URL。
    1. $http_user_agent
    复制代码
    : 客户端的User-Agent字符串,标识客户端的浏览器和操作系统等信息。
    1. $http_x_forwarded_for
    复制代码
    : X-Forwarded-For 头,用于标识原始客户端的IP地址,当请求通过代理服务器时使用。
    1. $upstream_addr
    复制代码
    : 后端(上游)服务器的IP地址。
    1. $upstream_response_time
    复制代码
    : 从后端服务器接收响应的时间。
    1. $request_time
    复制代码
    : 客户端发起请求到收到响应的总时间。
  1. [!错误]配置 nginx 日志的时候,由于不知道要将 log_format main 配置放在哪里,就放在了最外层,导致错误提示 nginx: [emerg] "log_format" directive is not allowed here in /etc/nginx/nginx.conf:14后序解决是 将 log_format main 放在 http {} 里面就解决问题了
复制代码
成功解决问题–使用 Nginx 代理 WebSocket
  1. nginx.conf
复制代码
具体配置如下, 实现的功能是将所有发往
  1. 10.6.30.185:9001
复制代码
的请求去匹配一下
  1. url
复制代码
里面有没有
  1. /websocket
复制代码
这一级,如果有就使用
  1. WebSocket
复制代码
请求发往
  1. 10.6.3.46:8001
复制代码
,后序使用了6台服务器进行了一个
  1. nginx
复制代码
代理
  1. WebSocket
复制代码
操作,都能够在后台读取到信息,同时,后台也能够推送信息过去。
  1. user nobody;  
  2. worker_processes  6;  
  3.   
  4.   
  5. #nginx 开启多核设置,目前185的机子,都是6核  
  6. worker_cpu_affinity 000001 000010 000100 001000 010000 100000;  
  7. #error_log  logs/error.log;  
  8. #error_log  logs/error.log  notice;  
  9. #error_log  logs/error.log  info;  
  10.   
  11.   
  12. error_log  /var/log/nginx/error.log info;  
  13.   
  14. #进程文件  
  15. pid        /var/run/nginx.pid;  
  16.   
  17. worker_rlimit_nofile 1024;  
  18.   
  19. events {  
  20.     use epoll; # 修改这里  
  21.     worker_connections  1024;  
  22. }

  23. # 设置http 服务器  
  24. http {  
  25.     include       mime.types; #文件扩展名与文件类型映射表  
  26.     default_type  application/octet-stream; #默认文件类型  
  27.     charset utf-8; #默认编码  
  28.     fastcgi_connect_timeout 2000;  
  29.     fastcgi_send_timeout 2000;  
  30.     fastcgi_read_timeout 2000;  
  31.     client_max_body_size 1024m;  
  32.     sendfile on;  
  33.     tcp_nopush on;  
  34.     tcp_nodelay on;  
  35.     keepalive_timeout 120;  
  36.     gzip  on;  
  37.     limit_req_zone $binary_remote_addr zone=test:10m rate=10r/s;  
  38.   
  39.     #日志配置  
  40.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  41.                           '$status $body_bytes_sent "$http_referer" '                          '"$http_user_agent" "$http_x_forwarded_for"'                           '$upstream_addr $upstream_response_time $request_time ';  
  42.             #$remote_addr: 客户端的IP地址。  
  43.             #$remote_user: 使用HTTP基本身份验证的情况下,远程用户的用户名。  
  44.             #$time_local: 本地时间的访问时间。  
  45.             #$request: 客户端请求的内容。  
  46.             #$status: 服务器响应的HTTP状态码。  
  47.             #$body_bytes_sent: 发送给客户端的字节数,不包括响应头的大小。  
  48.             #$http_referer: 引用页面的URL。  
  49.             #$http_user_agent: 客户端的User-Agent字符串,标识客户端的浏览器和操作系统等信息。  
  50.             #$http_x_forwarded_for: X-Forwarded-For 头,用于标识原始客户端的IP地址,当请求通过代理服务器时使用。  
  51.             #$upstream_addr: 后端(上游)服务器的IP地址。  
  52.             #$upstream_response_time: 从后端服务器接收响应的时间。  
  53.             #$request_time: 客户端发起请求到收到响应的总时间。  
  54.     access_log /var/log/nginx/nginx-access.log main;
  55.         map $http_upgrade $connection_upgrade {  
  56.             default upgrade;  
  57.             ''      close;  
  58.         }
  59.     server {  
  60.         listen 9001;  
  61.         server_name  10.6.30.185;  
  62.         location ^~ /websocket {  
  63.             proxy_pass http://10.6.3.46:8001;  
  64.             proxy_http_version 1.1;  
  65.             proxy_set_header Host $host;  
  66.             proxy_set_header X-Real-IP $remote_addr;  
  67.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  68.             proxy_read_timeout 120s;  
  69.             proxy_set_header Upgrade $http_upgrade;  
  70.             proxy_set_header Connection $connection_upgrade;  
  71.         }  
  72.     }  
  73. }
复制代码
可能出现的问题


  • 同一个网关出来的 IP 可能会重复,所以如果我想要做一个具体的指定连接的
    1. WebSocket IP
    复制代码
    集合中,
    1. key
    复制代码
    必须是
    1. mac
    复制代码
    地址
    1. value
    复制代码
    是 `连接的对象信息
  • 能指定发消息的需求
到此这篇关于Nginx配置WebSocket代理的示例代码的文章就介绍到这了,更多相关Nginx WebSocket代理内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2023-11-13
最后登录
2023-11-13

发表于 2025-2-23 21:49:29 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
12
积分
4
注册时间
2024-8-8
最后登录
2024-8-8

发表于 2025-4-1 13:19:53 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表