首页
关于
留言
Search
1
红米 AX3000 (AX6) 路由器解锁 SSH 教程
6,676 阅读
2
网盘挂载程序sharelist美化教程
4,216 阅读
3
小米路由器 AX3600 开启SSH教程,官方固件即可安装 ShellClash开启科学上网
2,168 阅读
4
Oracle 甲骨文 ARM VPS 自动抢购脚本
1,819 阅读
5
编译带PassWall和SSR-plus插件的Openwrt系统
1,393 阅读
前端
Vue
React
后端
Java
Python
PHP
数据库
运维
杂谈
小程序
影视资源
登录
Search
标签搜索
Java
Linux
Mysql
IDEA
Debian
Docker
Springboot
CentOS
Cloudflare
Maven
JavaScript
SQL
Wordpress
宝塔
Nginx
Windows
MacBook
JS
CSS
Openwrt
William
累计撰写
144
篇文章
累计收到
702
条评论
首页
栏目
前端
Vue
React
后端
Java
Python
PHP
数据库
运维
杂谈
小程序
影视资源
页面
关于
留言
搜索到
5
篇与
的结果
2024-03-11
如何免费接入CloudFlare for SaaS并解决DNS接入限制问题?
CloudFlare禁用了Partner使用以来,博主一直想接入CloudFlare,但由于是DNS的方式接入不得不放弃。无意间看到可以官方免费CNAME方式接入CloudFlare的方法,二话不说,直接上!这是官方的CloudFlare for SaaS提供的一种更灵活的CNAME接入方式,上教程。一、准备阶段两个域名外币卡或者已绑卡的PayPal(虚拟卡也可以,自己去申请)你的源站二、配置接入订阅CloudFlare for SaaS打开一个已经使用CloudFlare的域名,选择【SSL/TLS】-【自定义主机名】-【启用CloudFlare for SaaS】后根据它的提示绑定外币卡或者已绑卡的PayPal。来到激活页面,从提示可以看出免费额度已经进行更新,可以放心使用。设置源站首先在【DNS】下把你想要用到域名解析好你的源站,比如origin.a.com在【SSL/TLS】下的【自定义主机名】,首先要设置回退源,就是刚刚解析好的origin.a.com,点击【Add Fallback Origin】后刷新显示有效即可如果需要每个域名设置一个源站的话,这是要收费的。所以这里我们只设置一个源站。添加自定义主机名点击【添加自定义主机名】,输入你想要添加的未在CF接入的子域名(就是你准备的第二个域名),比如:example.b.com。建议直接使用TXT验证。验证域名所有权按照要求解析好两个TXT记录,解析生效后10分钟左右即可验证通过。证书状态与主机状态显示有效即可。SaaS域名解析添加进去的SaaS域名,CF并不会给你提供明确的CNAME供指向。上述方式接入的可以直接在域名example.b.com下CNAME到你刚刚设置的源站域名origin.a.com即可。然后example.b.com 你就可以继续A类型记录cf的ip即可 分享几个 cf澳门节点电信+联通45.64.22.645.64.22.945.64.22.2145.64.22.2345.64.22.4145.64.22.4245.64.22.56104.31.74.5 联通172.67.136.71 联通172.67.124.63联通162.159.133.13联通移动172.67.69.194172.67.70.160172.67.68.225172.67.28.30172.67.68.225172.67.50.233172.67.72.84后言CloudFlare for SaaS是官方提供的一项非常方便的免费功能,弥补了早期未通过Partner接入只能强制NS接入的缺憾。有官方保障、灵活CNAME、免费的优点,也有源站不灵活等缺点,最后要感谢CF提供这样的免费功能,也欢迎大家在评论区分享你们对这项功能的其他应用方式,一起学习交流吧~
2024年03月11日
146 阅读
0 评论
0 点赞
2022-04-12
Cloudflare 常用API - 自动开启5秒盾 根据平均负载自动开盾
Cloudflare API 通过编程接口公开完整的 Cloudflare 功能。您可以使用 Cloudflare API 管理帐户设置、配置产品和开发应用程序。 via 管理 API 令牌和密钥;要使用API,实现5秒盾,根据平均负载自动开盾,都需要一下几个 Cloudflare注册邮箱,Global API Key,Zone ID等;查看 API 密钥官方文档:管理 API 令牌和密钥(请自行切换语言)修改安全级别设置正常情况下,我们要设置防火墙的安全等级,我们可以在 Cloudflare 的控制面板-防火墙-设置-安全级别进行设置,简单,直观;(如上图位置);为了应对不期而至的 CC 攻击,我们可能会需要一个自动提高安全级别的策略,把安全级别从 off 提高到 under_attack;官方示例Cloudflare 常用API - 自动开启5秒盾(off, essentially_off, low, medium, high, under_attack)完整官方文档,访问 https://api.cloudflare.com/ 搜索 Security Level settingcurl -X PATCH "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/settings/security_level" \ -H "X-Auth-Email: cloudflare 账号邮箱" \ -H "X-Auth-Key: 你的 API Key" \ -H "Content-Type: application/json" \ --data '{"value":"medium"}'现在,我们动手制作一个可执行Shell脚本,假设命名为:cf.security.sh:#!/bin/bash #cf.security.sh CFEMAIL="填写你的Cloudflare注册邮箱" CFAPIKEY="填写你的API Key" ZONEID="填写你的ZONEID" curl -X PATCH "https://api.cloudflare.com/client/v4/zones/${ZONEID}/settings/security_level" \ -H "X-Auth-Email: ${CFEMAIL}" \ -H "X-Auth-Key: ${CFAPIKEY}" \ -H "Content-Type: application/json" \ --data '{"value":"medium"}'其中,"value" 的值可设置为:off essentially_off low medium high under_attack执行 cf.security.sh,如果成功则返回如下提示:{"result":{"id":"security_level","value":"medium","modified_on":"2022-04-12T03:41:56.393080Z","editable":true},"success":true,"errors":[],"messages":[]}根据平均负载自动开盾以下仅做示例参考,还有很多判定方法值得考量(HTTP 502 错误数量,系统平均负载,异常的IP数量,HTTP 404 状态码数量(如果用 random 攻击的话等等))#!/bin/bash #cf.security.change.sh ##近期平均负载情况判定 usage=`echo $(cat /proc/loadavg | awk '{print $2}')` #获取当前系统平均负载值 max=2 #设置最大阈值 CFEMAIL="填写你的Cloudflare注册邮箱" CFAPIKEY="填写你的API Key" ZONEID="填写你的ZONEID" if [ `echo "$usage > $max"|bc` -eq 1 ]; then curl -X PATCH "https://api.cloudflare.com/client/v4/zones/${ZONEID}/settings/security_level" \ -H "X-Auth-Email: ${CFEMAIL}" \ -H "X-Auth-Key: ${CFAPIKEY}" \ -H "Content-Type: application/json" \ --data '{"value":"under_attack"}' fi在Linux系统中,uptime、w、top 等命令都会有系统平均负载 load average 的输出,那么什么是系统平均负载呢? 命令输出的最后内容表示在过去的 1、5、15 分钟内运行队列中的平均进程数量。上面的脚本意思是当最近5分钟系统负载大于2时,则修改 Cloudflare 防御等级为最高级(under_attack模式)最后,设置一下 Crontab 每分钟自动执行脚本即可(脚本每1分钟运行一次):脚本具体位置以你自己放置位置为准*/1 * * * * /root/cf.security.change.sh
2022年04月12日
153 阅读
0 评论
0 点赞
2022-01-08
苹果maccms使用免费Cloudflare CDN加速自定义缓存规则的设置方法
苹果CMS使用免费Cloudflare CDN加速自定义缓存规则的设置方法首先登陆 Cloudflare 网站登陆地址: https://dash.cloudflare.com/login 登录后选择你的域名选择下图圈中选项! 依次选择 Greate Page Rule 按钮,添加下图规则!前台规则后台规则
2022年01月08日
315 阅读
2 评论
0 点赞
2021-07-07
使用Cloudflare Workers反代网站
Workers 的工作原理就是最近几年火热的 serverless。网站管理员不再一定需要一个服务器,只需要将对应的 Function 托管在 Workers 上,当用户访问网站时就会执行对应的 Function,值得一提的是 Cloudflare Workers 本质上只支持 JS反代代码// 需要反代的地址 const upstream = 'www.example.com' // 反代地址的子路径 const upstreamPath = '/' // 反代网站的移动端域名 const upstreamMobile = 'www.example.com' // 是否使用 https const useHttps = true // 禁止使用该 worker 的国家代码 const blockedRegion = ['KP', 'SY', 'PK', 'CU'] // 禁止使用该 worker 的 ip 地址 const blockedIp = ['0.0.0.0', '127.0.0.1'] // 是否关闭缓存 const disableCache = false // 替换条件 const contentTypes = [ 'text/plain', 'text/html' ] // 反代网站中其他需要被替换的地址 const replaceDict = { '$upstream': '$workerDomain', } addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }) /** * Respond to the request * @param {Request} request */ async function handleRequest(request) { const region = request.headers.get('cf-ipcountry') || ''; const ip = request.headers.get('cf-connecting-ip'); if (blockedRegion.includes(region.toUpperCase())) { return new Response('Access denied: WorkersProxy is not available in your region yet.', { status: 403 }); } if (blockedIp.includes(ip)) { return new Response('Access denied: Your IP address is blocked by WorkersProxy.', { status: 403 }); } const upstreamDomain = isMobile(request.headers.get('user-agent')) ? upstreamMobile : upstream; // 构建上游请求地址 let url = new URL(request.url); const workerDomain = url.host; url.protocol = useHttps ? 'https:' : 'http'; url.pathname = url.pathname === '/' ? upstreamPath : upstreamPath + url.pathname; url.host = upstreamDomain; // 构建上游请求头 const newRequestHeaders = new Headers(request.headers); newRequestHeaders.set('Host', upstreamDomain); newRequestHeaders.set('Referer', url.protocol + '//' + workerDomain); // 获取上游响应 const originalResponse = await fetch(url.href, { method: request.method, headers: newRequestHeaders }) const connectionUpgrade = newRequestHeaders.get("Upgrade"); if (connectionUpgrade && connectionUpgrade.toLowerCase() === "websocket") { return originalResponse; } let originalResponseClone = originalResponse.clone(); // 构建响应头 let responseHeaders = originalResponseClone.headers; let newResponseHeaders = buildResponseHeaders(responseHeaders); if (newResponseHeaders.get("x-pjax-url")) { newResponseHeaders.set("x-pjax-url", responseHeaders.get("x-pjax-url").replace("//" + upstreamDomain, "//" + workerDomain)); } // 构建响应体 let originalText; const contentType = newResponseHeaders.get('content-type'); if (contentType != null) { const types = contentType.replace(' ','').split(';') if (types.includes('charset=utf-8')){ for (let i of contentTypes) { if (types.includes(i)){ originalText = await replaceResponseText(originalResponseClone, upstreamDomain, workerDomain); break } } } } else { originalText = originalResponseClone.body } return new Response(originalText, { status: originalResponseClone.status, headers: newResponseHeaders }) } function isMobile(userAgent) { userAgent = userAgent || '' let agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; for (let v = 0; v < agents.length; v++) { if (userAgent.indexOf(agents[v]) > 0) { return true; } } } function buildResponseHeaders(originalHeaders) { const result = new Headers(originalHeaders); if (disableCache) { result.set('Cache-Control', 'no-store'); } result.set('access-control-allow-origin', '*'); result.set('access-control-allow-credentials', true); result.delete('content-security-policy'); result.delete('content-security-policy-report-only'); result.delete('clear-site-data'); return result } async function replaceResponseText(response, upstreamDomain, workerDomain) { let text = await response.text() const placeholders = { "$upstream": upstreamDomain, "$workerDomain": workerDomain } for (let origin in replaceDict) { let target = replaceDict[origin] origin = placeholders[origin] || origin target = placeholders[target] || target const re = new RegExp(origin, 'g') text = text.replace(re, target); } return text; }
2021年07月07日
136 阅读
0 评论
0 点赞
2021-03-26
B2+cloudflare+ShareX,实现无成本图床和便捷上传
首先要准备好3个条件一个cloudflare账号 https://dash.cloudflare.com/一个B2账号 https://www.backblaze.com/b2/cloud-storage.htmlWindows软件ShareX步骤1、注册B2账号,点击进入B2 Cloud Storage,点击Buckets创建一个BUcket,设为public,并上传一个图片,记录下下图要用的域名2、点击App keys,添加一个新的key,bucket就选你刚创建的那个,记录下你的密钥,之后要在ShareX中用3、打开cf,cname一下上图要记的域名,小云朵点亮4、加一条页面缓存规则.5、创建一个workers,粘贴下列代码,记得b2domain和bucket的值改成自己的'use strict'; const b2Domain = 'img.domain.com'; // configure this as per instructions above const b2Bucket = 'bucket-name'; // configure this as per instructions above const b2UrlPath = `/file/${b2Bucket}/`; addEventListener('fetch', event => { return event.respondWith(fileReq(event)); }); // define the file extensions we wish to add basic access control headers to const corsFileTypes = ['png', 'jpg', 'gif', 'jpeg', 'webp']; // backblaze returns some additional headers that are useful for debugging, but unnecessary in production. We can remove these to save some size const removeHeaders = [ 'x-bz-content-sha1', 'x-bz-file-id', 'x-bz-file-name', 'x-bz-info-src_last_modified_millis', 'X-Bz-Upload-Timestamp', 'Expires' ]; const expiration = 31536000; // override browser cache for images - 1 year // define a function we can re-use to fix headers const fixHeaders = function(url, status, headers){ let newHdrs = new Headers(headers); // add basic cors headers for images if(corsFileTypes.includes(url.pathname.split('.').pop())){ newHdrs.set('Access-Control-Allow-Origin', '*'); } // override browser cache for files when 200 if(status === 200){ newHdrs.set('Cache-Control', "public, max-age=" + expiration); }else{ // only cache other things for 5 minutes newHdrs.set('Cache-Control', 'public, max-age=300'); } // set ETag for efficient caching where possible const ETag = newHdrs.get('x-bz-content-sha1') || newHdrs.get('x-bz-info-src_last_modified_millis') || newHdrs.get('x-bz-file-id'); if(ETag){ newHdrs.set('ETag', ETag); } // remove unnecessary headers removeHeaders.forEach(header => { newHdrs.delete(header); }); return newHdrs; }; async function fileReq(event){ const cache = caches.default; // Cloudflare edge caching const url = new URL(event.request.url); if(url.host === b2Domain && !url.pathname.startsWith(b2UrlPath)){ url.pathname = b2UrlPath + url.pathname; } let response = await cache.match(url); // try to find match for this request in the edge cache if(response){ // use cache found on Cloudflare edge. Set X-Worker-Cache header for helpful debug let newHdrs = fixHeaders(url, response.status, response.headers); newHdrs.set('X-Worker-Cache', "true"); return new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHdrs }); } // no cache, fetch image, apply Cloudflare lossless compression response = await fetch(url, {cf: {polish: "lossless"}}); let newHdrs = fixHeaders(url, response.status, response.headers); if(response.status === 200){ response = new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHdrs }); }else{ response = new Response('File not found!', { status: 404 }) } event.waitUntil(cache.put(url, response.clone())); return response; }6、workers里添加路由,使访问你的域名时,先走workers访问一下你的图片文件比如说一开始是https://f000.backblazeb2.com/file/backblaze1489498/wallhaven-md2x8m.jpg现在用https://dlcu.cf/wallhaven-md2x8m.jpg就可以访问了7、配置ShareX这个感觉没啥好说的,主页面–目标–上传目标设置–backblaze b2,填上就行了文章来自网络
2021年03月26日
21 阅读
0 评论
0 点赞