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(错误日志)排查转发问题。
相关推荐
2501_9127840833 分钟前
Taocarts深度解析:1688自动代采模块的Puppeteer自动化实战
运维·自动化
MXsoft61836 分钟前
**断网续传与本地缓存:弱网环境下的监控数据保障方案**
运维·缓存·自动化
LT10157974441 小时前
2026年UI自动化测试平台选型指南:全界面自动化覆盖方案
运维·ui·自动化
天青色等烟雨..1 小时前
智慧农林核心遥感技术99个案例实践
运维·人工智能·spring boot·后端·自动化
数智化精益手记局1 小时前
拆解复杂项目管理流程:用项目管理流程解决跨部门协作低效难题
大数据·运维·数据库·人工智能·产品运营
Solis程序员2 小时前
长会话状态治理(下):数据更新机制、并发保护与可复用设计原则
运维·服务器
是个西兰花2 小时前
linux:命名管道与共享内存
linux·运维·服务器·网络·c++
MXsoft6183 小时前
**智慧校园运维实践:多校区、老旧设备的统一监控方案**
运维·自动化
Sean‘3 小时前
在隔离内网机器上使用 Filebeat 全量采集日志并推送到 ELK 的实战
运维·服务器·elk
Promise微笑3 小时前
精准微阻测量:微欧计的分类、场景应用与高效选型决策指南
大数据·运维·网络·人工智能