通过Cloudflare的workers部署反向代理代码
在cloudflare中创建一个workers,用Hello示例部署,并且编辑代码,将下面代码拷贝更新即可,并绑定一个自己的域名如:blog.
-----------------------------------------------------------------------
// 把你的博客域名改在这里
const BLOG_HOST = 'frankz1998.blogspot.com'
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
try {
const url = new URL(request.url)
// 构建目标URL:转发到你的Blogspot博客
let targetPath = url.pathname
if (url.search) {
targetPath += url.search
}
const targetUrl = `https://${BLOG_HOST}${targetPath}`
// 处理请求头
const headers = new Headers()
for (const [key, value] of request.headers.entries()) {
// 排除会干扰代理的头部
if (!['host', 'origin', 'referer', 'cf-connecting-ip', 'cf-visitor'].includes(key.toLowerCase())) {
headers.set(key, value)
}
}
// 设置Host头为你自己的Blogspot域名
headers.set('Host', BLOG_HOST)
headers.set('User-Agent', request.headers.get('user-agent') || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')
// 发送请求到Blogspot
const response = await fetch(targetUrl, {
method: request.method,
headers: headers,
body: ['GET', 'HEAD'].includes(request.method) ? null : request.body,
redirect: 'follow'
})
// 处理响应
const responseHeaders = new Headers(response.headers)
// 允许跨域
responseHeaders.set('Access-Control-Allow-Origin', '*')
responseHeaders.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
responseHeaders.set('Access-Control-Allow-Headers', '*')
// 修改Cookie的Domain和Path属性,使其在当前域名下生效
const setCookie = responseHeaders.get('set-cookie')
if (setCookie) {
responseHeaders.set('set-cookie', setCookie
.replace(/Domain=[^;]+/i, '')
.replace(/Path=\/[^\/]*/, 'Path=/')
)
}
// 替换响应中的URL引用,把blogspot域名替换为你的代理域名
let responseBody = await response.text()
responseBody = responseBody
.replace(new RegExp(`https?://${BLOG_HOST}`, 'g'), url.origin)
return new Response(responseBody, {
status: response.status,
statusText: response.statusText,
headers: responseHeaders
})
} catch (error) {
return new Response(JSON.stringify({
error: 'Proxy Error',
message: error.message
}), {
status: 502,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
}
})
}
}
评论
发表评论