Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
面向小白的由浅入深教程:5 分钟跑起来,30 分钟玩转常见场景,进一步掌握 HTTPS、缓存压缩、限流与排错思路。
目录
- [Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南](#Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南)
-
- [一、Nginx 是什么?](#一、Nginx 是什么?)
- 二、快速开始(本地最小可用)
- 三、核心配置结构速览
- 四、反向代理与动静分离
- 五、负载均衡(轮询/权重/健康检查)
- [六、HTTPS 与 HTTP/2](#六、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
:匹配路径并定义转发/静态规则
示例:
nginx
worker_processes auto;
http {
include mime.types;
sendfile on;
server {
listen 80;
server_name localhost;
# 静态托管
location / {
root html;
index index.html index.htm;
}
}
}
四、反向代理与动静分离
nginx
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
拼接路径。
五、负载均衡(轮询/权重/健康检查)
nginx
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
nginx
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)。
七、性能优化:缓存与压缩
nginx
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;
}
}
}
八、限流与安全基础
nginx
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);
- 限流是"限量供应",别让黄牛(恶意请求)把座位全占了。