在 Web 应用部署中,使用 Nginx 配置多个站点(使用不同域名,或相同域名不同二级域名)并启用 HTTPS 已是最佳实践之一。HTTPS 不仅提升了网站的安全性和信任度,也是搜索引擎排名的加分项。
本文将以 yourdomain.com
及其子域名 tgame.yourdomain.com
托管不同的静态网站为例,全面讲解如何在 CentOS 7 环境中通过 Nginx 和 Certbot 实现多站点部署和免费 HTTPS 证书自动化配置,适合新手站长和 DevOps 工程师参考。
🧾 一、环境准备
项目 | 描述 |
---|---|
操作系统 | CentOS 7或以上 |
Web 服务器 | Nginx |
HTTPS 证书来源 | Let’s Encrypt(通过 Certbot 获取) |
域名 | yourdomain.com 和 tgame.yourdomain.com |
必备条件 | 有效域名、DNS 已正确解析至服务器公网 IP |
🛠️ 二、安装必要组件
1. 安装 EPEL 和 Nginx
sudo yum install epel-release -y
sudo yum install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
2. 安装 Certbot 与 Nginx 插件
sudo yum install certbot python2-certbot-nginx -y
📁 三、创建网站根目录(可选步骤)
为了更好地管理多个站点内容,建议为每个域名分配独立的根目录:
sudo mkdir -p /var/www/yourdomain.com/html
sudo mkdir -p /var/www/tgame.yourdomain.com/html
sudo chown -R nginx:nginx /var/www
你可以将 index.html
或其他静态资源文件放入这些目录中
⚙️ 四、配置 Nginx 虚拟主机
1. 编辑主域名配置文件 /etc/nginx/conf.d/yourdomain.com.conf
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
2. 编辑子域名配置文件 /etc/nginx/conf.d/tgame.yourdomain.com.conf
server {
listen 80;
server_name tgame.yourdomain.com;
root /var/www/tgame.yourdomain.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
3. 检查并重新加载配置
sudo nginx -t
sudo systemctl reload nginx
🌐 五、配置 DNS 解析
登录你的域名管理平台(如阿里云、Cloudflare、GoDaddy),添加如下记录:
类型 | 主机记录 | 记录值(服务器公网 IP) |
---|---|---|
A | @ | 123.123.123.123 |
A | www | 123.123.123.123 |
A | tgame | 123.123.123.123 |
📌 提示:
- 可通过命令
dig tgame.yourdomain.com +short
或ping
检查解析是否成功。 - 使用 Cloudflare 时请关闭代理(即让图标变为灰色)或在其DNS配置上面A记录,以免影响 Let’s Encrypt 的验证。
🔐 六、获取并配置 HTTPS 证书
使用 Certbot 自动申请证书并更新 Nginx 配置:
单域名申请:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
sudo certbot --nginx -d tgame.yourdomain.com
多域名一次性申请(推荐):
sudo certbot --nginx \
-d yourdomain.com \
-d www.yourdomain.com \
-d tgame.yourdomain.com
Certbot 会自动为你:
- 验证域名所有权;
- 获取有效期为 90 天的 HTTPS 证书;
- 自动配置 Nginx 的 HTTPS 监听;
- 添加 HTTP → HTTPS 的 301 永久跳转。
👉 Certbot 会自动修改你的 .conf
文件,并添加 HTTPS 配置。
🔁 七、测试自动续期机制
Let’s Encrypt 的证书有效期为 90 天,Certbot 会自动添加 cron 或 systemd 定时任务。你可以手动验证续期功能是否正常:
sudo certbot renew --dry-run
📊 八、验证部署效果
使用浏览器访问以下地址:
如果页面可以正常加载并显示 HTTPS 绿锁图标,说明配置成功。
❗ 九、常见问题与解决方案
问题类型 | 可能原因 | 解决建议 |
---|---|---|
NXDOMAIN 错误 | 域名没有正确解析 | 检查 DNS 记录是否存在,等待解析生效 |
403 Forbidden | 目录无访问权限或 index.html 不存在 | 检查文件权限和是否存在默认页面 |
证书申请失败 | 端口 80/443 被防火墙或代理阻断 | 开放防火墙端口或关闭冲突服务 |
HTTPS 错误页面 | 浏览器缓存或未重载 Nginx | 清除缓存,检查 nginx -t 并重新加载配置 |
✅ 总结
通过本文的实战演示,你已经掌握了如何:
- 在 CentOS 7 上安装和配置 Nginx;
- 配置多个站点与对应的根目录;
- 利用 Let’s Encrypt 免费申请 HTTPS 证书;
- 配置自动续期机制,确保网站长期稳定运行。
这种架构方式对于博客、展示站点、小型业务服务都非常适用,并支持后续集成 CI/CD、反向代理、WebSocket 等更复杂功能。