nginx作为服务网关的核心是反向代理,统一接收请求并按路径路由至后端服务,同时集成负载均衡、https终止、限流、健康检查及灰度发布等能力,轻量高效,适用于中小规模或首层入口场景。

用 Nginx 做服务网关的基础功能,核心是利用它的反向代理能力统一接收外部请求,再按规则分发到后端不同服务,同时叠加路由、负载均衡、限流、HTTPS 终止等关键能力。它不依赖复杂框架,轻量高效,适合中小规模或作为第一层入口网关。
配置反向代理实现服务路由
Nginx 通过 location 块匹配请求路径,把流量转发到对应后端服务。比如将 /api/user 转给用户服务,/api/order 转给订单服务:
upstream user_service {
server 192.168.1.10:8080;
}
upstream order_service {
server 192.168.1.11:8081;
}
server {
listen 80;
server_name api.example.com;
location /api/user/ {
proxy_pass http://user_service/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /api/order/ {
proxy_pass http://order_service/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
-
注意末尾斜杠:proxy_pass 后带
/会自动剥离匹配的前缀路径,避免路径重复(如不加可能导致请求变成/api/user/api/user/xxx) -
透传客户端信息:用
X-Real-IP和X-Forwarded-For让后端能获取真实 IP - 可结合
map指令实现更灵活的动态上游选择,比如按请求头或参数路由
启用简单负载均衡与健康检查
在 upstream 块中定义多个后端节点,Nginx 默认轮询(round-robin),也可选 least_conn 或基于权重的分配:
upstream user_service {
least_conn;
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 max_fails=3 fail_timeout=30s;
}
- max_fails 和 fail_timeout 构成被动健康检查:连续失败指定次数后,在超时时间内不再转发请求
- 商业版 Nginx Plus 支持主动健康检查(active health check),开源版需配合第三方模块(如 nginx_upstream_check_module)或外部探测脚本
- 可用
backup标记备用节点,仅当其他节点全不可用时启用
添加基础安全与访问控制
网关是第一道防线,Nginx 可快速落地几项关键防护:
-
HTTPS 终止:在 Nginx 层解密 TLS,后端走 HTTP,降低服务改造成本;配置
ssl_certificate和ssl_certificate_key即可 -
IP 白名单:用
allow/deny控制访问来源,例如只允许运维网段调用管理接口 -
请求限制:用
limit_req防暴力刷接口,例如限制单 IP 每秒最多 10 次/login请求 -
隐藏版本号:设置
server_tokens off;减少暴露 Nginx 版本信息
支持灰度发布与请求改写
通过判断请求头、Cookie 或参数,将部分流量导向新版本服务,实现灰度发布:
map $http_x_version $backend {
"v2" "user_service_v2";
default "user_service_v1";
}
upstream user_service_v1 { server 192.168.1.10:8080; }
upstream user_service_v2 { server 192.168.1.13:8080; }
location /api/user/ {
proxy_pass http://$backend/;
}
- 也可用
split_clients按 $remote_addr 哈希做百分比灰度 - 用
rewrite指令修改 URI 再转发,比如把/v1/users重写为/users适配后端老接口 - 用
proxy_set_header注入自定义头(如X-Request-ID),便于全链路追踪











