论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
Nginx 配置 WebSocket 代理
Nginx 配置 WebSocket 代理
去皮卡多
论坛元老
|
2024-6-22 22:02:12
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
1048
|
帖子
1048
|
积分
3144
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
Nginx 配置 WebSocket 代理
Nginx 官方文档网址 nginx documentation
...
http:{
...
server{
...
# WebSocket代理
location /wsUrl/ {
rewrite ^/wsUrl/(.*)$ /$1 break; #拦截标识去除
proxy_pass http://192.168.100.20:8080; #这里是http不是ws,不用怀疑,代理的ip和port写ws访问的实际地址
proxy_http_version 1.1; #这里必须使用http 1.1
#下面两个必须设置,请求头设置为ws请求方式
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
...
}
...
}
复制代码
官方文档代理样例
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 9001;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ^~ /websocket {
proxy_pass http://localhost:8090/;
proxy_http_version 1.1;
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_read_timeout 120s;
proxy_set_header Upgrade websocket;
proxy_set_header Connection Upgrade;
}
}
}
复制代码
Linux 查看安装文件命令手册
[!因由]
我利用指令 whereis nginx 跳出来了很多路径,但是我不太明确每个路径是什么意思,就仔细去看了看,然后发现了一个路径 /usr/share/man/man8/ 这个目录,下面一般都是手册路径,在这里面可以看很多软件的基本指令操作 可利用指令 man nginx 来查看 nginx.8.gz 手册。
Nginx 日志配置方案
可以参考 Nginx访问日志(access_log)配置及信息详解_nginx access.log配置-CSDN博客
一般利用 main 格式
如下
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr $upstream_response_time $request_time ';
access_log logs/access.log main;
复制代码
$remote_addr: 客户端的IP地点。
$remote_user: 利用HTTP基本身份验证的环境下,远程用户的用户名。
$time_local: 当地时间的访问时间。
$request: 客户端请求的内容。
$status: 服务器响应的HTTP状态码。
$body_bytes_sent: 发送给客户端的字节数,不包罗响应头的大小。
$http_referer: 引用页面的URL。
$http_user_agent: 客户端的User-Agent字符串,标识客户端的浏览器和操作系统等信息。
$http_x_forwarded_for: X-Forwarded-For 头,用于标识原始客户端的IP地点,当请求通过代理服务器时利用。
$upstream_addr: 后端(上游)服务器的IP地点。
$upstream_response_time: 从后端服务器接收响应的时间。
$request_time: 客户端发起请求到收到响应的总时间。
[!错误]
配置 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
nginx.conf详细配置如下, 实现的功能是将全部发往 10.6.30.185:9001 的请求去匹配一下 url
里面有没有 /websocket 这一级,假如有就利用 WebSocket 请求发往 10.6.3.46:8001 ,后序利用了6台服务器举行了一个 nginx 代理 WebSocket 操作,都能够在后台读取到信息,同时,后台也能够推送信息过去。
user nobody;
worker_processes 6;
#nginx 开启多核设置,目前185的机子,都是6核
worker_cpu_affinity 000001 000010 000100 001000 010000 100000;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
error_log /var/log/nginx/error.log info;
#进程文件
pid /var/run/nginx.pid;
worker_rlimit_nofile 1024;
events {
use epoll; # 修改这里
worker_connections 1024;
}
# 设置http 服务器
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
charset utf-8; #默认编码
fastcgi_connect_timeout 2000;
fastcgi_send_timeout 2000;
fastcgi_read_timeout 2000;
client_max_body_size 1024m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120;
gzip on;
limit_req_zone $binary_remote_addr zone=test:10m rate=10r/s;
#日志配置
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' '$upstream_addr $upstream_response_time $request_time ';
#$remote_addr: 客户端的IP地址。
#$remote_user: 使用HTTP基本身份验证的情况下,远程用户的用户名。
#$time_local: 本地时间的访问时间。
#$request: 客户端请求的内容。
#$status: 服务器响应的HTTP状态码。
#$body_bytes_sent: 发送给客户端的字节数,不包括响应头的大小。
#$http_referer: 引用页面的URL。
#$http_user_agent: 客户端的User-Agent字符串,标识客户端的浏览器和操作系统等信息。
#$http_x_forwarded_for: X-Forwarded-For 头,用于标识原始客户端的IP地址,当请求通过代理服务器时使用。
#$upstream_addr: 后端(上游)服务器的IP地址。
#$upstream_response_time: 从后端服务器接收响应的时间。
#$request_time: 客户端发起请求到收到响应的总时间。
access_log /var/log/nginx/nginx-access.log main;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 9001;
server_name 10.6.30.185;
location ^~ /websocket {
proxy_pass http://10.6.3.46:8001;
proxy_http_version 1.1;
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_read_timeout 120s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
}
复制代码
大概出现的问题
同一个网关出来的 IP 大概会重复,以是假如我想要做一个详细的指定连接的WebSocket IP集合中,key 必须是 mac 地点 value 是 `连接的对象信息
能指定发消息的需求
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
去皮卡多
论坛元老
这个人很懒什么都没写!
楼主热帖
如何基于 ZEGO SDK 实现 iOS 变声/混响 ...
民间最大社区,倒闭了!
FPGA虚拟化:突破次元壁的技术 ...
Ribbon负载均衡的深度分析和使用 ...
仿京东严选商城项目,集购物+支付+发货 ...
驱动开发:内核R3与R0内存映射拷贝 ...
基于Kubernetes(k8s)部署Dubbo+Nacos服 ...
LyScript 实现应用层钩子扫描器 ...
Python生成字母对后写入文件
Java 结构化数据处理开源库 SPL ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
移动端开发
DevOps与敏捷开发
分布式数据库
网络安全
SQL-Server
Nosql
鸿蒙
程序人生
Oracle
快速回复
返回顶部
返回列表