使用 worker 控制 cloudflare 源服务器
Control cloudflare origin server using workers
我正在尝试使用 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
}
我不确定要设置什么。请求对象似乎没有任何适合更改的参数。
谢谢
通常,您应该更改请求的 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
header(它将是 test-server.example.com
)。有时人们希望 Host
header 保持不变。 Cloudflare 提供了一个 non-standard 扩展来实现这一点:
// 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
(文档声称这是一个 "Enterprise only" 功能,但这似乎是文档中的一个错误。任何人都可以使用此功能。我已经提交了一张票来解决这个问题...)
我正在尝试使用 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
}
我不确定要设置什么。请求对象似乎没有任何适合更改的参数。
谢谢
通常,您应该更改请求的 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
header(它将是 test-server.example.com
)。有时人们希望 Host
header 保持不变。 Cloudflare 提供了一个 non-standard 扩展来实现这一点:
// 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
(文档声称这是一个 "Enterprise only" 功能,但这似乎是文档中的一个错误。任何人都可以使用此功能。我已经提交了一张票来解决这个问题...)