Nginx 部署实战:从安装到配置 HTTPS 完整指南

小飞兽 Linux 15 次阅读 2026-07-14

一、Nginx 是什么?

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器。它有两个主要用途:

    • 静态文件服务:直接托管 HTML/CSS/JS/图片等静态网站
    • 反向代理:把请求转发到后端的 PHP-FPM、Node.js、Python 等应用

    相比 Apache,Nginx 更轻量、并发能力更强,是生产环境首选。

    二、安装 Nginx

    sudo apt update && sudo apt install nginx

    安装完成后,Nginx 会自动启动。验证一下:

    sudo systemctl status nginx     # 应该显示 active (running)
    curl http://localhost             # 应该看到 Nginx 欢迎页

    三、部署第一个静态网站

    Step 1:创建网站目录

    sudo mkdir -p /var/www/mysite
    sudo chown -R $USER:$USER /var/www/mysite

    为什么要 chown? Nginx 默认以 www-data 用户运行,如果目录所有者不是它,可能出现权限不足的 403 错误。$USER 会自动替换成当前用户名。

    Step 2:编写 Nginx 配置文件

    sudo nano /etc/nginx/sites-available/mysite

    写入以下内容:

    server {
        listen 80;
        server_name example.com www.example.com;
        root /var/www/mysite;
        index index.html index.htm;
    

    location / {
    try_files $uri $uri/ =404;
    }

    # 禁止访问隐藏文件
    location ~ /\..* {
    return 404;
    }
    }


    逐行解释



    • listen 80:监听 HTTP 80 端口

    • server_name:匹配的域名,访问请求根据这个决定用哪个配置

    • root:网站文件的根目录路径

    • try_files $uri $uri/ =404:如果请求的文件不存在,试试目录索引,最后返回 404

    Step 3:启用站点

    sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
    sudo nginx -t           # 检查配置语法是否正确
    sudo systemctl reload nginx   # 重载配置(不断开现有连接)

    一定要先 nginx -t,语法错误会导致 reload 失败,严重时 Nginx 直接崩溃无法启动。

    Step 4:验证部署

    在本地电脑访问 http://服务器IP,应该能看到你的网站首页。如果看到 403 或 502,继续往下看故障排查。

    四、配置 HTTPS(Let's Encrypt 免费证书)

    安装 Certbot

    sudo apt install certbot python3-certbot-nginx

    申请证书并自动配置

    sudo certbot --nginx -d example.com -d www.example.com

    Certbot 会自动:

    1. 验证你对这个域名的控制权(通过 HTTP 验证)
  • 申请 Let's Encrypt 证书
  • 修改 Nginx 配置,启用 HTTPS(自动跳转 HTTP → HTTPS)
  • 配置证书自动续期(每月自动续,零维护)

手动续期测试

sudo certbot renew --dry-run      # 测试续期是否正常

五、反向代理配置(常见场景)

如果后端有 PHP-FPM 或 Node.js 应用,让 Nginx 转发请求:

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;   # 强制跳转 HTTPS
}

server {
listen 443 ssl;
server_name example.com;

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

location / {
proxy_pass http://127.0.0.1:3000; # 转发到后端服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

六、故障排查

403 Forbidden

    • 检查文件权限:ls -la /var/www/mysite/,确保 index 文件可读
    • 检查 Nginx 运行用户:grep user /etc/nginx/nginx.conf
    • 检查目录是否有 index 指令,或 URL 写错了

    502 Bad Gateway

    • 后端服务(PHP-FPM/Node.js)是否还在运行:ps aux | grep php
    • proxy_pass 地址和端口是否正确
    • 检查 socket 文件权限:ls -la /run/php/php*-fpm.sock

    502 且后端是 PHP-FPM socket 方式

    # 检查 socket 是否存在
    ls -la /run/php/php*-fpm.sock
    

    如果 socket 权限不足,修改 php-fpm 配置

    编辑 /etc/php/8.x/fpm/pool.d/www.conf

    找到 listen.mode = 0660 修改为 0666</code></pre>

    504 Gateway Timeout

    • 后端处理时间过长,增加超时时间:proxy_connect_timeout 60s;
  • 检查后端应用是否卡死或数据库连接超时