您的位置:首页 > 娱乐 > 八卦 > Cloudflare 常用操作

Cloudflare 常用操作

2024/12/23 13:44:45 来源:https://blog.csdn.net/qinjm8888/article/details/139882081  浏览:    关键词:Cloudflare 常用操作

一、域名托管到cloudflare

    登录cloudflare->添加站点->填写域名(例如阿里云)->继续选择free套餐->继续->保存cloudflare分配的DNS地址->进入阿里云域名管理->进入DNS管理/DNS修改把DNS地址修改为cloudflare分配的两个DNS->保存->回到cloudflare->网站中域名打上对号表示托管成功(修改DNS成功后cloudflare会发邮件一般几分钟就配置成功了)->进入网站/SSL/TLS开启始终使用HTTPS就可以免费使用SSL

二、加速访问GitHub

    登录cloudflare->Workers 和 Pages->创建->创建 Worker->保存->进入刚创建的Worker->编辑代码worker.js修改为以下代码->保存部署->进入刚刚的Worker->设置/触发器中添加自定义域名因为cloudflare自动分配的域名访问慢->通过自定义域名就可以畅快的访问GitHub了

// 你要镜像的网站.
const upstream = 'github.com'// 镜像网站的目录,比如你想镜像某个网站的二级目录则填写二级目录的目录名,镜像 google 用不到,默认即可.
const upstream_path = '/'// 镜像站是否有手机访问专用网址,没有则填一样的.
const upstream_mobile = 'github.com'// 屏蔽国家和地区.
const blocked_region = ['KP', 'SY', 'PK', 'CU']// 屏蔽 IP 地址.
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']// 镜像站是否开启 HTTPS.
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 = nulllet url = new URL(request.url)let url_hostname = url.hostnameif (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_domainif (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.methodlet request_headers = request.headerslet 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 = nulllet response_headers = original_response.headerslet new_response_headers = new Headers(response_headers)let status = original_response.statusnew_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, jfor (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 = truefor (var v = 0; v < agents.length; v++) {if (user_agent_info.indexOf(agents[v]) > 0) {flag = falsebreak}}return flag
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com