Nginx配置HTTPS完整教程:SSL证书部署、强制跳转与安全参数

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 是私钥。私钥文件必须妥善保护,不能公开泄露。

Nginx配置HTTPS教程配图:SSL证书部署强制跳转与安全参数
Nginx HTTPS 配置要同时关注证书路径、强制跳转、TLS 版本和安全响应头。

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 配置完成后不要只看首页。要测试后台登录、文章页、静态资源、接口请求和移动端访问,确保全站都稳定可用。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容