Nginx 反向代理、负载均衡与网关入口

从反向代理到 upstream、TLS 终止和 API 网关,理解 Nginx 为什么常被放在系统最前面。

#type / synthesis #status / growing #tech / ops #resource / nginx

[!info] related notes

Nginx 反向代理、负载均衡与网关入口

范围

  • 这篇笔记关注 Nginx 作为反向代理、负载均衡器、TLS 终止层和 API 网关入口时的角色。

为什么要放在一起理解

  • 这些能力不是彼此孤立的功能,而是都发生在“用户与后端服务之间的入口层”。

反向代理

最常见模型:

Client -> Nginx -> Backend App

典型配置:

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

用户访问:

http://api.example.com/users

Nginx 转发给:

http://127.0.0.1:3000/users

负载均衡

upstream 定义一组后端:

upstream backend {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080;
}

server {
    listen 80;

    location / {
        proxy_pass http://backend;
    }
}

常见策略:

  • 默认轮询
  • weight:加权轮询
  • ip_hash:客户端 IP 尽量固定打到同一后端
  • least_conn:优先给当前连接较少的后端

TLS / HTTPS 终止

典型模型:

Client --HTTPS--> Nginx --HTTP--> Backend

示例:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate     /etc/nginx/certs/example.crt;
    ssl_certificate_key /etc/nginx/certs/example.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

这样做的好处:

  • 证书集中管理
  • 后端不必直接处理 TLS
  • 统一 HTTPS 与安全策略

API 网关 / 统一入口

Nginx 经常作为服务集群的边缘入口:

用户请求

Nginx

认证 / 限流 / 路由 / 日志

各个后端服务

例如:

location /user/ {
    proxy_pass http://user_service;
}

location /order/ {
    proxy_pass http://order_service;
}

keepalive 与到后端的连接复用

高 QPS 反向代理场景里,这很重要:

upstream backend {
    server 127.0.0.1:8080;
    keepalive 32;
}

location / {
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass http://backend;
}

否则 Nginx 到后端的连接可能无法有效复用。

Nginx 和应用服务器的边界

典型分层:

用户

Nginx

业务服务:Java / Go / Node / Python / PHP-FPM

数据库 / 缓存 / MQ
  • Nginx 负责入口层流量治理。
  • 应用服务器负责业务逻辑。

Nginx、OpenResty 与 Ingress

  • OpenResty:基于 Nginx + LuaJIT,可把更多动态逻辑下沉到网关层。
  • Kubernetes Ingress Controller:很多实现本质上会把 Ingress 规则转成 Nginx 的 server / location / upstream 结构。
创建于 2026/5/7 更新于 2026/5/27