注册
|
登录
发帖
热搜
活动
交友
discuz
论坛
BBS
翼度工具
翼度网址导航
开发工具
Linux命令速查
网页设计配色表
在线制作icon
颜色代码选取器
翼度科技
»
论坛
›
云主机
›
服务器技术
›
查看内容
返回列表
发新帖
Nginx 配置 WebSocket 代理的操作过程
马克思遇上麦哲伦
马克思遇上麦哲伦
当前离线
积分
3
1
主题
1
帖子
3
积分
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
新手上路, 积分 3, 距离下一级还需 47 积分
积分
3
发消息
显示全部楼层
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 查看安装文件命令手册
[!起因]我使用指令 [code]whereis nginx
复制代码
跳出来了很多路径,但是我不太明白每个路径是什么意思,就仔细去看了看,然后发现了一个路径
/usr/share/man/man8/
复制代码
这个目录,下面一般都是手册路径,在这里面可以看很多软件的基本指令操作 可使用指令
man nginx
复制代码
来查看
nginx.8.gz
复制代码
手册。[/code]
Nginx 日志配置方案
可以参考 Nginx访问日志(access_log)配置及信息详解_nginx access.log配置
一般使用
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: 客户端发起请求到收到响应的总时间。
[!错误]配置 [code]nginx
复制代码
日志的时候,由于不知道要将
log_format main
复制代码
配置放在哪里,就放在了最外层,导致错误提示
nginx: [emerg] "log_format" directive is not allowed here in /etc/nginx/nginx.conf:14
复制代码
后序解决是 将
log_format main
复制代码
放在
http {}
复制代码
里面就解决问题了[/code]
成功解决问题–使用 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
复制代码
是 `连接的对象信息
能指定发消息的需求
到此这篇关于Nginx 配置 WebSocket 代理的文章就介绍到这了,更多相关Nginx WebSocket 代理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:
https://www.jb51.net/server/319012n4n.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
上一篇:
docker容器启动后如何修改或添加端口
下一篇:
如何修改Docker镜像的映射端口号
发表于 2024-4-14 16:02:01
来自手机
举报
回复
使用道具
分享
返回列表
发新帖
本版积分规则
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
快速回复
快速回复
返回顶部
返回顶部
返回列表
返回列表