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

Nginx单端口代理多个前后端服务的完整配置指南

Nginx单端口代理多个前后端服务的完整配置指南

一、核心配置原理

Nginx通过server块监听指定端口,利用location模块实现路径级别的请求分发。通过proxy_pass指令将不同路径的请求转发至对应后端服务,同时可配置静态资源缓存策略。

二、完整配置示例

# 主配置文件 /etc/nginx/nginx.conf
worker_processes  auto;
events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;# 上游服务定义upstream backend_api {server 127.0.0.1:8080;  # 后端API服务server 127.0.0.1:8081 backup;  # 备用节点}upstream web_server {server 127.0.0.1:3000;  # 前端服务}server {listen       80;server_name  localhost;# 静态资源缓存配置location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {expires 7d;root   /usr/share/nginx/html/static;access_log off;}# 动态API接口代理location /api/ {proxy_pass http://backend_api/;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_connect_timeout 60s;proxy_read_timeout 300s;}# 前端应用代理location / {proxy_pass http://web_server;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_cache_bypass $http_upgrade;}# 错误页面处理error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}}
}

三、关键配置详解

1. 静态资源优化

  • 路径匹配:使用正则表达式匹配文件类型
    location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {expires 7d;  # 7天缓存root   /usr/share/nginx/html/static;
    }
    
  • 缓存策略:通过expires指令设置浏览器缓存时间

2. 动态接口代理

  • 负载均衡配置
    upstream backend_api {server 127.0.0.1:8080 weight=3;  # 主节点server 127.0.0.1:8081;          # 从节点least_conn;                      # 最少连接策略
    }
    
  • 请求头传递
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    

3. WebSocket支持

location /ws/ {proxy_pass http://websocket_server;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";
}

四、验证与调试

1. 配置检查

nginx -t

2. 访问测试

# 测试静态资源
curl http://localhost/css/style.css# 测试API接口
curl http://localhost/api/users# 测试前端应用
curl http://localhost/

3. 日志分析

  • 访问日志:/var/log/nginx/access.log
  • 错误日志:/var/log/nginx/error.log

五、高级配置技巧

1. HTTPS统一端口

server {listen 443 ssl;ssl_certificate     /etc/nginx/ssl/fullchain.pem;ssl_certificate_key /etc/nginx/ssl/privkey.pem;location / {proxy_pass http://web_server;}
}

2. 路径重写

location /old-api/ {rewrite ^/old-api/(.*)$ /api/$1 break;proxy_pass http://backend_api;
}

3. 限流配置

location /api/ {limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;limit_req zone=api_limit burst=50;proxy_pass http://backend_api;
}

六、常见问题解决

1. 502 Bad Gateway

  • 检查后端服务是否运行
  • 增加超时时间:
    proxy_connect_timeout 60s;
    proxy_read_timeout 300s;
    

2. 静态资源404

  • 确认root路径是否存在
  • 检查文件权限:
    chmod -R 755 /usr/share/nginx/html/static
    

3. 跨域问题

location /api/ {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';if ($request_method = 'OPTIONS') {return 204;}proxy_pass http://backend_api;
}

通过以上配置,可实现Nginx在单个端口(如80/443)上同时代理多个前后端服务,满足生产环境的高性能需求。实际部署时需根据具体业务调整上游服务地址和缓存策略。

http://www.dtcms.com/a/353734.html

相关文章:

  • 【雅思019】Canceling an appointment
  • 数据结构——算法设计的基本思想(穷举、递归、分治等)
  • 【自用】JavaSE--junit单元测试、反射、注解、动态代理
  • FreeRTOS 常见面试题与核心知识点详解
  • Redis数据持久化——RDB快照和Aof日志追加
  • 8.28 模拟
  • 从易用性的角度来看,哪个ETL平台比较好用?
  • MySQL-数据类型
  • Clerk 用户认证系统集成文档
  • 关于virtual camera
  • UE5 PCG 笔记(三) Height To Density 节点
  • UE5 查找组件
  • UE5多人MOBA+GAS 55、基于 Python 协调器与 EOS 的会话编排
  • 嵌入式Linux自学不走弯路!670+讲课程!系统学习路线:入门+应用+ARM+驱动+移植+项目 (STM32MP157开发板)
  • 快速入门PowerDesigner-Database
  • 软件开发整体介绍和Swagger介绍和使用步骤
  • Dubbo加标签方式
  • Ubuntu 22.04 插入光驱后磁盘满启动故障clean, ...files, ...blocks
  • Proxmox VE 中启用 CentOS 虚拟机的串口终端(xterm.js 控制台)
  • MAX系列FPGA型号对比及低功耗特性分析
  • 服务器类型与TCP并发服务器构建(SELECT)
  • 冬天的思念
  • 数模笔记day01(数据预处理、K-means聚类、遗传算法、概率密度分布)
  • SqlHelper类库的使用方法
  • 关于DTO、DO、BO、VO
  • Linux系统性能优化全攻略:从CPU到网络的全方位监控与诊断
  • [实战] 半导体工厂生产网络项目案例分享
  • 遥感语义分割消融实验+对比实验
  • AI驱动的前端性能优化:从监控到自动化修复
  • SymPy 与 NumPy 混合编程:解决矩阵类型转换与数学函数兼容性问题