Nginx 反向代理

一、核心定位

Nginx 反向代理是 Nginx 服务器的核心功能,简单说就是:客户端(浏览器 / APP)不直接访问目标服务器(后端服务、数据库、静态资源服务器等),而是先请求 Nginx ,由 Nginx 转发请求到目标服务器,再将服务器的响应结果返回给客户端。

对开发者而言,它本质是 "请求中转站 + 流量控制器",既能隐藏后端真实服务器地址,又能解决跨域、负载均衡、SSL 终结等开发 / 部署中的实际问题。

二、核心功能与开发 / 部署价值

  1. 隐藏后端服务,提升安全性 后端服务器(如 Java 服务、Node.js 服务)无需暴露公网 IP,仅 Nginx 对外提供访问入口,避免直接被攻击(如端口扫描、恶意请求)。例:用户访问 https://www.yourapp.com(Nginx 地址),实际请求被转发到内网的 192.168.1.100:8080(Java 后端)。

  2. 解决跨域问题(前端开发刚需) 前端本地开发(如 http://localhost:3000)调用后端接口(如 http://192.168.1.100:8080/api)时,会因浏览器同源策略触发跨域。用 Nginx 反向代理:前端请求 http://localhost:80/api(Nginx 代理地址),Nginx 转发到后端接口,因请求目标是 Nginx(同源),跨域自动解决。

  3. 负载均衡(高并发部署必备) 当后端部署多台服务器(如 3 台 Java 服务),Nginx 可按规则(轮询、权重、IP 哈希)分发请求,避免单台服务器过载。例:用户请求均匀分配到 192.168.1.100:8080192.168.1.101:8080192.168.1.102:8080,提升系统并发能力。

  4. **SSL 终结(简化后端配置)**仅在 Nginx 上配置 HTTPS 证书(处理 SSL 加密 / 解密),后端服务器只需处理 HTTP 请求,无需关心 SSL 配置,降低后端开发 / 维护成本。

  5. **静态资源缓存(提升访问速度)**前端的 JS、CSS、图片等静态资源,可由 Nginx 直接返回(缓存到 Nginx 服务器),无需转发到后端,减少后端压力,提升页面加载速度。

三、核心配置示例(开发者实操级)

Nginx 反向代理通过 nginx.conf 配置,核心配置段为 location,以下是 3 个最常用场景的配置:

1. 基础反向代理(转发单个后端服务)

nginx

复制代码
server {
    listen 80;  # Nginx 监听端口
    server_name localhost;  # 访问域名/IP

    # 所有请求转发到后端服务
    location / {
        proxy_pass http://192.168.1.100:8080;  # 目标服务器地址(后端服务)
        proxy_set_header Host $host;  # 传递客户端 Host 信息
        proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实 IP
    }
}

2. 跨域场景配置(前端调用后端接口)

nginx

复制代码
server {
    listen 80;
    server_name localhost;

    # 前端请求 /api 开头的接口,转发到后端
    location /api {
        proxy_pass http://192.168.1.100:8080/api;  # 后端接口地址
        proxy_set_header Host $host;
        # 允许跨域的请求头(解决复杂跨域)
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS";
        add_header Access-Control-Allow-Headers "Content-Type,Token";
    }
}

3. 负载均衡配置(多后端服务分发)

nginx

复制代码
# 定义负载均衡集群(后端服务器组)
upstream backend_servers {
    server 192.168.1.100:8080 weight=5;  # 权重 5,接收更多请求
    server 192.168.1.101:8080 weight=3;  # 权重 3
    server 192.168.1.102:8080;  # 默认权重 1
}

server {
    listen 80;
    server_name www.yourapp.com;

    location / {
        proxy_pass http://backend_servers;  # 转发到集群
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递代理链 IP
    }
}

四、适用场景(开发者高频需求)

  • 前端开发:解决本地跨域问题,无需后端修改 CORS 配置;
  • 后端部署:隐藏真实服务地址,实现多服务器负载均衡、高可用;
  • 全栈项目:统一入口(HTTP/HTTPS 配置、静态资源托管、接口转发一体化);
  • 微服务架构:作为 API 网关,转发不同微服务的请求(如 /user 转发到用户服务,/order 转发到订单服务)。

五、关键注意事项

  1. 配置后需重启 Nginx 生效:nginx -s reload(Windows/Mac/Linux 通用);
  2. proxy_pass 结尾是否加 / 影响路径匹配(例:/api 转发到 http://xxx:8080http://xxx:8080/ 结果不同,需注意路径拼接);
  3. 高并发场景需优化 Nginx 性能参数(如 worker 进程数、连接数限制);
  4. 调试时可通过 access.log(访问日志)和 error.log(错误日志)排查转发问题。
相关推荐
开心大爆炸38 分钟前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
苏生Susheng2 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
2601_962304912 小时前
把出片接进自动化流水线:2026 年批量 AI 视频生成工具的脚本契约与同类项目对照
运维·人工智能·自动化
Ruiery2 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
snow@li2 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
实战派K8S&DB3 小时前
《基于 Dify + FastAPI + PyTiDB 搭建大模型驱动的 TiDB 智能运维 Agent》
运维·数据库·分布式·云原生·tidb·fastapi
苏生Susheng3 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
名字还没想好☜4 小时前
Docker buildx 多架构镜像实战:一次构建 amd64+arm64,告别 exec format error
运维·docker·eureka·架构·kubernetes
墨着染霜华4 小时前
SpringCloud Gateway线上Nginx代理后自定义下划线请求头丢失(app_name/app_version获取不到)完美解决
nginx·spring cloud·gateway
智购无人售货机厂家4 小时前
2026自动售货机软硬件版本管理策略:从版本号规范到兼容性矩阵的工程实践~YH
运维·服务器·人工智能·单片机·嵌入式硬件·线性代数·矩阵