使用cloudflare workers反代github
如果你懒
我做了一个镜像站,自取不谢。
如果你吃饱了撑着
就跟我一起做。
打开 cloudflare
菜单下拉点击 Workers 和 Pages(如果你是简体中文的话),
我这里已经创建过一个了,点击 创建。
没创建过就是这样子,点击 创建 Worker。
这里不用管直接点击 部署。我懒得在建一个直接看建过的也一样。
点击 编辑代码。进去等代码加载好。
把代码改成这个样子:
const upstream = 'github.com'
const upstream_path = '/'
const upstream_mobile = 'github.com'
const blocked_region = ['KP', 'SY', 'PK', 'CU']
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']
const https = true
const replace_dict = {'$upstream': '$custom_domain', '//github.com': ''}
addEventListener('fetch', event => {
event.respondWith(fetchAndApply(event.request))
})
async function fetchAndApply(request) {
const region = request.headers.get('cf-ipcountry').toUpperCase()
const ip_address = request.headers.get('cf-connecting-ip')
const user_agent = request.headers.get('user-agent')
let response = null
let url = new URL(request.url)
let url_hostname = url.hostname
if (https == true) {
url.protocol = 'https:'
} else {
url.protocol = 'http:'
}
if (await device_status(user_agent)) {
var upstream_domain = upstream
} else {
var upstream_domain = upstream_mobile
}
url.host = upstream_domain
if (url.pathname == '/') {
url.pathname = upstream_path
} else {
url.pathname = upstream_path + url.pathname
}
if (blocked_region.includes(region)) {
response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
status: 403
})
} else if (blocked_ip_address.includes(ip_address)) {
response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
status: 403
})
} else {
let method = request.method
let request_headers = request.headers
let new_request_headers = new Headers(request_headers)
new_request_headers.set('Host', url.hostname)
new_request_headers.set('Referer', url.hostname)
let original_response = await fetch(url.href, {
method: method,
headers: new_request_headers
})
let original_response_clone = original_response.clone()
let original_text = null
let response_headers = original_response.headers
let new_response_headers = new Headers(response_headers)
let status = original_response.status
new_response_headers.set('access-control-allow-origin', '*')
new_response_headers.set('access-control-allow-credentials', true)
new_response_headers.delete('content-security-policy')
new_response_headers.delete('content-security-policy-report-only')
new_response_headers.delete('clear-site-data')
const content_type = new_response_headers.get('content-type')
if (content_type.includes('text/html') && content_type.includes('UTF-8')) {
original_text = await replace_response_text(original_response_clone, upstream_domain, url_hostname)
} else {
original_text = original_response_clone.body
}
response = new Response(original_text, {
status,
headers: new_response_headers
})
}
return response
}
async function replace_response_text(response, upstream_domain, host_name) {
let text = await response.text()
var i, j
for (i in replace_dict) {
j = replace_dict[i]
if (i == '$upstream') {
i = upstream_domain
} else if (i == '$custom_domain') {
i = host_name
}
if (j == '$upstream') {
j = upstream_domain
} else if (j == '$custom_domain') {
j = host_name
}
let re = new RegExp(i, 'g')
text = text.replace(re, j)
}
return text
}
async function device_status(user_agent_info) {
var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]
var flag = true
for (var v = 0; v < agents.length; v++) {
if (user_agent_info.indexOf(agents[v]) > 0) {
flag = false
break
}
}
return flag
}
点击 部署 即可。然后你就会发现这些链接都打不开。
你可以自定义一个域名,前提是你有域名,我推荐去 register.us.kg,免费注册域名。
域名注册
首先你得注册一个账号吧。

我这里排版有点乱不过没关系。这些个人信息你可以去这个网站生成一个。
像我就是这样

把这些信息像我这样填进去。邮箱用自己的,填完不要丢,这些名字、电话号码、街道什么的还要用。

这边邮箱填错了,后来我改回自己的邮箱了。
注意街道需要有两个英文逗号,电话号码去掉 - 加上前缀 +1-。
这边人机验证后注册,去收邮件,登录。

这里点击选择框,选择最下面的。

点击 Proceed to Default Server (Click me to redirect KYC Page)。

注册原因填 setup a website 做一个网站。下面一个空填 work ID。
还记得我让你记住身份吗?随便去一个比如说洛谷云剪贴板,总之就是可以打字并且背景是白色的地方。

像我这样截图,上传,点击 submit。
回到主站,你就会发现登录好了。
点击左侧菜单栏的 Domain Registration,输入你想要的域名,点击 check,如果没有被人注册,就是这个样子。

前往 dash.cloudflare.com。点击右上角的 添加站点。把域名输入进去。

计划选择免费,因为我没钱,DNS 记录先不用管,一路继续,到了这个地方。

把两个服务器复制下来,粘贴到刚刚的 register.us.kg。

点击 Register 就好了。这个域名可以给你用一年,你可以在离到期还有 \(180\) 天的时候免费续订。就是在 Dashboard -> Manage my domains 点击你要续订的域名,下拉点击 Renew (if there's less than 180 days left until expiry) 即可。
回到 cloudflare,点击 设置 -> 触发器,点击 添加自定义域,输入你的域名,最后点击 添加自定义域 就好了。
可能你会发现你的证书还不是有效的,不要慌,过一会就好了。
打开我们的域,可以发现下载什么的也是完全可用……吧。

只是偶尔有些慢而已。
参考:








浙公网安备 33010602011771号