使用worker控制cloudflare原始服务器

时间:2019-09-09 10:24:47

标签: cloudflare cloudflare-workers

我正在尝试使用cloudflare工作者根据请求的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
}

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

谢谢

1 个答案:

答案 0 :(得分:3)

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

// 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

(文档声称这是“仅企业版”功能,但这似乎是文档中的错误。任何人都可以使用此功能。我已提交了一张票以解决此问题...)