基于CloudFlare Workers的七牛云HTTPS代理方案

一、方案背景与核心价值

1.1 问题场景

七牛云存储作为国内主流对象存储服务,其HTTP直连访问存在两大痛点:

  • SSL证书成本:自定义域名HTTPS服务需单独购买证书
  • 混合内容风险:主站HTTPS页面加载HTTP资源触发安全警告

1.2 技术选型

通过CloudFlare Workers实现四大核心能力:

  • 协议转换层:将用户HTTPS请求转换为对七牛HTTP源站的请求
  • 动态内容改写:实时替换响应中的HTTP资源链接
  • 全局缓存加速:利用全球CDN节点提升访问速度
  • 零运维成本:无需维护服务器基础设施

二、原理说明

Cloudflare Worker 是一个无服务器计算平台,通过拦截请求并修改响应实现代理。核心思路是:

将用户 HTTPS 请求转发到原始 HTTP 站点。 修改响应头,强制 HTTPS 协议并修复混合内容问题。

三、操作步骤

1. 创建 Cloudflare Worker

  • 登录 Cloudflare 控制台 → Workers & Pages → 创建新 Worker。
  • 进入代码编辑界面。

2. 编写代理脚本

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request)); 
});

async function handleRequest(request) {
  // 替换为你的 HTTP 源站地址 
  const originUrl = 'http://your-http-site.com'; 
  const url = new URL(request.url); 
  
  // 构建指向 HTTP 源站的新请求 
  const newRequest = new Request(originUrl + url.pathname  + url.search,  {
    headers: request.headers, 
    method: request.method, 
    body: request.body  
  });

  // 发送请求并获取响应 
  const response = await fetch(newRequest);
  
  // 修改响应头强制 HTTPS 
  const modifiedHeaders = new Headers(response.headers); 
  modifiedHeaders.set('Content-Security-Policy',  "upgrade-insecure-requests");
  modifiedHeaders.delete('Content-Security-Policy-Report-Only'); 

  // 返回处理后的响应 
  return new Response(response.body,  {
    status: response.status, 
    headers: modifiedHeaders 
  });
}

3. 部署并配置路由

  1. 点击 Deploy 部署 Worker。
  2. 在 Worker 设置中绑定自定义域名(如 https://proxy.your-domain.com )。

4. 调整 SSL/TLS 模式

  1. 进入 Cloudflare 域名控制台 → SSL/TLS → 概述。
  2. 选择 Flexible 模式(允许 Cloudflare 通过 HTTPS 连接用户,但到源站使用 HTTP)。

版权声明: (https://blog.thinkmoon.cn/post/985_cloudflaressl)本文首发于指尖魔法屋-使用CloudFlare反向代理七牛云存储实现SSL自由转载或引用必须申明原指尖魔法屋来源及源地址!