论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
Oracle
›
nginx实现同一个端口监听多个服务
nginx实现同一个端口监听多个服务
立山
论坛元老
|
前天 05:25
|
显示全部楼层
|
阅读模式
楼主
主题
1855
|
帖子
1855
|
积分
5565
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
前言
受
同一个系统中多个 TCP 服务进程无法绑定同一个端口
这个概念的影响,误以为在nginx也无法配置通过同一个端口无法转发到多个不同域名的后端服务,于是本文使用配置来验证,实际是完全可以在同一端口上配置转发多个服务,且无需依赖不同协议。
假如两个 TCP 服务进程同时绑定的 IP 地址和端口都相同,那么执行 bind() 时间就会堕落,错误是“Address already
in use”。
原理
其核心原理是通过 请求特征区分流量(如域名、路径、请求头),而非依赖不同协议或端口。以下是具体实现方式和配置示例:
Nginx 的 server 块和 location 块支持根据以下特征区分请求:
域名
(server_name):不同域名访问同一端口时,Nginx 根据 Host 头分发到不同服务。
路径
(location):同一域名的不同 URL 路径分发到不同服务。
协议
:严酷来说,HTTP 和 HTTPS 协议必要不同端口(如 80 和 443),但可以在同一端口上通过协议升级(如 WebSocket)或同一协议下的不同路由逻辑实现多服务。
配置
使用同一个端口监听转发到不同服务,其实有两种配置,①是通过不同域名;②基于路径(URL 路由);
不同域名
通过不同域名(如 lvan.service1.com 和 lvan.service2.com)在同一端口(如 80)访问不同服务。
在nginx.conf配置
http {
# 服务1:通过 lvan.service1.com 访问
server {
listen 80;
server_name lvan.service1.com; # 域名1
location / {
proxy_pass http://localhost:3000; # 转发到服务1
}
}
# 服务2:通过 lvan.service2.com 访问
server {
listen 80;
server_name lvan.service2.com; # 域名2
location / {
proxy_pass http://localhost:4000; # 转发到服务2
}
}
}
复制代码
基于路径(URL 路由)
通过同一域名和端口的不同路径(如 /app1 和 /app2)访问不同服务。
http {
server {
listen 80;
server_name example.com;
# 服务1:路径 /app1
location /app1/ {
proxy_pass http://localhost:3000/; # 末尾的 / 会移除 /app1/
}
# 服务2:路径 /app2
location /app2/ {
proxy_pass http://localhost:4000/; # 末尾的 / 会移除 /app2/
}
# 默认路由(可选)
location / {
root /var/www/html; # 静态资源或其他默认服务
}
}
}
复制代码
注意:proxy_pass 末尾的 / 会移除原始路径前缀(如 /app1/api 转发为 /api)。
路径匹配优先级:准确路径(=)> 正则路径(~)> 平凡路径。
补充
还可以通过混合协议(HTTP + WebSocket)。在同一端口(如 80)同时处理 HTTP 请求和 WebSocket 连接(需协议升级)。
http {
server {
listen 80;
server_name example.com;
# HTTP 服务
location /api {
proxy_pass http://localhost:3000;
}
# WebSocket 服务
location /ws {
proxy_pass http://localhost:4000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; # 协议升级头
proxy_set_header Connection "Upgrade";
}
}
}
复制代码
注意:
WebSocket 本质是 HTTP 协议升级,仍使用同一端口。
需配置 Upgrade 和 Connection 头支持协议切换。
总之
同一端口部署多服务的核心:利用 Nginx 的请求分发能力,根据域名、路径、协议升级等特征区分流量。
完结撒花,如有必要收藏的看官,顺便也用发财的小手点点赞哈,如有错漏,也接待各位在批评区批评!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
立山
论坛元老
这个人很懒什么都没写!
楼主热帖
IoTOS-v1.5.3 新增 智能诊断&会话记录 ...
【学习笔记】WPF-01:前言
基于SqlSugar的开发框架循序渐进介绍( ...
网络安全-技术与实践 书本习题练习 ...
CentOS7 单机版使用kubeadm安装K8S ...
IO流的使用
WEB安全基础入门—身份验证漏洞 ...
开源直播课丨大数据集成框架ChunJun类 ...
Python中可以用三种方法判断文件是否存 ...
解读数仓常用模糊查询的优化方法 ...
标签云
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表