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(错误日志)排查转发问题。
相关推荐
阿杰 AJie12 分钟前
Docker 常用镜像启动参数对照表
运维·docker·容器
我想发发发18 分钟前
Linux实现虚拟串口通信-socat
linux·运维·服务器
济61727 分钟前
linux 系统移植(第五期)--Uboot移植(4)--在U-Boot 中添加自己的开发板(4) -其他需要修改的地方-- Ubuntu20.04
linux·运维·服务器
老顾聊技术1 小时前
“Anthropic 最新发布的 AI Skills:赋能任务自动化与跨领域应用“
运维·人工智能·自动化
令狐少侠20111 小时前
Linux 系统部署夜莺 nightingale 监控公司的watchdog
linux·运维·服务器
百度Geek说2 小时前
百度流式计算开发平台的降本增效之路
运维·云原生
e***98572 小时前
MobaXterm全能运维实战指南
运维
last demo2 小时前
docker容器
运维·docker·容器
一人の梅雨3 小时前
亚马逊SP-API商品评论接口实战:情感分析+商业洞察挖掘的差异化方案
运维·前端·数据库
养乐多q.♡3 小时前
docker镜像的nginx配置证书SSL,单独配置单个localtion使用证书,其他nginx配置不影响
nginx·docker·ssl