参考资料

  1. 什么是私有Bucket回源?
  2. CORS自适应跨域 设置教程
  3. OCSP Stapling配置详解
  4. 常见CDN启用防盗链的参数设置
  5. 添加X-Cache报头 设置教程
  6. EdgeOne 防盗刷实践教程配置
  7. 在CDN配置中启用鉴权功能
  8. HTML优化

自动跳转到HTTPS的详细技术解析

以下是关于「自动跳转到HTTPS」的详细技术解析,涵盖状态码选择、域名/IP处理、端口配置、域名过滤规则等核心要素:


一、核心目标

强制将HTTP请求(http://)重定向到HTTPS(https://),实现全站加密,提升安全性与SEO权重。


二、关键配置要素

1. 状态码选择

状态码类型适用场景示例
301永久重定向默认推荐,SEO友好网站正式启用HTTPS
302临时重定向测试阶段、临时维护A/B测试HTTPS效果
307临时重定向保持请求方法(POST等不丢失)API接口过渡期
308永久重定向301+307特性(保留方法且永久)严格合规场景

最佳实践:生产环境优先使用 301


2. 跳转后域名/IP处理

要素规则示例配置(Nginx)
域名强制使用统一主域名(避免www与非www分裂)server_name example.com www.example.com;
IP跳转禁止直接跳转到IP地址(违反SNI协议,证书不匹配)拒绝配置 https://192.168.1.1
协议HTTP → HTTPS 绝对跳转return 301 https://$host$request_uri;

3. 端口配置

场景配置要求解决方案
标准端口HTTP(80) → HTTPS(443)默认监听80/443端口
非标端口需显式指定端口号https://$host:8443$request_uri
避免端口硬编码使用变量$server_port动态处理https://$host:$server_port$request_uri?

4. 域名过滤规则

允许的域名

仅对特定域名启用跳转(防止恶意解析):

server {
    listen 80;
    server_name example.com www.example.com; # 白名单域名
    return 301 https://$host$request_uri;
}

# 屏蔽其他域名访问
server {
    listen 80 default_server;
    return 444; # 直接关闭连接
}
排除的域名

不跳转的场景(需谨慎配置):

# 案例1:排除测试环境
server {
    listen 80;
    server_name test.example.com;
    # 不跳转HTTPS,保持HTTP访问
    root /var/www/test;
}

# 案例2:排除健康检查路径
location = /health-check {
    access_log off;
    return 200 "OK"; # HTTP直接响应
}

三、高级场景配置

1. 避免重定向循环

触发条件
负载均衡器处理HTTPS → 服务器收到HTTP请求 → 错误跳转HTTPS

解决方案(信任代理头):

# 识别代理传递的真实协议
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

# 根据X-Forwarded-Proto判断
if ($http_x_forwarded_proto != "https") {
    return 301 https://$host$request_uri;
}

2. HSTS增强安全

在HTTPS响应头中强制浏览器仅使用HTTPS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

参数说明:

  • max-age:有效期(秒)

  • includeSubDomains:保护子域名

  • preload:申请加入浏览器预加载列表


四、完整配置示例(Nginx)

# HTTP → HTTPS 主跳转(含域名白名单)
server {
    listen 80;
    server_name example.com www.example.com;
    
    # 301永久跳转 + 保留原始请求路径
    return 301 https://$host$request_uri;
}

# 禁止其他域名访问
server {
    listen 80 default_server;
    return 444;
}

# HTTPS主服务
server {
    listen 443 ssl;
    server_name example.com www.example.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/privkey.pem;
    
    # 启用HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    
    # 其他业务配置...
    root /var/www/html;
    index index.html;
}

五、验证方法

  1. CURL测试

    curl -I http://example.com
    # 应返回 Location: https://example.com/ 和 301状态码
  2. 浏览器检查

    • 打开开发者工具 → Network选项卡

    • 访问 http:// 链接 → 确认第一个请求为 301 Moved Permanently

  3. SSL Labs测试
    https://www.ssllabs.com/ssltest/ 验证HSTS等配置


六、注意事项

  1. 证书覆盖范围:确保SSL证书包含所有跳转域名(主域名+www)

  2. CDN兼容性:若使用CDN,需在CDN控制台开启"强制跳转HTTPS"

  3. 灰度发布:大规模站点建议分批次开启301跳转

  4. 备份机制:保留HTTP备用入口(如旧设备兼容性需求)

通过精细控制跳转逻辑,可兼顾安全性、用户体验与系统兼容性。实际部署前务必在测试环境验证所有路径!