【问题标题】:Control cloudflare origin server using workers使用工作人员控制 cloudflare 源服务器
【发布时间】:2020-01-11 02:37:20
【问题描述】:

我正在尝试使用 cloudflare worker 根据请求的 IP 动态设置来源(因此我们可以在内部提供网站的测试版本)

我有这个

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

async function handleRequest(request) {
if (request.headers.get("cf-connecting-ip") == '185.X.X.X')
{
console.log('internal request change origin');
}

const response = await fetch(request)
console.log('Got response', response)
return response
}

我不确定要设置什么。请求对象似乎没有任何合适的参数可以更改。

谢谢

【问题讨论】:

    标签: cloudflare cloudflare-workers


    【解决方案1】:

    通常,您应该更改请求的 URL,如下所示:

    // Parse the URL.
    let url = new URL(request.url)
    
    // Change the hostname.
    url.hostname = "test-server.example.com"
    
    // Construct a new request with the new URL
    // and all other properties the same.
    request = new Request(url, request)
    

    请注意,这将影响源看到的Host 标头(它将是test-server.example.com)。有时人们希望Host 标头保持不变。 Cloudflare 提供了一个非标准的扩展来实现这一点:

    // Tell Cloudflare to connect to `test-server.example.com`
    // instead of the hostname specified in the URL.
    request = new Request(request,
        {cf: {resolveOverride: "test-server.example.com"}})
    

    请注意,要允许这样做,test-server.example.com 必须是您域中的主机名。但是,您当然可以将该主机配置为 CNAME。

    resolveOverride 功能在此处记录:https://developers.cloudflare.com/workers/reference/apis/request/#the-cf-object

    (文档声称它是“仅限企业”功能,但这似乎是文档中的错误。任何人都可以使用此功能。我已经提交了修复该问题的票...)

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 2020-04-03
      • 2013-03-14
      • 2015-09-02
      • 2014-01-15
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多