Nginx 配置从零到一:小白也能看懂的超详细部署指南
(2025–2026 最新实用版)
这是一篇真正面向零基础 / 刚接触 Nginx 的人写的完整指南。
目标:你按照步骤操作完,能独立把 Nginx 装好、配置好、跑起来,并且知道每一行配置在干什么。
第一步:先搞清楚 Nginx 到底是干什么的(5 分钟必看)
最通俗的比喻:
Nginx = 高性能的“门卫 + 快递中转站 + 保安队长”
它通常同时扮演以下几种角色:
| 实际用途 | 通俗解释 | 配置文件中对应模块 | 今天最常见的场景 |
|---|---|---|---|
| 静态资源服务器 | 把 html/css/js/图片 直接发给用户 | http {} → location / | 前端打包后的 dist 目录 |
| 反向代理 | 用户找我,我再去问真正的后端要东西 | proxy_pass | 把请求转发给 SpringBoot / Node / PHP |
| 负载均衡 | 来了 1000 个请求,我平均分给 5 台服务器 | upstream + proxy_pass | 多台后端服务器 |
| HTTPS / SSL 终结 | 把 https 解密后用 http 转给后端 | listen 443 ssl | 所有线上站点必须 |
| 缓存 | 相同的请求我先看有没有缓存,有就直接返回 | proxy_cache | 静态资源 + 接口缓存 |
| 限流 / 防刷 | 1 秒只许你请求 10 次,多了就 503 | limit_req | 防止接口被恶意刷爆 |
第二步:安装 Nginx(不同系统选一种)
方式一:最推荐(生产 & 学习都用)——用官方源安装(Ubuntu / Debian)
# 1. 添加官方源(非常重要,获得最新稳定版)
sudo apt update && sudo apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
# 2. 安装
sudo apt update
sudo apt install nginx
方式二:CentOS / Rocky / AlmaLinux
sudo yum install -y yum-utils
sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx-stable]
name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF sudo yum makecache sudo yum install nginx
方式三:Docker(最快上手测试)
docker run -d --name nginx-test \
-p 80:80 -p 443:443 \
-v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro \
-v $(pwd)/html:/usr/share/nginx/html:ro \
nginx:stable
第三步:Nginx 配置文件层级关系(背下来这张表)
nginx.conf # 主配置文件(全局)
├── events { ... } # 事件模型(基本不动)
├── http { # http 层(最重要)
│ ├── upstream xxx { } # 定义后端服务器组(负载均衡用)
│ ├── server { # 每一个 server 块 ≈ 一个站点 / 虚拟主机
│ │ ├── listen 80;
│ │ ├── server_name example.com www.example.com;
│ │ ├── location / { # 最核心,最常改的就是这里
│ │ │ ...
│ │ }
│ │ ├── location ~* \.(jpg|png|gif)$ { ... } # 正则匹配
│ │ └── ...
│ }
│ └── ...
}
第四步:最常用、最经典的几种配置模板(直接复制改)
模板 1:最简单静态网站(前端打包后直接用)
server {
listen 80;
server_name your-domain.com www.your-domain.com;
root /var/www/html/dist; # ← 改成你打包后的目录
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html; # SPA必备(Vue/React/Angular)
}
# 图片、css、js 等静态资源加缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
expires 30d;
access_log off;
}
# 禁止访问 .git .env 等敏感文件
location ~ /\. {
deny all;
}
}
模板 2:最常见的反向代理(转发给后端服务)
upstream backend {
server 127.0.0.1:8080; # Spring Boot / Node / Python 等
# server backend2.example.com:8080 weight=2; # 权重负载
# keepalive 32; # 连接复用(推荐)
}
server {
listen 80;
server_name api.your-domain.com;
location / {
proxy_pass http://backend;
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 5s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
}
模板 3:开启 HTTPS(Let’s Encrypt 免费证书)
先安装 certbot:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
证书自动配置后,server 块会变成:
server {
listen 443 ssl; # ← 必须加 ssl
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# 推荐的安全配置(2025 标准)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
...
}
同时自动创建 80 → 443 重定向。
第五步:常用运维命令(背下来)
# 重载配置(不中断服务,最常用)
sudo nginx -s reload
# 测试配置语法是否正确(超重要!)
sudo nginx -t
# 完整重启(会断开连接)
sudo systemctl restart nginx
# 查看当前所有配置(展开 include)
nginx -T
# 查看正在处理的连接
nginx -V # 查看编译参数
ss -lntp | grep nginx
第六步:新手最容易踩的 15 个坑(避坑指南)
- 忘了写
sudo nginx -t就重启 → 语法错导致服务起不来 - location / 后面加了 / → 路径匹配出问题
- upstream 写错 IP:端口 → 502 Bad Gateway
- 忘了加
proxy_set_header Host $host;→ 后端拿不到域名 - SPA 项目没写
try_files $uri /index.html;→ 刷新 404 - HTTPS 配置后仍走 http → 忘了写 80 的 return 301 https
- 证书过期没续期 → certbot renew –dry-run 测试
- 日志没开 access_log → 排查问题很痛苦
- 防火墙没开 80/443 → ufw allow 80,443
- upstream 里服务器挂了没剔除 → 加 health_check 或 max_fails
- 静态文件 404 → 检查 root 路径是否正确(pwd 确认)
- proxy_pass 最后加了 / → 路径被截断
- 大文件上传失败 → client_max_body_size 100m;
- 并发高 CPU 打满 → worker_processes auto; + worker_connections 65535;
- SELinux 导致权限问题 → setenforce 0(临时)或正确配置上下文
总结:新手进阶学习路径(建议顺序)
- 把上面三个模板都跑通(静态 + 代理 + https)
- 学会看 access.log / error.log
- 学会用 nginx -T 查看完整配置
- 掌握 location 匹配优先级(= > ^~ > ~* > ~ > 普通)
- 学会配置 gzip / brotli 压缩
- 学会配置缓存 proxy_cache
- 进阶:OpenResty + Lua 脚本、Nginx + Kubernetes Ingress
如果你按照步骤把 Nginx 装好 + 配置好三个模板,恭喜你——Nginx 已经从零入门到能上线用了。
有哪部分还想再细化(例如完整的 HTTPS + HSTS + OCSP Stapling、限流配置、WebSocket 代理、日志切割、监控等)?
告诉我,我继续给你最实用的配置和解释。