Nginx 反向代理、负载均衡与网关入口
从反向代理到 upstream、TLS 终止和 API 网关,理解 Nginx 为什么常被放在系统最前面。
#type / synthesis
#status / growing
#tech / ops
#resource / nginx
[!info] related notes
- 所属 MOC: Nginx MOC
- 前置概念: 正向代理与反向代理
- 相关规则: Nginx 中的 location、root、alias 与 proxy_pass
- 相关工具: Nginx-Proxy-Management的基本原理
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结构。