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(错误日志)排查转发问题。
相关推荐
小时候的阳光8 小时前
Docker版Percona Xtrabackup全量压缩脚本
运维·docker·容器
4***175410 小时前
Nginx auth_request详解
运维·nginx·xcode
梦想的旅途210 小时前
企业群运营自动化:RPA技术高效赋能
运维·自动化·rpa
꒰ঌ小武໒꒱10 小时前
RuoYi-Vue 前端环境搭建与部署完整教程
前端·javascript·vue.js·nginx
hhwyqwqhhwy11 小时前
Linux file->private
linux·运维·服务器
WongKyunban11 小时前
在Linux下制作软件安装包
linux·运维·服务器
hweiyu0012 小时前
Linux 命令:parted
linux·运维·服务器
烽火聊员12 小时前
CertificateCreator生成服务器证书server.pfx
运维·服务器
搞全栈小苏12 小时前
Linux下 cmake所有版本适用/下载编译使用教程 附cmake3.26安装包
linux·运维·ubuntu