SSL 安全合规:从免费申请到强制 HTTPS 跳转(SEO 必备)
你的网站还没上 HTTPS?别等了,Google 已经明确把 HTTPS 作为排名信号,浏览器地址栏里“不安全”三个字直接劝退访客。本文是主机选 Linux 教程的一部分,手把手教你从零申请免费 SSL 证书,再到配置 Nginx 强制 301 跳转 HTTPS,全程命令可复制,适合服务器运维和 VPS 运维实战场景。

免费 SSL 证书申请:Certbot 实战三步走
免费 SSL 证书首选 Let’s Encrypt,用 Certbot 客户端一键搞定。别问为什么不用付费的,个人站、中小企业站完全够用,有效期 90 天但支持自动续签。
第一步:安装 Certbot 和 Nginx 插件
不同发行版命令稍有差异,这里以 Ubuntu 20.04+ 和 CentOS 7+ 为例。先更新包管理器,再安装。
Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
CentOS/RHEL 7+
sudo yum install epel-release -y
sudo yum install certbot python-certbot-nginx -y
第二步:执行申请命令,自动配置 Nginx
确保你的域名已经解析到服务器 IP,并且 Nginx 已经监听 80 端口。Certbot 会自动验证域名所有权并修改 Nginx 配置。
sudo certbot –nginx -d example.com -d www.example.com
执行后会提示输入邮箱用于紧急续签通知,然后选择是否强制 HTTPS。建议选 2,直接重定向所有 HTTP 到 HTTPS。万一报错“Failed to connect to domain”,检查防火墙是否放行了 80 和 443 端口。
第三步:验证证书并查看到期时间
申请成功后,证书文件存储在 `/etc/letsencrypt/live/example.com/` 目录下。可以用 openssl 命令查看证书详情。
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -dates
输出类似:notBefore=Mar 20 00:00:00 2025 GMT notAfter=Jun 18 00:00:00 2025 GMT
强制 HTTPS 跳转:Nginx 配置详解
证书有了,但用户访问 `http://example.com` 时不会自动跳转。需要手动配置 301 永久重定向,这对 SEO 至关重要——避免重复内容惩罚,同时把权重集中到 HTTPS 版本。
手动配置 301 重定向(推荐)
如果你在 Certbot 申请时没选自动重定向,或者想自己控制跳转规则,直接编辑 Nginx 配置文件。
sudo vim /etc/nginx/sites-available/example.com
在 server 块中(监听 80 端口的那个),添加以下内容:
nginx
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
# 老鸟叮嘱:$server_name 会自动匹配 server_name 中第一个域名,确保别写死
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他配置,比如 root、index 等
}
保存后测试配置并重载 Nginx:
sudo nginx -t
如果输出 syntax is ok 和 test is successful,继续
sudo systemctl reload nginx
强制跳转后常见报错处理
• **无限重定向循环**:检查是不是在 HTTPS 的 server 块里也写了 return 301。HTTPS 端口下只处理正常请求,不写跳转。
• **证书链不完整**:某些老浏览器会报错。Certbot 生成的 fullchain.pem 已经包含中间证书,别自己拼接。如果手动配置过,确认用的是 fullchain.pem 而不是 cert.pem。
老鸟叮嘱:自动续签和防火墙陷阱
自动续签定时任务
Let’s Encrypt 证书 90 天过期,不续签等于白干。Certbot 安装时会自动添加 systemd 定时器,但建议手动检查一下。
sudo systemctl status certbot.timer
确保状态是 active (running)
如果没自动创建,手动添加 crontab:
sudo crontab -e
添加一行,每天凌晨 3 点检查续签
0 3 * * * /usr/bin/certbot renew –quiet && systemctl reload nginx
防火墙放行 443 端口
很多新手折腾半天发现 HTTPS 打不开,结果是防火墙没放行。别问为什么,照着做就行:
Ubuntu UFW
sudo ufw allow 443/tcp
sudo ufw reload
CentOS Firewalld
sudo firewall-cmd –permanent –add-port=443/tcp
sudo firewall-cmd –reload
万一还是连不上,检查云服务商的安全组策略,443 端口必须入方向放行。
FAQ:SSL 安全合规常见问题
1. SSL 证书申请后浏览器显示不安全怎么办?
检查证书链是否完整。用 `openssl s_client -connect example.com:443` 查看输出,看是否有“verify return:1”。如果报错“unable to verify”,说明中间证书缺失,重新用 Certbot 申请或手动补全。
2. 强制 HTTPS 跳转后百度收录会不会受影响?
不会。百度官方已明确支持 HTTPS,并且建议使用 301 跳转。只要在百度站长平台提交 HTTPS 站点地图,权重会平滑迁移。注意不要使用 302 临时跳转。
3. 免费 SSL 证书和付费证书有什么区别?
免费证书(Let’s Encrypt)仅验证域名所有权,适合个人站、企业展示站。付费证书支持 OV(组织验证)或 EV(扩展验证),会在证书中显示公司名称,适合电商、金融类网站。功能上,加密强度一样,区别在于信任度和验证级别。
4. 多个域名可以共用一张 SSL 证书吗?
可以。Let’s Encrypt 支持 SAN(主体备用名称)证书,申请时用 `-d domain1.com -d domain2.com` 即可。一张证书最多包含 100 个域名,但注意所有域名必须指向同一台服务器。
5. 强制 HTTPS 后网站加载变慢怎么办?
开启 HTTP/2 和 OCSP Stapling。在 Nginx 的 443 server 块中添加:
nginx
listen 443 ssl http2;
ssl_stapling on;
ssl_stapling_verify on;
HTTP/2 支持多路复用,能显著提升并发性能。OCSP Stapling 减少客户端验证证书时的延迟。
6. Linux 小白可以直接用 root 账号操作 Certbot 吗?
可以,但建议用 sudo。Certbot 需要修改 Nginx 配置文件,root 权限是必须的。但日常运维中尽量用普通用户 + sudo,避免误操作。万一不小心删了配置文件,至少还有备份。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9446.html 商家投稿邮箱:zhujixuanblog@qq.com
