🌐 安装 Nginx 和 SSL 证书 (Certbot)
本指南将教您如何安装 Nginx、配置网站并使用 Certbot 获取免费的 SSL 证书,以通过 HTTPS 保护您的网站。
📋 前提条件
- 具有 root 或 sudo 访问权限的 VPS 服务器
- 指向您服务器 IP 的域名(例如:
mysite.com) - 防火墙中开放端口 80(HTTP)和 443(HTTPS)
💡 基础设施推荐
Nginx 和 Certbot 在我们的NVMe VPS上运行完美,它们为快速提供网站服务提供卓越的磁盘性能。NVMe 驱动器确保为您的访问者提供最佳响应时间。
🚀 步骤 1:安装 Nginx
更新软件包
sudo apt update
安装 Nginx
sudo apt install nginx -y
验证安装
# 检查 Nginx 是否已安装 nginx -v # 检查 Nginx 是否正在运行 sudo systemctl status nginx
如果一切正常,您应该看到 active (running)。
在防火墙中允许 Nginx (UFW)
# 允许 HTTP(端口 80) sudo ufw allow 'Nginx HTTP' # 允许 HTTPS(端口 443) sudo ufw allow 'Nginx HTTPS' # 检查规则 sudo ufw status
测试 Nginx
打开浏览器并访问:
http://您的服务器IP或http://您的域名.com
您应该看到默认的 Nginx 页面,确认安装成功!
📝 步骤 2:配置您的网站
创建网站目录
# 创建目录(将 mysite.com 替换为您的域名) sudo mkdir -p /var/www/mysite.com # 设置权限 sudo chown -R $USER:$USER /var/www/mysite.com sudo chmod -R 755 /var/www/mysite.com
创建简单的 HTML 页面
# 创建索引页面 nano /var/www/mysite.com/index.html
添加以下简单内容:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>我的网站</title> </head> <body> <h1>欢迎来到我的网站!</h1> <p>您的网站正在使用 Nginx 正常运行。</p> </body> </html>
使用 Ctrl + X,然后 Y,最后 Enter 保存。
创建 Nginx 配置
# 创建配置文件 sudo nano /etc/nginx/sites-available/mysite.com
添加以下配置:
server { listen 80; listen [::]:80; server_name mysite.com www.mysite.com; root /var/www/mysite.com; index index.html; location / { try_files $uri $uri/ =404; } }
保存文件。
启用网站
# 创建符号链接以启用网站 sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/ # 测试 Nginx 配置 sudo nginx -t
如果您看到 syntax is ok 和 test is successful,说明配置正确!
删除默认网站(可选)
# 删除默认网站 sudo rm /etc/nginx/sites-enabled/default # 重新加载 Nginx sudo systemctl reload nginx
测试您的网站
打开浏览器并访问 http://您的域名.com。您应该看到您的 HTML 页面!
🔒 步骤 3:安装 Certbot 并获取 SSL 证书
Certbot 是一个工具,可以自动从 Let's Encrypt 获取免费的 SSL 证书。
安装 Certbot
# 安装 Certbot 和 Nginx 插件 sudo apt install certbot python3-certbot-nginx -y
获取 SSL 证书
# 为您的域名获取 SSL 证书 sudo certbot --nginx -d mysite.com -d www.mysite.com
Certbot 会问您几个问题:
- 电子邮件: 输入您的电子邮件地址(用于续期通知)
- 服务条款: 输入
A(同意)接受 - 共享电子邮件: 根据您的偏好选择
Y(是)或N(否) - 将 HTTP 重定向到 HTTPS: 选择
2(推荐自动重定向)
验证证书
# 检查证书是否已创建 sudo certbot certificates
您应该看到列出的证书及其过期日期。
测试您的 HTTPS 网站
打开浏览器并访问 https://您的域名.com。
您应该看到:
- 地址栏中的绿色锁图标 🔒
- 通过 HTTPS 加载的网站(安全)
恭喜!您的网站现在已使用 SSL 保护!
🔄 步骤 4:自动证书续期
Let's Encrypt 证书在 90 天后过期。Certbot 可以自动续期。
测试自动续期
# 测试自动续期 sudo certbot renew --dry-run
如果您看到 The dry run was successful,说明自动续期正常工作!
检查续期服务
Certbot 会自动创建一个 systemd 定时器来续期证书。检查它:
# 检查定时器 sudo systemctl status certbot.timer # 如果定时器未激活,启用它 sudo systemctl enable certbot.timer sudo systemctl start certbot.timer
证书将在过期前自动续期。
📁 文件结构
以下是重要文件的位置:
/var/www/mysite.com/ # 您的网站文件
/etc/nginx/ # Nginx 配置
/etc/nginx/sites-available/ # 可用网站
/etc/nginx/sites-enabled/ # 活动网站
/etc/letsencrypt/ # SSL 证书
✅ 最终验证
验证 Nginx 是否正常工作
# 服务状态 sudo systemctl status nginx # 测试配置 sudo nginx -t
验证 SSL 是否正常工作
# 查看证书 sudo certbot certificates # 检查过期日期 sudo certbot certificates | grep "Expiry"
测试您的网站
- 访问
https://您的域名.com - 检查浏览器中的绿色锁
- 点击锁以查看证书详细信息
🛠️ 有用的命令
Nginx 管理
# 启动 Nginx sudo systemctl start nginx # 停止 Nginx sudo systemctl stop nginx # 重启 Nginx sudo systemctl restart nginx # 重新加载 Nginx(不中断服务) sudo systemctl reload nginx # 测试配置 sudo nginx -t
SSL 证书管理
# 手动续期所有证书 sudo certbot renew # 续期特定证书 sudo certbot renew --cert-name mysite.com # 查看所有证书 sudo certbot certificates # 删除证书 sudo certbot delete --cert-name mysite.com
查看日志
# Nginx 日志 sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/nginx/access.log # Certbot 日志 sudo tail -f /var/log/letsencrypt/letsencrypt.log
🆘 故障排除
Nginx 无法启动
# 检查配置错误 sudo nginx -t # 查看错误日志 sudo journalctl -u nginx -n 50
SSL 证书无法安装
问题: Certbot 无法验证您的域名。
解决方案:
-
验证您的域名是否指向服务器的 IP:
dig mysite.com -
验证端口 80 和 443 是否已打开:
sudo ufw status -
验证 Nginx 是否正在监听端口 80:
sudo netstat -tlnp | grep nginx -
确保您的 Nginx 配置使用正确的
server_name
网站无法通过 HTTPS 加载
-
验证证书是否存在:
sudo certbot certificates -
检查 Nginx 配置:
sudo nginx -t sudo cat /etc/nginx/sites-enabled/mysite.com -
确保防火墙允许端口 443:
sudo ufw allow 443/tcp
502 Bad Gateway 错误
此错误表示 Nginx 无法与您的应用程序通信。
# 检查 Nginx 日志 sudo tail -f /var/log/nginx/error.log # 验证您的应用程序是否正在运行 sudo systemctl status your-application
📚 其他资源
❓ 常见问题
问:我需要为 SSL 证书付费吗?
答:不需要!Certbot 使用 Let's Encrypt,它提供免费的 SSL 证书。
问:我的证书会过期吗?
答:会的,90 天后过期,但 Certbot 会自动续期。
问:我可以在同一台服务器上拥有多个网站吗?
答:可以!在 /etc/nginx/sites-available/ 中为每个网站创建配置文件。
问:如何添加子域名?
答:创建新的 Nginx 配置并使用 sudo certbot --nginx -d subdomain.mysite.com 获取证书。
问:如果我忘记续期证书怎么办?
答:Certbot 会自动续期。您也可以手动运行 sudo certbot renew。
您的网站现在已使用 HTTPS 保护!🚀🔒