宝塔面板+Nginx配置HTTP强制跳转HTTPS:解决网站不安全提示、重定向循环问题(适配CDN)

宝塔面板+Nginx配置HTTP强制跳转HTTPS:解决网站不安全提示、重定向循环问题(适配CDN)

前言

部署网站安装SSL证书之后,很多站长都会遇到一个常见难题:明明已经上传并成功启用SSL证书,但是用户在浏览器输入不带https的http域名访问网站时,地址栏依旧显示"不安全"警告。部分场景下开启强制跳转之后,还会出现重定向过多、死循环跳转、CDN环境下跳转失效等棘手问题。

HTTP协议传输数据明文,存在被窃听、篡改的风险;HTTPS依靠SSL证书对传输内容加密,是现代网站的基础要求,同时也是搜索引擎收录、小程序对接、第三方API接口调用的硬性前提。本文结合宝塔面板,分别讲解可视化一键配置、Nginx自定义代码配置两种方案,同时梳理CDN环境、反向代理场景下的踩坑点。

一、前置准备工作

  1. 域名已经完成解析,服务器80、443端口在服务器安全组/防火墙放行;云服务器可参考https://act.tag.org.cn
  2. 网站SSL证书已经申请完成(宝塔Let's Encrypt免费证书、阿里云/腾讯云付费证书均可),并且在站点SSL页面成功部署;
  3. 如果网站接入CDN,需要在CDN控制台同步上传证书,CDN节点开启HTTPS,否则会出现跳转死循环。

重要提醒:如果使用CDN,不能只在源站宝塔配置跳转,源站直接强制跳转容易出现循环重定向,需要区分【CDN回源协议】。

二、方案一:宝塔面板可视化一键开启强制HTTPS(新手推荐)

  1. 登录宝塔面板后台,点击左侧菜单【网站】,找到目标站点,点击右侧【设置】按钮;
  2. 在弹出站点设置窗口,切换到【SSL】标签页;
  3. 在SSL配置区域往下滚动,找到强制HTTPS开关,点击开启;
  4. 保存配置,Nginx会自动重载配置。

开启之后,宝塔会自动生成Nginx配置,监听80端口的所有访问请求,301永久重定向跳转到HTTPS地址。

优点:操作简单,不需要手写代码;

缺点:高级自定义场景受限,接入CDN之后该功能可能失效。

三、方案二:Nginx自定义配置代码实现HTTP转HTTPS(高级场景)

进入站点设置,点击【配置文件】,找到listen 80;相关代码块,将下面完整server配置写入,放在配置文件最上方。

nginx 复制代码
server
{
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

代码说明:

  • listen 80;:监听http默认80端口;
  • server_name:填写你的域名,多个域名空格隔开;
  • return 301:301属于永久重定向,利于SEO,$host自动获取访问域名,$request_uri保留访问路径、GET参数,不会丢失页面地址。

如果想要临时测试,可把301改为302临时重定向;测试完成后务必换回301,避免搜索引擎收录异常。

写完代码点击【保存】,宝塔会自动重载Nginx配置。重载成功之后,访问http://域名会自动跳转到https://域名。

四、高频报错问题排查(重点)

问题1:重定向过多,无限跳转死循环

现象:浏览器提示"该网页重定向次数过多",网页打不开。

常见原因:

  1. 源站开启强制HTTPS,同时CDN节点回源协议使用HTTPS,CDN收到请求转发源站,源站继续跳转,形成循环;

    解决方案:CDN场景下,源站不要开启强制HTTPS,在CDN控制台配置HTTP跳转HTTPS,CDN节点层面完成跳转。

  2. Nginx配置重复,多处同时写了跳转规则;

    解决方案:打开站点配置文件,删除多处重复的return/rewrite跳转代码,只保留一处监听80端口的跳转server块。

问题2:开启跳转之后,部分静态资源报错混合内容Mixed Content

现象:网站HTTPS打开了,但是图片、JS、CSS样式加载失败,浏览器控制台提示混合内容。

原因:网页源码里面写死了http://开头的静态资源地址,页面是HTTPS协议,但是资源请求HTTP,浏览器安全策略拦截资源。

解决办法:

  1. 修改网站程序源码,把所有硬编码http资源链接改成https;
  2. 使用协议相对路径写法 //domain.com/static/xxx.jpg,自动适配当前访问协议。

问题3:手机/浏览器缓存,配置修改后不生效

现象:服务器配置已经保存,但是手机访问http依旧不跳转。

原因:浏览器缓存了旧的重定向状态。

排查:使用浏览器无痕模式访问测试;电脑端可清除浏览器缓存。

问题4:80端口被占用,配置保存报错

宝塔保存Nginx配置提示端口占用。

排查:在宝塔【网站】或者【安全】菜单查看,确认其他站点占用80端口,关闭多余站点或者修改冲突站点配置。

五、CDN环境适配注意事项

  1. 接入CDN场景,优先在CDN控制台设置HTTP跳转HTTPS,源站关闭强制跳转;
  2. CDN回源方式选择:CDN节点使用HTTPS访问源站时,源站不要开启http强制跳转;
  3. CDN证书必须和域名匹配,CDN不配置证书,仅源站配置证书会导致访问异常。

六、补充:HSTS安全头增强配置(可选)

在HTTPS对应的443端口server块内增加头部,浏览器第一次访问HTTPS成功之后,后续访问直接禁止HTTP请求,进一步杜绝http访问。

nginx 复制代码
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

HSTS一旦生效,浏览器会缓存很长时间,测试阶段不建议直接开启。

总结

普通个人站点、中小型网站,直接使用宝塔面板自带【强制HTTPS】开关,开箱即用;需要精细化控制、多域名、反向代理业务场景,手动添加Nginx 80端口server块配置。

遇到跳转异常优先判断网站是否接入CDN,CDN场景是跳转死循环最高发场景。部署完成,记得用无痕窗口测试,同时检查页面有没有http静态资源,解决混合内容警告,保证网站在浏览器地址栏展示安全锁标识。

相关推荐
szephyr11 天前
Docker + Compose 实战:把本地项目一键搬到云服务器,附完整配置
运维·docker·容器·部署·云服务器
Java小学生丶21 天前
[开源自荐] ZTShell,一个使用 Tauri 2 + Rust 全程由 AI 开发的跨平台桌面 SSH 工具
linux·网络·centos7·云服务器·开发技巧·资源分享·个人私货
風穆25 天前
云价比对,一屏定音
大数据·云服务器·oopsvps
風穆1 个月前
OopsVPS:多云 VPS 比价平台的十大核心优势
大数据·服务器·云服务器·oopsvps
Ivan CloudBay2 个月前
网站更新时为什么会进入维护模式?
运维·服务器·云服务器
Ivan CloudBay2 个月前
网站为什么会使用缓存?
服务器·网络·缓存·云服务器
sulikey2 个月前
服务器安装Docker教程。如何在云服务器安装Docker容器?
运维·服务器·ubuntu·docker·安装教程·云服务器
JokySue3 个月前
外名网深度评测:ICANN认证域名注册商,600多种域名后缀一站搞定
云计算·wordpress·云服务器·域名注册·无代码建站
facaixxx20243 个月前
雨云服务器区域选择终极指南:地域速度、节点带宽、延迟及防御说明
服务器·云服务器·雨云服务器·云服务器区域·云服务器地域·云服务器节点