当前位置: 首页 > news >正文

【Nginx反向代理】通过Nginx反向代理将多个后端server统一到同一个端口上的方法

文章目录

  • 前言
  • 解决方案:使用 Nginx 做统一反向代理

前言

在多人开发任务中,如果不同人负责不同的后端接口服务开发,那么就面临着每个人的服务部署到不同的端口上,甚至有的人的服务部署在不同的服务器上。这时候前端如果想要调用后端的接口,就非常麻烦。

比如下面这种情况:

  • 开发者 A 的接口部署在 http://localhost:5051/api/…

  • 开发者 B 的接口部署在 http://localhost:5351/api/…

  • 开发者 C 的服务部署在另一台服务器上:http://remote-server.com:8000/items/…

前端要分别调用这些接口,就需要处理多个端口、多个 IP 地址,还要配置跨域等问题,既复杂又容易出错。

解决方案:使用 Nginx 做统一反向代理

我们可以通过部署一个 Nginx 服务来统一入口端口,例如统一通过 http://api.example.com:5053 访问不同的后端接口,内部再根据请求路径转发给对应的服务。这样,前端只需要记住一个地址和端口,调用 /api1/、/api2/、/api3/ 即可访问不同的服务。

服务器端nginx安装命令:

#  在 Ubuntu上安装
sudo apt update
sudo apt install nginx -y# 在 CentOS上安装
sudo yum install epel-release -y
sudo yum install nginx -y

Nginx 配置示例:
在服务器上安装 Nginx 后,编辑配置文件(如 /etc/nginx/conf.d/api_gateway.conf),示例如下:
编辑命令:sudo vi /etc/nginx/nginx.conf

server {listen 5053;server_name api.example.com;# 代理开发者 A 的服务:本机 5051 端口location /api1/ {proxy_pass http://127.0.0.1:5051/api/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# 代理开发者 B 的服务:本机 5351 端口location /api2/ {proxy_pass http://127.0.0.1:5351/api/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# 代理开发者 C 的服务:远程服务器location /api3/ {proxy_pass http://remote-server.com:8000/items/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

请求映射关系

前端请求路径实际代理后的路径
http://api.example.com:5053/api1/xxxhttp://127.0.0.1:5051/api/xxx
http://api.example.com:5053/api2/xxxhttp://127.0.0.1:5351/api/xxx
http://api.example.com:5053/api3/xxxhttp://remote-server.com:8000/items/xxx

这样做的好处是:

  • 安全性更高(隐藏内部服务细节)
  • 跨域问题由后端集中处理(CORS配置)
  • 负载均衡和路由管理更灵活
  • 前端无需处理多端口逻辑

Nginx常用命令:

操作命令说明
启动 Nginxsudo systemctl start nginx启动服务
停止 Nginxsudo systemctl stop nginx停止服务
重启 Nginxsudo systemctl restart nginx重启服务(配置变更后常用)
重新加载配置sudo nginx -s reload热重载配置文件(不中断服务)
查看状态sudo systemctl status nginx查看服务是否运行中
查看版本nginx -v查看安装版本
测试配置sudo nginx -t检查配置文件语法是否正确
http://www.dtcms.com/a/309295.html

相关文章:

  • 开源爬虫管理工具
  • [ Leetcode ]---快乐数
  • 【Redis】key的设计格式
  • Django模型查询与性能调优:告别N+1问题
  • 第三篇:几何体入门:内置几何体全解析
  • 【LLM】讲清楚MLA原理
  • Linux(15)——进程间通信
  • EasyExcel 公式计算大全
  • Spring Boot Actuator 保姆级教程
  • 包裹移动识别误报率↓76%:陌讯时序建模算法实战解析
  • C#实现左侧折叠导航菜单
  • 数据结构(9)栈和队列
  • 完整的 Spring Boot + Hibernate/JPA + P6Spy 配置指南
  • 凸优化:常见的优化问题,偏统计视角
  • cesium FBO(四)自定义相机渲染到Canvas(离屏渲染)
  • android APT技术
  • 今日链表系列
  • 京东零售在智能供应链领域的前沿探索与技术实践
  • X2Doris是SelectDB可视化数据迁移工具,安装与部署使用手册,轻松进行大数据迁移
  • Blender 智能模型库 | 人物·建筑·场景·机械等 近万高精度模型
  • 无人机自动跟随模块技术分析
  • SpringMVC的高级特性
  • 机密计算与AI融合:安全与智能的共生架构
  • 《B3611 【模板】传递闭包》
  • 编程与数学 03-002 计算机网络 17_云计算与网络
  • Java 日期时间处理:分类、用途与性能分析
  • macOS卸载.net core 8.0
  • HarmonyOS】鸿蒙应用开发中常用的三方库介绍和使用示例
  • 代码随想录算法训练营第三十八天
  • NLP 和 LLM 区别、对比 和关系