Nginx 配置从零到一:小白也能看懂的超详细部署指南
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. 添加官方源(非常重要,获得最新稳定版)sudoapt update &&sudoaptinstall -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \|sudotee /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"\|sudotee /etc/apt/sources.list.d/nginx.list echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n"\|sudotee /etc/apt/preferences.d/99nginx # 2. 安装sudoapt update sudoaptinstall nginx 方式二:CentOS / Rocky / AlmaLinux
sudo yum install -y yum-utils sudotee /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 EOFsudo 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:
sudoaptinstall 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 代理、日志切割、监控等)?
告诉我,我继续给你最实用的配置和解释。