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