前言:
为了提升网站的安全性和搜索引擎友好度,给网站部署 HTTPS 是必不可少的一环。本文将详细记录如何在 CentOS 环境下,使用 Nginx 部署 HTTPS,并通过 acme.sh 脚本实现 Let's Encrypt 免费证书的申请与全自动续签。
环境与路径约定(以本站为例):
- 主域名:ynsstudy.cn (包含 www.ynsstudy.cn)
- Nginx 安装目录:/usr/local/nginxvue
- 前端静态文件目录:/var/www/vue_dist
一、 Nginx 配置 HTTP 自动跳转 HTTPS
在正式安装证书前,我们需要修改 Nginx 配置文件,将用户的 HTTP 访问请求自动重定向到 HTTPS,并为 HTTPS 服务预留好代码块和证书路径。
打开你的 nginx.conf,参考以下结构进行配置:
# 1. HTTP 自动跳转 HTTPS (监听 80 端口)server {
listen80;
server_name ynsstudy.cn www.ynsstudy.cn;
# 301 永久重定向到 httpsreturn301 https://$host$request_uri;
}
# 2. HTTPS 核心业务服务 (监听 443 端口)server {
listen443 ssl;
server_name ynsstudy.cn www.ynsstudy.cn;
# 证书绝对路径配置(稍后自动化脚本会将证书安装到这里)ssl_certificate /usr/local/nginxvue/ynsstudy.cn_bundle.crt;
ssl_certificate_key /usr/local/nginxvue/ynsstudy.cn.key;
# SSL 优化配置ssl_session_timeout5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_cipherson;
# ========== 业务代理逻辑 ==========root /var/www/vue_dist;
index index.html;
# 前端 Vue SPA 路由兜底location / {
try_files $uri $uri/ /index.html;
}
# 后端 API 反向代理示例(请根据实际后端地址修改)location /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}配置完成后,使用命令 /usr/local/nginxvue/sbin/nginx -t 测试语法是否正确。
二、 安装 acme.sh 自动化脚本 (国内服务器优化)
由于国内服务器直接访问 GitHub 可能存在网络超时问题,我们推荐使用 Gitee 镜像仓库来安装 acme.sh 工具。
# 1. 安装基础工具 git(如已安装可跳过)
yum install -y git
# 2. 克隆国内镜像仓库
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
# 3. 执行安装(请将邮箱替换为你的真实邮箱,用于接收证书过期提醒)
./acme.sh --install -m your-email@example.com
# 4. 刷新环境变量让 acme.sh 命令全局生效
source ~/.bashrc安装完成后,我们将默认的证书颁发机构从 ZeroSSL 切换为国内网络环境更稳定的 Let's Encrypt:
acme.sh --set-default-ca --server letsencrypt三、 申请并验证 SSL 证书
因为 Nginx 已经在运行,我们直接使用 Webroot 模式(通过本地网站的静态根目录)让 Let's Encrypt 完成域名的所有权验证。
执行以下申请命令:
acme.sh --issue -d ynsstudy.cn -d www.ynsstudy.cn -w /var/www/vue_dist注:执行后耐心等待十几秒,当控制台输出绿色的 Cert success 时,即代表证书申请成功。
四、 将证书安装到 Nginx 并配置自动续签
申请成功后,千万不要直接复制 ~/.acme.sh/ 目录下的证书文件。我们需要使用 --install-cert 命令,让脚本把证书提取并覆盖到我们在 Nginx 中配置的指定路径,并绑定自动重启 Nginx 的动作。
复制执行以下完整命令:
acme.sh --install-cert -d ynsstudy.cn \
--key-file /usr/local/nginxvue/ynsstudy.cn.key \
--fullchain-file /usr/local/nginxvue/ynsstudy.cn_bundle.crt \
--reloadcmd "/usr/local/nginxvue/sbin/nginx -s reload"看到控制台输出 Reload successful 时,说明一切大功告成!
自动续签原理说明
acme.sh 此时已经在你的 Linux 系统中悄悄写入了一个 Cron 定时任务。系统每天会自动检查证书有效期,当证书剩余时间不足 30 天时,脚本会自动向 Let's Encrypt 重新申请,覆盖 /usr/local/nginxvue/ 下的旧证书文件,并自动执行 Nginx 的重载命令。全程零人工干预,一劳永逸。
排错小贴士:
如果在配置完成后,浏览器访问网站仍然显示旧的证书机构(如 TrustAsia)或显示“不安全”,通常是浏览器缓存或 Nginx 旧进程未完全释放导致。请尝试:
- 使用浏览器的无痕/隐私模式重新访问。
- 在服务器上硬重启 Nginx:
/usr/local/nginxvue/sbin/nginx -s stop
/usr/local/nginxvue/sbin/nginx