1. 首页 > 技术教程 > 正文

SSL 安全合规:从免费申请到强制 HTTPS 跳转(SEO 必备)

SSL 安全合规:从免费申请到强制 HTTPS 跳转(SEO 必备)

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

SSL 安全合规:从免费申请到强制 HTTPS 跳转(SEO 必备)的图片

免费 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