Skip to content

Nginx

Nginx 是一款高性能的 HTTP 服务器、反向代理服务器和负载均衡器,核心作用是处理客户端(如浏览器)的请求,分发到后端服务或直接返回静态资源,广泛用于网站部署、服务架构优化等场景。

基础内容

诞生背景

优势亮点

核心功能

反向代理

Nginx 反向代理是其最常用的功能之一,核心作用是作为客户端与后端服务之间的 “中间代理人”。它先统一接收客户端请求,再按预设规则转发至后端具体服务,最后将后端响应回传给客户端。通过这一过程,既能隐藏后端服务的真实地址、统一请求入口,还能实现负载均衡、缓存、安全防护等延伸能力。

反向代理的核心价值

反向代理并非简单的 “请求转发器”,而是通过中间层为系统架构提供多重关键支撑:

  • 隐藏后端架构:客户端仅能看到 Nginx 服务器地址,无法直接访问后端应用服务器(如 Tomcat、Node.js 服务),降低后端服务暴露风险。
  • 统一入口管理:无论后端部署多少台服务、使用何种技术栈,客户端只需向 Nginx 发送请求,由 Nginx 统一调度,简化客户端对接逻辑。
  • 支撑上层功能:为负载均衡、HTTP 缓存、SSL 终结等功能提供基础,例如多台后端服务的请求分配、静态资源的缓存加速,均需基于反向代理实现。
  • 解决跨域问题:客户端直接访问后端服务可能因浏览器跨域规则被拦截,通过 Nginx 转发可统一处理跨域配置(如添加 CORS 响应头),避免前端额外适配。

反向代理完整工作流程

以 “用户访问 https://example.com/api/user 获取用户信息” 为例,完整流程如下:

  1. 客户端发起请求
    用户在浏览器输入 URL 或前端代码发送接口请求,请求先发送至 example.com 对应的服务器(即 Nginx 服务器),携带请求头(如 HostUser-Agent)和请求参数。

  2. Nginx 接收请求并匹配配置
    Nginx 监听 80/443 端口(HTTP/HTTPS 默认端口),接收到请求后,根据主配置文件(nginx.conf)中的 server 块(匹配 example.com 域名)和 location 块(匹配 /api/user 路径),找到对应的反向代理规则(如 proxy_pass http://backend-server:8080)。

  3. Nginx 转发请求到后端服务
    Nginx 按照 proxy_pass 配置,将请求转发至后端服务(如地址为 http://backend-server:8080 的 Node.js 服务)。此时 Nginx 会自动调整请求头,例如添加 X-Real-IP(传递客户端真实 IP)、X-Forwarded-For(记录请求转发路径)等,方便后端服务获取客户端原始信息。

  4. 后端服务处理请求
    后端服务(如 backend-server:8080)接收到 Nginx 转发的请求,执行业务逻辑(如查询数据库获取用户信息),处理完成后生成响应数据(如 JSON 格式的用户信息),并将响应回传给 Nginx。

  5. Nginx 处理响应(可选增强)
    Nginx 接收到后端响应后,可根据配置进行额外处理:

    • 若开启了 HTTP 缓存,将响应内容缓存到本地,后续相同请求可直接返回缓存,无需再次转发;
    • 若配置了响应头优化,添加或修改响应头(如 Cache-ControlAccess-Control-Allow-Origin);
    • 若后端响应存在错误(如 502 状态码),可返回自定义错误页面,提升用户体验。
  6. Nginx 回传响应给客户端
    Nginx 将处理后的响应数据回传给客户端(浏览器或前端应用),客户端解析响应并展示结果(如页面渲染用户信息),整个请求流程结束。

典型配置示例(以 HTTP 反向代理为例)

以下是 Nginx 实现反向代理的基础配置,可直接用于将 example.com/api 路径的请求转发至后端服务:

nginx
# 配置服务器块,匹配域名 example.com
server {
    listen 80;  # 监听 HTTP 80 端口
    server_name example.com;  # 匹配的域名

    # 配置 location 块,匹配 /api 开头的请求
    location /api {
        # 核心:转发请求到后端服务地址(http://后端IP:端口)
        proxy_pass http://192.168.1.100:8080;

        # 可选:传递客户端真实 IP 和请求信息
        proxy_set_header Host $host;  # 传递原始请求的 Host 头
        proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实 IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递转发链
        proxy_set_header X-Forwarded-Proto $scheme;  # 传递原始请求协议(http/https)

        # 可选:设置超时时间,避免后端无响应导致 Nginx 阻塞
        proxy_connect_timeout 5s;  # 与后端建立连接的超时时间
        proxy_send_timeout 10s;    # 发送请求到后端的超时时间
        proxy_read_timeout 10s;    # 读取后端响应的超时时间
    }

    # 其他路径(如 / 根路径)可配置静态资源服务
    location / {
        root /usr/share/nginx/html;  # 静态资源目录
        index index.html;            # 默认首页
    }
}

常见使用场景

  • 单后端服务隐藏:后端服务(如个人开发的 Node.js 接口)仅对内网开放,通过 Nginx 反向代理对外提供访问,避免直接暴露后端端口。
  • HTTPS 终结:Nginx 接收客户端 HTTPS 请求(配置 SSL 证书),解密后以 HTTP 协议转发给后端服务,减少后端服务的加密 / 解密性能消耗。
  • 前后端分离项目:前端静态资源(Vue/React 打包文件)由 Nginx 直接提供服务,前端发起的 API 请求通过 Nginx 反向代理转发至后端接口服务,解决跨域问题。

负载均衡

HTTP 缓存

静态服务内容

SSL/TLS 加密

邮件代理服务

URL 重写和重定向

FastCGI、uWSGI、gRPC 支持

流控与限流

访问控制和认证

优势价值

Nginx 的核心优势

  • 高性能
  • 高稳定
  • 轻量级
  • 扩展性强

核心价值

  • 隐藏后端服务:客户端只与 Nginx 交互,不知道后端真实 IP 和端口,降低后端服务被直接攻击的风险。
  • 统一入口:多个后端服务(如前端、API、文件服务)可通过 Nginx 统一对外暴露一个域名和端口,简化客户端访问(如 www.xxx.com 既对应前端,也通过 /api 对应后端)。
  • 适配后端架构:支持后端服务部署在内网(无公网 IP),只需 Nginx 有公网 IP 即可,降低后端服务器的网络配置复杂度。

应用场景

大型网站中的 Nginx

API 网关

CDN 节点的核心

安装配置

安装指南

配置文件详解

配置案例

性能优化

安全防护

尘埃虽微,积之成集;问题虽小,记之为鉴。 雾中低语,心之所向;思绪飘渺,皆可成章。