轻松实现Nginx的HTTP与WebSocket转发:你的网站需要这个
创作时间:
作者:
@小白创作中心
轻松实现Nginx的HTTP与WebSocket转发:你的网站需要这个
引用
CSDN
1.
https://blog.csdn.net/t610654893/article/details/136804418
对于初学者来说,配置Nginx可能有一定的难度。幸运的是,我们可以使用一个自动配置Nginx的网站来辅助我们:
https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN
该网站提供了傻瓜式的点击配置功能,配置完成后可以下载一个非常详尽的Nginx配置文件。
在Nginx中配置HTTP和WebSocket转发时,需要关注以下两点:
- SSL:证书配置,取决于是否使用HTTP还是HTTPS,以确保数据在客户端和服务器之间传输时的安全性。
- SERVER:server块是一个配置指令块,允许定义如何处理来自特定域名的请求。可以有多个server块,每个server块通常对应一个唯一的域名或IP地址加端口组合。
在SERVER块中配置HTTP和WebSocket:
- HTTP转发配置:对于HTTP请求,可以使用proxy_pass指令将请求转发到应用服务器。
server {
listen 80;
server_name example.com; # 你的域名
location / {
proxy_pass http://backend; # backend是应用服务器的upstream名称
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
在上面的配置中,backend是一个upstream指令定义的服务器组,需要确保在Nginx配置文件中定义了这个upstream。
- WebSocket转发配置:对于WebSocket请求,除了使用proxy_pass指令外,还需要添加一些额外的配置来支持WebSocket通信。
server {
listen 80;
server_name example.com; # 你的域名
location /ws/ {
proxy_pass http://websocket_backend; # websocket_backend是WebSocket服务器的upstream名称
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
类似于HTTP转发,websocket_backend应该是一个upstream指令定义的服务器组。上面的配置中,proxy_http_version 1.1指定了使用HTTP/1.1,而proxy_set_header Upgrade $http_upgrade和proxy_set_header Connection "upgrade"是WebSocket协议升级所需的标头。
接下来,我们来看一个具体的配置实例:
# 匹配 /api/exchange/**
location ~/exchange/ {
proxy_pass http://ip地址:5252;
}
# 匹配 /api/manager/**
location ~/manager/ {
proxy_pass http://ip地址:5253;
}
# 匹配 swagger
location ~/doc.html {
proxy_pass http://ip地址;
}
# 匹配 swagger
location ~/*.css {
proxy_pass http://ip地址;
}
# 匹配 swagger
location ~/*.js {
proxy_pass http://ip地址;
}
# 匹配 swagger
location ~/swagger-resources {
proxy_pass http://ip地址;
}
# 匹配 /ws/**
location ^~ /ws {
# 后台准备的websocket地址端口
proxy_pass http://ip地址:5353;
# 其他参数都一样
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
了解Nginx中正则匹配的规则和优先级:
- location = # 精准匹配
- location ^~ # 带参前缀匹配
- location ~ # 正则匹配(区分大小写)
- location ~* # 正则匹配(不区分大小写)
- location /a # 普通前缀匹配,优先级低于带参数前缀匹配。
- location / # 任何没有匹配成功的,都会匹配这里处理
如果配置全部正确但仍然无法转发WebSocket,可能是由于API配置或正则匹配优先级问题。请检查API配置和正则匹配优先级。
最后,完成配置后不要忘记重启Nginx服务以使配置生效:
sudo systemctl restart nginx
# 或者
nginx -s reload
确保应用服务器能够处理WebSocket连接,并且防火墙设置允许相应的端口通信。如果WebSocket服务运行在不同的端口或使用HTTPS,还需要相应地修改Nginx配置。
热门推荐
怎么区分内热与外热发烧
保姆级【APEC商务旅行卡】一卡在手,五年免签畅行16国!详解申请流程
人生哲学的100句名言
舞蹈的魔力:过去与现在
床单有螨虫?不能暴晒!螨虫最怕这5招,每天照做床上无螨!
阿莫西林加洗发水洗头有什么功效
有效的助眠音乐推荐-踏入宁静的梦乡
驾驶证年龄是怎样规定的
阴阳五行与军事智慧:古代兵家如何运用天地规律 | 白话《太白阴经》01
泄密项目管理原则有哪些
海棠花(Malus spectabilis):春日的使者与文化的象征
王昭君:从汉宫宫女到民族友好的象征
春晚最全梗图|这些名场面承包了我整年笑点
社区团购“下乡”:农村市场,大有可为
如何根据预算优化你的高性能DIY电脑配置:从3000到8000元详细方案解析
中医治疗过敏性紫癜的优势:标本兼治、安全温和、整体调理
干性皮肤冬季护肤的正确步骤
移动硬盘和固态硬盘哪个好?五大差别,看这篇就够了
如何根据企业规模调整绩效评价标准值
农村建两层毛坯房需要多少钱?预算规划全攻略
如何应对孩子发脾气,父母的反应很重要
不是科幻小说:哈佛科学家开发了一种“智能”液体
退休后医保补缴所需材料和办理流程有哪些
外贸公司是做什么的?经营范围怎么写?
让LLM“遗忘”特定知识
IJNS:基于护理记录的深度神经网络预测ICU患者出院后死亡风险
运动后指(趾)甲受伤,严重甲下瘀血,疼痛难忍,医生教您一招解决问题
Trends Microbiol:感染期间,线粒体如何介导病毒的氧化应激?
鼻窦炎喉咙有异物感
手脱皮用什么药好得快