HTTPS 已经是网站上线的基础配置。无论是 WordPress 博客、企业官网、接口服务还是后台系统,都应该通过 SSL 证书启用 HTTPS,保护访问过程中的数据传输安全,也避免浏览器显示“不安全”提示。
Nginx 配置 HTTPS 并不只是把证书路径写进去,还涉及 80 到 443 强制跳转、证书链、TLS 协议版本、安全响应头、反向代理 HTTPS 识别等细节。本文整理一套从证书部署到常见问题排查的完整思路。
HTTPS 做什么
HTTPS 在 HTTP 基础上加入 TLS 加密,可以防止传输内容被窃听或篡改,也能证明用户访问的是对应域名的站点。
对登录、支付、后台管理、表单提交等场景来说,HTTPS 是基本要求。即使是普通内容站,也建议全站开启 HTTPS。
准备证书文件
Nginx 通常需要证书文件和私钥文件。常见文件名类似:
fullchain.pem
privkey.pem
fullchain.pem 通常包含站点证书和中间证书链,privkey.pem 是私钥。私钥文件必须妥善保护,不能公开泄露。

443 站点配置
基础 HTTPS server 块示例如下:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example;
index index.php index.html;
}
配置后先检查语法,再重载 Nginx。
nginx -t
systemctl reload nginx
HTTP 强制跳转 HTTPS
为了避免用户继续访问 HTTP,可以在 80 端口配置永久跳转。
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
这样用户访问 HTTP 时,会自动跳转到同路径的 HTTPS 地址。
证书链问题
如果只配置了站点证书,缺少中间证书链,部分浏览器或客户端可能提示证书不受信任。优先使用包含完整链的 fullchain 文件。
证书部署后,可以使用浏览器、在线 SSL 检测工具或命令行检查证书链是否完整。
TLS 协议版本
建议禁用过旧协议,只启用较新的 TLS 版本。
ssl_protocols TLSv1.2 TLSv1.3;
过旧的 TLS 版本存在安全风险。除非必须兼容非常老的客户端,否则不建议启用 TLSv1.0 和 TLSv1.1。
加密套件
现代 Nginx 和 OpenSSL 通常有比较合理的默认加密套件。需要自定义时,要确保兼容性和安全性平衡。
ssl_prefer_server_ciphers off;
不要从旧教程里复制过时的 cipher 配置。安全参数会随时间变化,应该参考当前系统和 Nginx 版本。
HSTS 响应头
HSTS 可以告诉浏览器以后强制使用 HTTPS 访问站点。
add_header Strict-Transport-Security "max-age=31536000" always;
开启 HSTS 前要确认 HTTPS 配置稳定,所有子域名和资源也能正常 HTTPS 访问。否则可能把用户锁在错误配置里。
安全响应头
除了 HSTS,还可以配置一些常见安全响应头。
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options SAMEORIGIN always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
这些响应头可以减少 MIME 嗅探、点击劫持和来源信息泄露等风险。具体策略要结合站点功能调整。
WordPress HTTPS 注意
WordPress 切换 HTTPS 后,要确认站点地址和资源链接都使用 HTTPS。如果数据库中仍有 HTTP 资源,前台可能出现混合内容警告。
后台“设置 – 常规”中的 WordPress 地址和站点地址应与实际 HTTPS 域名一致。反向代理场景还要正确传递 X-Forwarded-Proto。
反向代理 HTTPS
如果 Nginx 负责 HTTPS,后端应用运行在 HTTP,需要把原始协议传给后端。
proxy_set_header X-Forwarded-Proto $scheme;
否则后端可能以为当前访问是 HTTP,生成错误链接,甚至出现 HTTP/HTTPS 跳转循环。
证书自动续期
Let’s Encrypt 证书有效期较短,通常需要自动续期。可以检查续期任务是否存在,并定期验证。
certbot renew --dry-run
证书续期后,Nginx 需要重新加载才能使用新证书。很多工具会自动处理 reload。
常见错误:证书路径错误
如果 Nginx 启动或重载失败,先看错误信息是否提示证书文件不存在、权限不足或路径错误。
nginx -t
检查证书路径、文件权限、Nginx 用户是否能读取证书。
常见错误:混合内容
开启 HTTPS 后,如果页面里仍加载 HTTP 图片、CSS、JS,浏览器会提示混合内容。需要把资源地址改成 HTTPS,或使用相对协议/相对路径。
WordPress 站点可以通过数据库替换、插件或主题配置修正旧资源地址。
常见错误:跳转循环
跳转循环常见于代理层和后端都在做 HTTP 到 HTTPS 跳转,但后端没有正确识别原始协议。检查 X-Forwarded-Proto 和站点地址配置。
实践建议
Nginx 配置 HTTPS 时,建议使用完整证书链,启用 TLSv1.2 和 TLSv1.3,配置 80 到 443 跳转,谨慎开启 HSTS,并检查 WordPress 站点地址和混合内容。
HTTPS 配置完成后不要只看首页。要测试后台登录、文章页、静态资源、接口请求和移动端访问,确保全站都稳定可用。













暂无评论内容