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 次,多了就 503limit_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 个坑(避坑指南)

  1. 忘了写 sudo nginx -t 就重启 → 语法错导致服务起不来
  2. location / 后面加了 / → 路径匹配出问题
  3. upstream 写错 IP:端口 → 502 Bad Gateway
  4. 忘了加 proxy_set_header Host $host; → 后端拿不到域名
  5. SPA 项目没写 try_files $uri /index.html; → 刷新 404
  6. HTTPS 配置后仍走 http → 忘了写 80 的 return 301 https
  7. 证书过期没续期 → certbot renew –dry-run 测试
  8. 日志没开 access_log → 排查问题很痛苦
  9. 防火墙没开 80/443 → ufw allow 80,443
  10. upstream 里服务器挂了没剔除 → 加 health_check 或 max_fails
  11. 静态文件 404 → 检查 root 路径是否正确(pwd 确认)
  12. proxy_pass 最后加了 / → 路径被截断
  13. 大文件上传失败 → client_max_body_size 100m;
  14. 并发高 CPU 打满 → worker_processes auto; + worker_connections 65535;
  15. SELinux 导致权限问题 → setenforce 0(临时)或正确配置上下文

总结:新手进阶学习路径(建议顺序)

  1. 把上面三个模板都跑通(静态 + 代理 + https)
  2. 学会看 access.log / error.log
  3. 学会用 nginx -T 查看完整配置
  4. 掌握 location 匹配优先级(= > ^~ > ~* > ~ > 普通)
  5. 学会配置 gzip / brotli 压缩
  6. 学会配置缓存 proxy_cache
  7. 进阶:OpenResty + Lua 脚本、Nginx + Kubernetes Ingress

如果你按照步骤把 Nginx 装好 + 配置好三个模板,恭喜你——Nginx 已经从零入门到能上线用了

有哪部分还想再细化(例如完整的 HTTPS + HSTS + OCSP Stapling、限流配置、WebSocket 代理、日志切割、监控等)?
告诉我,我继续给你最实用的配置和解释。

文章已创建 4026

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部