InfrawireInfrawire 标志文档

安装 Nginx 和 SSL 证书 (Certbot)

本指南将教您如何安装 Nginx、配置网站并使用 Certbot 获取免费的 SSL 证书,以通过 HTTPS 保护您的网站。

📋 前提条件

  • 具有 root 或 sudo 访问权限的 VPS 服务器
  • 指向您服务器 IP 的域名(例如:mysite.com
  • 防火墙中开放端口 80(HTTP)和 443(HTTPS)

💡 基础设施推荐

Nginx 和 Certbot 在我们的NVMe VPS上运行完美,它们为快速提供网站服务提供卓越的磁盘性能。NVMe 驱动器确保为您的访问者提供最佳响应时间。

🚀 步骤 1:安装 Nginx

更新软件包

Bash
sudo apt update

安装 Nginx

Bash
sudo apt install nginx -y

验证安装

Bash
1# 检查 Nginx 是否已安装 2nginx -v 3 4# 检查 Nginx 是否正在运行 5sudo systemctl status nginx

如果一切正常,您应该看到 active (running)

在防火墙中允许 Nginx (UFW)

Bash
1# 允许 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:配置您的网站

创建网站目录

Bash
1# 创建目录(将 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

添加以下简单内容:

HTML
1<!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

添加以下配置:

Nginx
1server { 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}

保存文件。

启用网站

Bash
1# 创建符号链接以启用网站 2sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/ 3 4# 测试 Nginx 配置 5sudo nginx -t

如果您看到 syntax is oktest is successful,说明配置正确!

删除默认网站(可选)

Bash
1# 删除默认网站 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 会问您几个问题:

  1. 电子邮件: 输入您的电子邮件地址(用于续期通知)
  2. 服务条款: 输入 A(同意)接受
  3. 共享电子邮件: 根据您的偏好选择 Y(是)或 N(否)
  4. 将 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 定时器来续期证书。检查它:

Bash
1# 检查定时器 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 是否正常工作

Bash
1# 服务状态 2sudo systemctl status nginx 3 4# 测试配置 5sudo nginx -t

验证 SSL 是否正常工作

Bash
1# 查看证书 2sudo certbot certificates 3 4# 检查过期日期 5sudo certbot certificates | grep "Expiry"

测试您的网站

  • 访问 https://您的域名.com
  • 检查浏览器中的绿色锁
  • 点击锁以查看证书详细信息

🛠️ 有用的命令

Nginx 管理

Bash
1# 启动 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 证书管理

Bash
1# 手动续期所有证书 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

查看日志

Bash
1# 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 无法启动

Bash
1# 检查配置错误 2sudo nginx -t 3 4# 查看错误日志 5sudo journalctl -u nginx -n 50

SSL 证书无法安装

问题: Certbot 无法验证您的域名。

解决方案:

  1. 验证您的域名是否指向服务器的 IP:

    Bash
    dig mysite.com
  2. 验证端口 80 和 443 是否已打开:

    Bash
    sudo ufw status
  3. 验证 Nginx 是否正在监听端口 80:

    Bash
    sudo netstat -tlnp | grep nginx
  4. 确保您的 Nginx 配置使用正确的 server_name

网站无法通过 HTTPS 加载

  1. 验证证书是否存在:

    Bash
    sudo certbot certificates
  2. 检查 Nginx 配置:

    Bash
    sudo nginx -t sudo cat /etc/nginx/sites-enabled/mysite.com
  3. 确保防火墙允许端口 443:

    Bash
    sudo ufw allow 443/tcp

502 Bad Gateway 错误

此错误表示 Nginx 无法与您的应用程序通信。

Bash
1# 检查 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 保护!🚀🔒