网站启用 HTTPS 的完整操作:从申请证书到 Nginx 跳转验证
网站要上 HTTPS,核心动作就三步:拿到有效的 SSL 证书、在 Web 服务器上绑定域名和 443 端口、把 HTTP 请求跳转到 HTTPS。
下面以最常见的 Nginx 环境为例,给出从零操作到验证的完整路径;
如果你用的是宝塔面板,操作位置会单独说明。
动手之前先确认三件事
HTTPS 不是装个插件就能生效,先检查基础条件是否满足:
- 域名已经解析到服务器 IP:在本地终端执行
ping 你的域名,确认返回的是这台服务器的公网 IP。解析没生效时,证书申请和访问验证都会失败。 - 服务器 443 端口已放行:云服务器要在安全组里放行 TCP 443;系统内部如果开了 firewalld 或 ufw,也要放行 443。只改安全组不改系统防火墙,外部仍然连不上。
- Web 服务器正在运行:执行
nginx -v能看到版本号,systemctl status nginx显示 active。如果网站本身还没跑起来,先解决 80 端口访问问题再上 HTTPS。
证书来源有两种常见选择:云厂商提供的免费 DV 证书,或者 Let's Encrypt 通过 certbot 自动签发。
免费证书一般有效期较短,到期需要续签,建议在日历里留一个提醒。
申请证书并上传到服务器
在云厂商 SSL 证书控制台申请证书时,填写你要使用的域名,完成域名验证后下载 Nginx 格式的证书包。
解压后通常得到两个文件:域名.pem(证书链)和 域名.key(私钥)。
把这两个文件上传到服务器固定目录,例如:
mkdir -p /etc/nginx/ssl
# 将本地证书上传到该目录,保持文件名清晰
ls /etc/nginx/ssl
私钥文件权限建议收紧为仅 root 可读:
chmod 600 /etc/nginx/ssl/你的域名.key
如果用 certbot 自动签发,在 Nginx 已运行的前提下执行 certbot --nginx -d 你的域名,按提示选择自动跳转即可,证书路径会由工具写入配置。
在 Nginx 里配置 443 并强制跳转
找到当前站点的 server 配置块,通常在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/ 下。
保留原来的 80 端口 server 块用于跳转,再新增一个监听 443 的 server 块:
server {
listen 80;
server_name 你的域名;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name 你的域名;
ssl_certificate /etc/nginx/ssl/你的域名.pem;
ssl_certificate_key /etc/nginx/ssl/你的域名.key;
location / {
root /var/www/html;
index index.html index.php;
}
}
保存后先做配置检查,再平滑重载:
nginx -t
systemctl reload nginx
nginx -t 输出 syntax is ok 和 test is successful 才说明配置能被加载。
如果报错,按提示的行号检查证书路径、分号或括号是否遗漏。
使用宝塔面板时,路径是:网站 → 设置 → SSL → 粘贴证书和私钥 → 保存并强制 HTTPS。
面板会自动改写 Nginx 配置,适合不想手写配置的新手,但同样要确认安全组已放行 443。
常见报错与避坑点
配置过程中最容易卡在几个固定位置:
- 浏览器提示证书不受信任:多半是证书链不完整,只上传了域名证书而没带中间证书。重新下载完整链文件,或确认 pem 文件里包含多段证书。
- 访问超时或连接被拒绝:先查安全组和系统防火墙的 443 是否放行,再确认 Nginx 是否真的在监听:
ss -tlnp | grep 443。 - HTTP 跳转后打不开:检查 301 跳转的目标域名是否和证书域名完全一致,
www与非www被视为不同域名,证书不覆盖就会报警告。 - 改完配置网站 502:如果站点背后有 PHP 或后端服务,确认 upstream 地址和端口没被误改,必要时回滚到修改前的配置备份。
涉及修改 Nginx 配置前,建议先备份原文件:cp 站点.conf 站点.conf.bak,出问题时能快速恢复。
验证 HTTPS 是否真正生效
不要只看浏览器地址栏的小锁,用命令做一次客观检查:
curl -I https://你的域名
curl -I http://你的域名
第一条应返回 HTTP/2 200 或 HTTP/1.1 200,第二条应返回 301 并指向 https 地址。
还可以用 openssl s_client -connect 你的域名:443 -servername 你的域名 查看证书有效期和颁发者,确认没有过期。
最后在浏览器里分别访问 http:// 和 https:// 两个地址,确认前者自动跳到后者,页面资源(图片、CSS、JS)没有因为混合内容被拦截。
如果页面样式错乱,检查代码里是否还有写死的 http:// 资源地址,改成相对路径或 https 即可。
关于证书续签和长期维护
免费证书到期不会自动提醒到每个人,建议开启云厂商的到期通知,或在服务器上配置 certbot 的自动续签定时任务。
续签后同样执行 nginx -t 和 systemctl reload nginx,让新证书生效。
只要域名解析、443 放行和证书路径这三项不变,后续维护主要是关注到期时间。
网站上 HTTPS 本身不复杂,难的是把域名、端口、证书链和跳转四件事对齐。
按上面的顺序逐项检查,基本能覆盖新手遇到的大部分问题。