在 Cloudflare 中同时支持 HTTP 和 HTTPS 回源确实是一个挑战,因为 Cloudflare 的 SSL/TLS 加密模式只能设置一种,无法分别设置不同的加密模式来应对不同的回源需求。不过,有几种方法可以尝试解决这个问题。

方法一:使用 Cloudflare Workers

Cloudflare Workers 可以作为中间层,根据不同的域名来决定使用 HTTP 还是 HTTPS 进行回源。虽然 Workers 有访问次数的限制,但对于一些流量不大的场景来说,这可能是一个可行的解决方案。下面是一个简单的 Worker 脚本示例,用于根据域名决定回源方式:

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

async function handleRequest(request) {
  const url = new URL(request.url);
  let host = url.hostname;
  let origin;

  if (host === 'a.xx.com') {
    origin = 'http://a.xx.com';
  } else if (host === 'b.xx.com') {
    origin = 'https://b.xx.com';
  }

  const response = await fetch(new Request(origin + url.pathname + url.search));
  return response;
}

方法二:使用 Cloudflare Page Rules

虽然 Cloudflare 的 Origin Rules 不能直接控制回源协议,但你可以通过 Page Rules 来设置不同的回源协议。例如,你可以为不同的域名设置不同的缓存规则和回源协议,但这种方法可能需要结合其他工具或脚本来实现。

方法三:自定义回源服务器

如果上述方法都不适合你的场景,你可以考虑搭建一个自定义的回源服务器。这个服务器可以根据请求的域名来决定使用 HTTP 还是 HTTPS 进行回源,然后再将请求转发到 Cloudflare。这种方法需要一定的技术能力,但可以提供更高的灵活性。

总之,虽然 Cloudflare 本身不支持为不同域名设置不同的 SSL/TLS 加密模式,但通过 Workers、Page Rules 或自定义回源服务器等方法,你仍然可以实现同时支持 HTTP 和 HTTPS 回源的需求。

标签: none

评论已关闭