目录
一、Nginx介绍
二、企业中 Nginx 的使用
三、Nginx 运维 / SRE 版知识点清单
一、Nginx介绍
Nginx(发音 “engine-x”)是一款高性能的开源 Web 服务器,也常用作反向代理、负载均衡和 HTTP 缓存。
作用
|
Web 服务器 |
直接对外提供静态文件(HTML、CSS、图片等) |
|
反向代理 |
把请求转发给后端(如 Node、Python、Java),对外只暴露 Nginx |
|
负载均衡 |
把流量分到多台后端服务器 |
|
SSL 终结 |
在入口处理 HTTPS,后端可走 HTTP |
优点
- 高并发、低资源占用:事件驱动、异步非阻塞,适合大量连接
- 配置简单:一个 nginx.conf 就能管站点、代理、限流等
- 稳定成熟:生产环境里非常普遍
典型架构
用户 → Nginx(80/443)→ 静态文件 → 或转发到后端应用(如 :3000、:8080)
核心概念
- server:一个虚拟主机(域名 / 端口)
- location:按 URL 路径匹配规则
- proxy_pass:反向代理到上游服务
- upstream:定义一组后端服务器(负载均衡用)
最小配置示例
server {
listen 80; # 监听的端口
server_name example.com; # 虚拟主机的名字
location / {
root /var/www/html;
index index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:3000/; # 反向代理
}
}
含义:根路径返回静态页面;/api/ 转发给本机 3000 端口的应用。
总结:Nginx 站在最前面,负责接流量、发静态、转后端、做负载和 HTTPS。
二、企业中 Nginx 的使用
企业里 Nginx 几乎总是放在流量入口,很少当“唯一应用服务器”。
一、用法
1. 统一入口 / 反向代理(最常见)
客户端
→ CDN / WAF(可选)
→ Nginx / Ingress(入口)
→ 后端服务(Java / Go / Node / 微服务)
典型职责:
- 对外只暴露 80/443
- 按域名、路径把请求转到不同服务
- 统一加 HTTPS、日志、限流、鉴权头
server {
listen 443 ssl;
server_name api.company.com;
location /user/ {
proxy_pass http://user-service;
}
location /order/ {
proxy_pass http://order-service;
}
}
2. 静态资源托管
官网、运营页、前端打包产物(dist/)由 Nginx 直接提供:
- HTML / JS / CSS / 图片 / 字体
- 开启 gzip/brotli、缓存头、try_files 支持 SPA
location / {
root /data/www/app;
try_files $uri $uri/ /index.html;
}
3. 负载均衡
后端多实例时,Nginx 做分发:
upstream app_backend {
least_conn;
server 10.0.1.11:8080 weight=3;
server 10.0.1.12:8080 weight=2;
server 10.0.1.13:8080 backup;
}
server {
location / {
proxy_pass http://app_backend;
}
}
常见算法:round-robin、least_conn、ip_hash(会话粘滞)。
4. HTTPS / 证书终结
企业标配:
- 证书挂在 Nginx(或网关)上
- 后端内网走 HTTP / mTLS
- 强制 HTTP→HTTPS、HSTS
5. 灰度 / 蓝绿 / 金丝雀
按 Header、Cookie、IP、百分比切流量:
# 简化示意:带灰度 cookie 的走新版本
if ($cookie_canary = "1") {
proxy_pass http://app_canary;
}
更复杂场景常配合 OpenResty、Ingress Controller、Service Mesh。
6. API 网关轻量能力
不是完整 API Gateway,但企业常让 Nginx 承担一部分:
- 路径改写、Header 注入
- IP 白名单 / 黑名单
- 基础鉴权(Basic Auth、JWT 校验多靠模块或上游)
- 限流限连
- 跨域 CORS
7. 与 Kubernetes 结合
- Ingress-Nginx / Nginx Ingress Controller
- 每个 Ingress 规则最终变成 Nginx 配置
- 负责集群南北向流量
8. 内网场景
- 管理后台入口
- 跳板式反向代理(内网系统统一域名)
- 文件下载 / 大文件加速(sendfile、断点续传)
9. 高可用部署形态
|
主备 + Keepalived |
VIP 漂移,单机房常见 |
|
多机 + L4(SLB/F5) |
云上很常见:SLB → 多台 Nginx |
|
容器化多副本 |
K8s Deployment + Service |
|
CDN 前置 |
静态/边缘缓存,源站仍是 Nginx |
二、知识体系
按优先级分层,从“能上线”到“能扛事”。
A. 基础必会
1. 进程与架构
- Master / Worker 模型
- Worker 数与 CPU 核数关系
- 事件驱动、非阻塞 I/O 为什么能扛高并发
- 配置热加载:nginx -t → nginx -s reload
2. 配置结构
main └─ events └─ http ├─ upstream ├─ map └─ server └─ location
要清楚:指令作用域(哪些写在 http,哪些只能在 server/location)。
3. server / location 匹配规则
- listen + server_name 如何选虚拟主机
- location 优先级:精确 = > 前缀 ^~ > 正则 ~/~* > 普通前缀
- root vs alias
- try_files(SPA、静态站必备)
4. 反向代理核心
proxy_pass
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout
proxy_send_timeout
proxy_read_timeout
proxy_buffering
client_max_body_size
理解:
- proxy_pass 末尾有无 / 对路径改写的影响
- 为什么后端拿到的 IP/协议可能不对(没传 X-Forwarded-*)
- 超时、缓冲、大文件上传失败怎么查
5. 静态与压缩缓存
- expires / Cache-Control
- gzip / brotli
- sendfile、tcp_nopush、tcp_nodelay
- 静态资源版本号与长期缓存策略
6. HTTPS
- 证书、私钥、中间证书链
- TLS 版本与 cipher(安全基线)
- HTTP/2、OCSP Stapling(进阶)
- 强制跳转与 HSTS 风险(配错会“锁死”域名)
7. 日志与排障
- access_log / error_log
- 自定义 log_format(加 request_id、上游耗时)
- 常见状态码:502/504(上游挂/超时)、413(上传过大)、499(客户端断开)
- nginx -T 查看最终生效配置
B. 企业生产进阶(中高级)
8. 负载均衡与健康检查
- upstream 权重、backup、down
- ip_hash / sticky(会话)
- 被动失败检测:max_fails、fail_timeout
- 主动健康检查(开源版弱,商业版/OpenResty/Ingress 更强)
9. 限流限连与防刷
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req zone=api_limit burst=20 nodelay;
limit_conn addr 20;
理解:
- rate、burst、nodelay 含义
- 按 IP / 用户 / API 维度限流
- 与 WAF、网关限流的分工
10. 安全加固
- 隐藏版本号 server_tokens off
- 方法限制(禁 TRACE 等)
- IP allow/deny
- 危险目录禁止访问(.git、备份文件)
- 请求头大小、URI 长度限制
- SSRF / 开放代理风险(错误 proxy_pass 变量)
- TLS 与安全响应头:X-Frame-Options、CSP 等(常在 Nginx 统一加)
11. 改写与路由
- rewrite、return
- map(强烈推荐,替代一堆 if)
- 为什么企业规范常写:尽量少用 if
12. 变量与内部机制
- $host / $http_host / $uri / $request_uri 区别
- $remote_addr vs 真实客户端 IP(real_ip 模块 + 可信代理)
- $upstream_addr、$upstream_status、$upstream_response_time
13. 性能调优方向
- worker_processes、worker_connections
- 文件描述符上限
- keepalive 到上游:keepalive in upstream + proxy_http_version 1.1
- 缓冲与临时文件(大响应、慢客户端)
- 连接耗尽、队列打满的表现
14. 配置工程化
企业不会手改一台机器的 conf,而是:
- 配置分片:conf.d/、sites-enabled/
- Ansible / Salt / 镜像构建注入配置
- CI 里跑 nginx -t
- 灰度发布配置、回滚
- 模板化(Helm values → Ingress / ConfigMap)
C. 架构关联知识(理解“Nginx 在系统中的位置”)
15. 和周边组件怎么分工
|
CDN |
全球缓存、抗攻击边缘 |
源站接入、动态反代 |
|
SLB/L4 |
四层转发、高可用 |
七层路由、TLS、改写 |
|
API Gateway |
鉴权、计费、协议转换 |
高性能反代、静态、TLS |
|
WAF |
规则防护、Bot |
基础限流/IP 控制 |
|
Service Mesh |
东西向、mTLS、重试 |
南北向入口 |
16. 微服务 / K8s 必懂
- Ingress 规则与注解(超时、正文大小、会话亲和)
- 服务发现变化时上游如何更新
- 就绪探针失败时流量摘除
- WebSocket / gRPC 反代要点(升级头、HTTP/2)
17. 可观测性
- 访问日志进 ELK / Loki
- 指标:QPS、延迟、5xx、上游耗时(Prometheus exporter)
- Trace:注入 / 传递 X-Request-ID
三、按角色看“要学多深”
|
前端 |
静态部署、try_files、缓存、gzip、HTTPS、CORS、代理到本地/测试环境 |
|
后端开发 |
反代头、超时、上传大小、WebSocket、路径改写、502/504 排查 |
|
运维 / SRE |
全套:HA、性能、安全、日志指标、配置发布、排障 |
|
架构师 |
入口分层、与 CDN/网关/Mesh 边界、多活与灰度流量策略 |
四、建议学习路径(可执行)
五、企业生产配置 Checklist
上线前至少确认:
总结
企业用 Nginx,本质是“流量入口与流量治理”:反代、TLS、静态、负载、限流、日志; 要掌握的核心,是配置模型 + 反代细节 + 匹配规则 + 超时/头/真实 IP + 安全限流 + 排障与高可用,而不是背一堆指令。
三、Nginx 运维 / SRE 版知识点清单
面向:日常接流量、排障、变更、保可用性。
SRE 视角下 Nginx 的定位:
每天真正在管的是:
核心不是“会写 conf”,而是:变更可控、故障可观测、回滚可快速。
场景 A:新站点 / 新域名上线
会做的事
- 加 server、证书、反代或静态目录
- 配 DNS / SLB 转发
- 灰度切流、观察 4xx/5xx
必会知识点
- listen / server_name 匹配(默认 server 陷阱)
- root vs alias、try_files(SPA)
- proxy_pass 路径拼接规则(末尾 /)
- 证书全链、SAN、到期监控
- HTTP→HTTPS、HSTS 启用节奏(先观察再强制)
- 上线前:nginx -t、reload、回滚文件准备
验收标准
- 主备/多实例配置一致
- 访问日志能区分新域名
- 证书监控已接入
- 回滚步骤可一键执行
场景 B:反代后端 API / 微服务
日常问题
- 502/504
- 上传失败 413
- 后端拿到错 IP / 错协议
- 登录态丢失、跨域异常
必会知识点:
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
proxy_connect_timeout 3s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
client_max_body_size 50m;
还要懂:
- 上游 keepalive(upstream { keepalive N; })
- buffering 开/关对大响应、TTFB 的影响
- WebSocket:Upgrade / Connection
- gRPC:grpc_pass、HTTP/2
- real_ip 模块:从 SLB/CDN 取真实客户端 IP(可信网段)
排障抓手
- $upstream_addr $upstream_status $upstream_response_time $request_time
- 区分:Nginx 慢 vs 上游慢 vs 客户端慢
场景 C:负载均衡与摘流
日常操作
- 扩容加节点、发布摘流、机器故障打 down
- 会话粘滞争议(要不要 ip_hash)
必会知识点
- upstream:weight / backup / down
- max_fails + fail_timeout(被动健康检查局限)
- 算法:轮询、least_conn、ip_hash
- 主动健康检查能力边界(开源 vs Plus / 外部探活)
- 发布期:先摘流再停服务,避免 502 尖刺
- 与注册中心/K8s endpoint 变更的时序
SRE 原则
- 摘流要可脚本化,禁止只改一台忘了集群
- 发布窗口看:5xx、上游耗时、饱和连接数
场景 D:静态资源 / 前端发布
日常操作
- 发 dist、回滚静态版本
- 缓存导致“发了但用户看不到”
必会知识点
- expires / Cache-Control / etag
- HTML 短缓存或不缓存,带 hash 的 JS/CSS 长缓存
- gzip/brotli、sendfile
- 原子发布:新目录 + 切换 symlink,避免半发布
- CDN 回源与源站缓存头一致性
场景 E:HTTPS / 证书生命周期
日常操作
- 申请/续期/替换证书
- 协议版本、弱加密治理
- 双证书(RSA + ECDSA)偶发
必会知识点
- 证书链不完整导致部分客户端失败
- ssl_certificate / ssl_certificate_key
- TLS1.2/1.3、cipher 套件基线
- OCSP Stapling
- 到期告警(30/14/7 天)
- 替换证书是否需要 reload、多机同步
事故高发点
- 只更了一台
- 中间证丢了
- HSTS 预加载后证书搞砸(恢复极痛)

