Nginx 部署实战:从安装到配置 HTTPS 完整指南
一、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 会自动:
- 验证你对这个域名的控制权(通过 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 写错了 - 后端服务(PHP-FPM/Node.js)是否还在运行:
ps aux | grep php - proxy_pass 地址和端口是否正确
- 检查 socket 文件权限:
ls -la /run/php/php*-fpm.sock
502 Bad Gateway
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;
检查后端应用是否卡死或数据库连接超时