Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
面向小白的由浅入深教程:5 分钟跑起来,30 分钟玩转常见场景,进一步掌握 HTTPS、缓存压缩、限流与排错思路。
目录
- Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
- 一、Nginx 是什么?
- 二、快速开始(本地最小可用)
- 三、核心配置结构速览
- 四、反向代理与动静分离
- 五、负载均衡(轮询/权重/健康检查)
- 六、HTTPS 与 HTTP/2
- 七、性能优化:缓存与压缩
- 八、限流与安全基础
- 九、日志与排错
- 十、实践清单(建议)
- 彩蛋:梗版总结(轻松读法)
一、Nginx 是什么?
- 一个高性能的 Web 服务器与反向代理,擅长并发连接与静态资源分发。
- 常用场景:静态托管、反向代理、负载均衡、SSL 终止、动静分离、网关限流与安全加固。
二、快速开始(本地最小可用)
- 安装(Windows/Mac/Linux 按官方文档或包管理器)。
- 启动与验证:
- 运行
nginx
(或brew services start nginx
) - 访问
http://localhost
看到欢迎页即成功。
- 运行
- 常见命令:
nginx -t
(测试配置)、nginx -s reload
(热加载)、nginx -v
(版本)。
三、核心配置结构速览
Nginx 的主配置通常位于 nginx.conf
,常见块:
events
:连接与并发参数http
:Web 相关配置(包含多个server
)server
:一个虚拟主机(域名/端口)location
:匹配路径并定义转发/静态规则
示例:
worker_processes auto;http {include mime.types;sendfile on;server {listen 80;server_name localhost;# 静态托管location / {root html;index index.html index.htm;}}
}
四、反向代理与动静分离
http {upstream app_pool {server 127.0.0.1:3000;}server {listen 80;server_name example.com;# 动态请求转发给后端location /api/ {proxy_pass http://app_pool/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 静态资源本地分发location /assets/ {alias /var/www/assets/;access_log off;expires 7d;}}
}
要点:
proxy_pass
目标要以/
结尾时会影响路径拼接方式;保持与location
一致更直观。alias
与root
区别:alias
替换整个匹配段,root
拼接路径。
五、负载均衡(轮询/权重/健康检查)
upstream app_pool {# 默认轮询server 10.0.0.11:3000 weight=2;server 10.0.0.12:3000 weight=1;# 可选:ip_hash; least_conn;(按需启用)
}server {listen 80;location / {proxy_pass http://app_pool;}
}
- 策略:默认轮询、
ip_hash
(会话亲和)、least_conn
(最少连接)。 - 健康检查:开源模块或在上游层面(如 Kubernetes/Consul)完成,更可靠。
六、HTTPS 与 HTTP/2
server {listen 443 ssl http2;server_name example.com;ssl_certificate /etc/nginx/ssl/fullchain.pem;ssl_certificate_key /etc/nginx/ssl/privkey.pem;add_header Strict-Transport-Security "max-age=31536000" always;location / {proxy_pass http://app_pool;}
}# 80 跳转到 443
server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}
要点:
- 使用可信证书;启用
http2
获取多路复用与头部压缩收益。 - 建议加 HSTS 与安全响应头;证书自动化可用 ACME(Let’s Encrypt)。
七、性能优化:缓存与压缩
http {# Gzip 压缩gzip on;gzip_types text/plain text/css application/javascript application/json image/svg+xml;gzip_min_length 1024;server {# 静态资源强缓存location /assets/ {alias /var/www/assets/;expires 30d;add_header Cache-Control "public, max-age=2592000, immutable";}# 反向代理缓存(示例)proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m use_temp_path=off;location /api/cacheable/ {proxy_cache mycache;proxy_cache_valid 200 10m;add_header X-Cache-Status $upstream_cache_status;proxy_pass http://app_pool;}}
}
八、限流与安全基础
http {# 基于 IP 的简单限流limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;server {location /api/ {limit_req zone=perip burst=20 nodelay;proxy_pass http://app_pool;}# 基础安全头add_header X-Content-Type-Options nosniff;add_header X-Frame-Options DENY;add_header Referrer-Policy no-referrer;}
}
九、日志与排错
- 测试配置:
nginx -t
;查看错误日志error.log
与访问日志access.log
。 - 常见问题:
- 502/504:后端不通或超时,检查上游健康与超时设置(
proxy_read_timeout
)。 - 路径拼接错:确认
location
与proxy_pass
尾部斜杠匹配。 - 权限问题:静态目录与证书文件的读权限。
- 502/504:后端不通或超时,检查上游健康与超时设置(
十、实践清单(建议)
- 搭建一个静态站点与一个后端服务,完成动静分离。
- 为
/api/
配置负载均衡与简单限流,验证高并发下表现。 - 启用 HTTPS/HTTP2 与 Gzip,观察带宽与 TTFB 改善。
- 打开代理缓存,给可缓存的 GET 接口加速。
彩蛋:梗版总结(轻松读法)
- 把 Nginx 当“前台小管家”:看门(监听端口)、带客(反向代理)、分座(负载均衡)、发扇子(压缩)、送冰阔落(缓存)。
location
像“区域导览牌”,别把alias
和root
搞反,不然客人迷路;proxy_pass
末尾斜杠像“门缝”,开大开小影响你鞋是不是被卡住(路径拼接);- 502/504 就像后厨断电或上菜太慢,先查电闸(上游)再看计时器(超时)。
- HTTPS 像给餐厅装玻璃门:看得见更安全,还更快(HTTP/2);
- 限流是“限量供应”,别让黄牛(恶意请求)把座位全占了。