Cloudflare 配置详解
本篇文章会以我目前的能力,来尽量解释 cloudflare 每一个功能。
已学习:
website
- Overview
- Analytics & Logs
- DNS
- Email Routing
- SSL/TLS
- Security
- Access
- Caching
- Rules
- Network
domain Registration
Zero Trust
- Tunnels
R2
未学习:
最开始名称为” 待学习”,想了一下有些误导就改了。即可能会让小伙伴认为需要将 cloudflare 发布的应用全部学习 其实如果你不是去 cloudflare 做工程师或者客服 这样是错误且完全没必要的。
主要是 cloudflare 提供的一些功能确实好用我才去了解并有了这篇笔记。
website
- Workers Routes
- Custom Pages
- Apps
- Scrape Shield
- Rules
- Zaraz
- Web3
Turnstile
Zero Trust
- Applications
- Access Group
- Service Auth
Workers
- KV
- Queues
- D1
Pages
Stream
Images
Bulk Redirects
Overview
独立访问者:可能同一 IP 同一设备的每个 APP 的请求都算一个独立访问者,我也不是很确定
已缓存的百分比:字面意思,百分比越高 相对来说服务器的压力就越小
总数居:cloudflareCDN 返回给客户的数据流量(不清楚是否包括 CDN 回源流量)
已缓存的数据:已经被 cloudflareCDN 缓存到 CDN 服务器的数据,用户请求到该数据时 CDN 不会向源服务器发送请求 而是直接从 CDN 缓存中取出数据 并返回给用户
Analytics & Logs
这个应该不需要设置什么 主要是分析恶意流量等
DNS
开启黄色小云朵 (Proxied) 表示使用 cloudflareCDN, 开启后该用户访问该域名会被 cloudflare NameServer (如 dana.ns.cloudflare.com)返回 cloudflare 的 IP,可以实现隐藏服务器 IP 的目的
即 香港用户 > cloudflare 香港节点 > cloudflare 美国节点 > 我的美国服务器
关闭小云朵 (DNS only),则不会启用 cloudflareCDN, 此时 loudflare 唯一能提供的服务 就是告诉运营商 DNS 服务器你的 DNS 记录信息,你想使用 cloudflare 提供的防火墙等功能都是需要开启黄色小云朵的
Email Routing
接收域名邮件服务 + 邮件转发,非常适合大量注册服务,不过这个无法回信 需要回信功能建议使用邮局
Custom addresses: 设置你喜欢的一个邮箱,并为他们选择规则。比如我设置了两个邮箱”test@tanglu.cf“和”drop@tanglu.cf“,任何发往”test@tanglu.cf“的邮件信息都会转发到”tangluokex@gmail.com“, 任何发往”drop@tanglu.cf“的邮件都会被丢弃
Catch-all address:收件地址为”*@tanglu.cf” 格式 (如”t2@tanglu.cf“) 的信件且 “Custom address” 中无对应地址,cloudflare 则会将”t2@tanglu.cf“收到的信发送给”tangluokex@gmail.com“
Destination addresses:可以在客户端接受邮件的地址
注:Email Routing 无法转发二级域名的邮件,如收件域名为”test@mail.tanglu.cf“的信件无法被转发到”tangluokex@gmail.com“, 这时需要使用邮局服务
SSL/TLS
Overview
这个比较重要,我起初在这里遇到了很多问题,我尽量写清楚。
这个只针对开启黄色小云朵的网站生效,这一小节我默认都开启小云朵了,以开启小云朵的”a.tanglu.cf” 为例
如果没有开启小云朵则说明你不需要 cloudflareCDN,你选择四个中任何一个设置都不会影响你的网站,可以跳过本节
Off (not secure)
不加密,用户只能通过 80 端口访问网站,即使你通过 https 访问,cloudflare 也会返回给客户端 301 请求 告诉浏览器通过 http 访问,然后浏览器再次通过 http 请求” 如图中序号 2”
cloudflareCDN 访问网站服务器的过程为” 回源”,Off (not secure) 模式下回源也是未加密的 http 协议
Flexible
此模式下,客户端到 CDN 选择 http 或者 https 均可,由客户端决定,CDN 到服务器为强制 http 协议,如果此时服务器设置” 强制 https” 则会导致重定向次数过多产生错误(如下图所示)
即 CDN 通过 http 协议向服务器发起回源请求,服务器因为设置了强制 https 服务器会发送 301 重定向数据包告诉 CDN 必须通过 https 访问,CDN 由于设置的”Flexible” 使其必须使用 http 访问,也就导致了错误,解决方法就是选择”Full” 模式或者服务器取消” 重定向到 https”
注:开启小云朵后,有小伙伴需要强制网站 http 跳转到 https 的需求,这时需要注意无论服务器设不设置” 重定向到 https” 都不会对客户端浏览器产生影响,而只会影响 CDN 服务器的回源请求使用的协议 (http/https)。因为客户端是与 CDN 服务器协商访问协议,CDN 再与源服务器协商访问协议。
正确的做法是在 cloudflare 面板开启” 强制 https” 或者通过 cloudflare rule 配置重定向 后面会有写
Full/Full (strict)
这两者基本差不多,”full” 模式 CDN 服务器不会对源服务器返回的证书进行校验其是否合法,而”Full (strict)” 模式 CDN 向源服务器请求时 只接受合法且未过期的 SSL 证书。建议选择”Full” 这样的话如果你启用了 cloudflareCDN,即使源服务器端证书过期 客户端也是可以正常访问的,过期的证书相当于” 自签证书” 同样有加密效果
此模式下 CDN 会强制客户端使用 https 协议,客户端用 http 协议访问的话 CDN 会返回 301 重定向信息 告诉浏览器用 https 请求,证书由 cloudflare 提供(下一节有写),服务端也必须必须部署证书,CDN 回源时通过 https 协议请求数据。
Edge Certificates
域名 NS 记录设置到 cloudflare 时,cloudflare 会自动为你生成这两张证书,用途就是客户端用 https 请求时 CDN 将这个证书发送给客户端
注意:这张证书只包含一级域名”tanglu.cf” 和二级域名”*.tanglu.cf”,如果你的网站是三级域名”three.a.tanglu.cf” 此域名属于” *.a.tanglu.cf”,但不属于” *.tanglu.cf”。
这时你如果开启小云朵启用 CDN,用户只能通过 http 协议访问,如果使用 https 协议会提示证书不安全 即不合法的证书。
解决方法可以通过 SaaS 免费接入 (后面会写) 或购买高级证书或开通 200 刀一月的 cloudflare buisness 上传自己的证书
Always Use HTTPS 这个开启就是用户用 http 访问会重定向到 https
client Certificates
不知道这个有什么用怎么使用,跳过
Origin Server
Origin Certificates:这个证书就是可以放在服务器,cloudflareCDN 回源请求时用到,但是仅限于 cloudflareCDN, 其他 CDN 或者客户端浏览器都是认为它是不合法的,感觉不如自签(没什么用)
Custom Hostnames
这个似乎被称为 SaaS,是实现 CNAME 接入 cf 并使用 cloudflareCDN, 可以用来自选 IP。下文记录了从 CNAME接入
到自选IP
再到分线路解析
1、CNAME 接入 cloudflare
假设我需要加速的网站为 cfpages1.tanglu.cf,该网站的服务器也就是源服务器的 IP 假设为 43.43.43.43 (也可以是 ipv6 或者域名)
可能有小伙伴有疑惑,我”tanglu.cf” 这个域名已经接入 cloudflare 了,为什么还要 CNAME 接入 cloudflare
答:这里换做未接入 CF 的域名也是可以的,另外 CNAME 接入也不是画蛇添足,而是可以给 cfpages.tanglu.cf 进行自选 IP 的,实现锦上添花。为什么要自选 IP:cloudflare 默认给你分配的 IP 对联通和移动丢包可能很大 甚至给你分配的被墙的 IP,这个时候你可以自选其他低丢包的节点 降低网站延时和减少丢包
步骤 1.1:首先随便决定一个回落域名名称 我设置的”back.tanglu.cf”, 然后在 CF-DNS 添加”back.tanglu.cf” 的 A 记录指向 源服务器 IP (43.43.43.43) 记得小云朵要打开
步骤 1.2:然后在 SSL/TLS>>Custom Hostnames 填写”Fallback Origin” 为回落域名(显示青绿色 active 为添加成功)
步骤 1.3:在 SSL/TLS>>Custom Hostnames 点击”Custom Hostnames “输入你要加速的域名”cfpages1.tanglu.cf”, 然后为 cfpages1.tanglu.cf 添加 CNAME 记录 记录值为回落域名”back.tanglu.cf”(不要开启小云朵,这里只需要简单的 DNS 功能不需要 CDN 功能),最轻松的 CNAME 接入就完成了
过程 : 用户在浏览器输入并访问”cfpages1.tanglu.cf”,(运营商 DNS 服务器没有 cfpages1.tanglu.cf 的 DNS 记录,进而向根域名”.cf” 服务器询问 tanglu.cf 的 DNS 服务器,得到 tanglu.cf 的 DNS 服务器为”gerald.ns.cloudflare.com”, 运营商 DNS 服务器继续向”gerald.ns.cloudflare.com” 服务器发送请求询问”cfpages1.tanglu.cf” 的 DNS 记录,返回得到其服务器 IP 为”back.tanglu.cf”,运营商 DNS 服务器继续请求”back.tanglu.cf“的 DNS 记录,cloudflare 会返回”back.tanglu.cf” 的 A 记录为”104.29.124.26”)
过程大概就是这样,成功 CNAME 接入 cloudflare
2、自选 IP
这个其实很简单,从上述过程可以发现 我们要实现自选,运营商 DNS 服务器就不能给我们返回”104.29.124.26” 这个普通 IP,我们可以直接将步骤 1.3 的 CNAME 记录换为 A 记录 值为优选的 IP(假设为 1.0.0.1)
注意:此时 fallback”back.tanglu.cf” 所属的顶级域名不能与加速网站”pages1.tanglu.cf” 相同(即不能都为”tanglu.cf”),我也不懂为什么,相同会报错”Error1000”
图片中我用的 back.tanglu.ltd 做的回落域名,加速域名为”three.a.tanglu.cf”
步骤 3 也是 back.tanglu.ltd 做的回落域名,加速域名为”cfpages2.tanglu.cf”
3、分线路解析
这个是利用国内 DNS 平台的分线路解析功能,(tencent ali huawei 都支持),因为 ali 支持二级域名 NS 接入,我就将”cfpages2.tanglu.cf” 接入 ali,然后直接设置 A 记录就行
Security
Events
触发防火墙规则的事件,从这里可以分析到很多,如果你这里一条日志都没有 我建议你配置一下 WAF
WAF
Firewall rules:每个人的需求都不一样,我列举一些常见的
匹配规则由上到下遍历,一旦遇到符合的防火墙规则 则执行规则并停止匹配
1、禁止古巴和加拿大的小米手机访问 r2.smalljp.com/* 的所有内容
2、禁止访问所有 png 类型的图片,并且禁止访问 smalljp.com 下的所有 mp4 资源
3、显示所有访问者的 IP,并要求对浏览器进行质询,这个建议放在最后一条识别
托管质询和 JS 质询比较友善,但也会增加相应时间
Legacy CAPTCHA 这个选项会让用户手动选择图片 也就是机器人验证弹窗 非常影响用户体验
Rate limiting rules
这个是防止 CC,我配置的是 10 秒钟请求数超过 200 封禁
Setting
Security Level 这个选中低就行了,级别越高 用户打开网页所以对于应该越慢 用户体验应该越差
Caching
cloudflare 规则我有很多都不会,我只写下我会的规则,欢迎大佬分享规则
Configuration
这个应该看得懂,自己设置吧
Cache Rules
这个我也不是很会,只知道一些简单的,期待大佬补充
另外官方也有很详细的说明:https://developers.cloudflare.com/cache/about/default-cache-behavior
缓存规则可以改变默认设置,但无法改变规定设置,可能写的有点歧义。举个例子来说就是 cloudflare 默认缓存文件中没有 html 但是我通过设置可以实现缓存 HTML, 又比如 cloudflare 规定免费版支持缓存不超过 200MB 的文件,这时你即使设置缓存所有文件 但如果某个文件大小超过 500MB,cloudflare 依然不缓存,这时我建议使用 cloudflare R2。
1、缓存 r2.smalljp.com 下的所有资源
Rules
Page Rules
1、强制所有 http://r2.smalljp.com 跳转到 https://r2.smalljp.com
2、不缓存 r2.smalljp.com 下的 mp4 文件
因为 cloudflare 最大缓存 500MB 一旦视频超出 500MB 就会和缓存起冲突,导致视频直链无法在线观看,但不影响视频下载
Configuration Rules
Transform Rules
Redirect Rules
这三个我都不会,恳请大佬补充
Origin Rules
这个我只知道富强用途,因为 cloudflare 只支持特定端口的请求,这个可以设置 CDN 回源请求的端口
Network
这里面的配置可以全部开启,有些我也不懂…
Apps
这个我也不了解,哦,不对!剩下的我都不了解
当然也不支持全部都了解
domain Registration
听说这个注册和续费都是全球最低价,google 土区除外 (顺便说一句 google domain 土区是真的便宜,org net 只要 30 元一年)
google domains 和 cloudflare 没有的域名可以看我这篇文章: 域名注册局比价
Zero Trust
Zero Trust 我只对 tunnels 有一点了解,其他的访问令牌 Access 什么的我用不到 就没有过多了解
tunnels 就是 cloudflare 提供的内网穿透,, 软件名字叫做”cloudflared”,windows mac linux 都可用。类似与 frp 但是设置比 frp 简单一些,非常好用 (但大陆因为网络环境体验感一般)
官方文档写的很详细,我将常用的功能演示一下
Tunnels
一、内网网站映射到公网
常用于家庭电脑搭建网站或中国境内封禁 80 443 端口的服务器做站
此内网需要可以与公网通信
前景概要:我在内网用 nginx 部署了三个网站 http://tunnel1.a.com http://tunnel2.a.com http://tunnel3.a.com:81 ,我的服务器 80 433 端口都被封禁了,我想通过内网穿透实现通过 https://web1.smalljp.com https://web2.smalljp.com https://web3.smalljp.com 来访问它
注:
我可以部署 https://tunnel1.a.com 吗?
答:可以,你可以自签证书但是我不清楚 cloudflared 是否认可你这个证书,我个人认为没必要,因为用户端的证书是 cloudflare 提供的,你运行 cloudflared 程序的电脑和 cloudflare 服务器之间的内容肯定是被加密过的,所以就用 http 就行。另外多嘴一句 a.com 这个域名又不能被用户看到,用户看到的是 web1.smalljp.com 这个域名…
a.com 是否有什么意义?
答:可以随便设置一个你喜欢的即使你不拥有这个域名,这个域名仅仅是用来 host 匹配不同 server {} 字段,不然都是 443 端口 内网机器怎么知道用户请求的哪个 server,不清楚的可以了解下 http 协议 这方面我也不是很懂…
我机器 80 端口被封禁了为什么还可以将网站部署在 80 端口?
答:cloudflared 可以访问电脑的内网 80 端口,然后 cloudflared 将数据包从任意一个未被封禁的高位端口(比如 55555)将数据包发送给 cloudflare 服务器
正常内网穿透是用一台 443 端口正常的公网 IP 机器来作为用户与服务端的桥梁,但是 cloudflare 的 tunnel 可以实现让 cloudflare 服务器作为中转机即:用户 > cloudflare 服务器 > 内网电脑的 cloudflared > 内网站点 > cloudflared 将类网站点数据通过某个端口将数据返回给 cloudflare 服务器 > 用户收到 cloudflare 的数据
步骤 1:在内网部署 https://tunnel1.a.com https://tunnel2.a.com http://tunnel3.a.com:81 三个网站并安装 tunnels,tunnels-status 显示”healthy” 表示安装成功,即 cloudflared 可与 cloudflare 服务器正常通信。至此服务端配置完成,接下来在 Cloudflare Zero Trust 面板配置刚刚添加的 tunnels-demo
步骤 2:在”Public Hostname” 依次添加这三个隧道,
注:HTTP Setting 中的 HTTP Host Header 一定要填写,除非你这个端口就一个内容 / 服务
比如我设置的 nginx81 端口,该端口只有一个页面,你可以不填 Host 这一项
你设置 qbittorrent 的 8080 端口,alist 的 5244 端口等都是可以的
————————————————
二、SSH 远程
tunnel 添加 SSH 官方文档写的很详细,我只是将官方文档演示一下,国内使用不如套中转
官方说客户端必须使用 WARP 或者 cloudflared 连接,我无法使用 WARP 只好下载 cloudflared 演示了。当然你也可以配置 Access 通过浏览器访问
客户端 cloudflared 下载链接:https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation
步骤:服务端就像之前那样安装 cloudflared,然后如下图添加隧道,
客户端 (就是你主控端) 安装 cloudflared 或者 WARP 并启动,我以 linux 做客户端为例 vim /root/.ssh/config
然后填入以下内容
1 | Host ssh.example.com |
三、windowsRDP 登录
这个只有 windows 才有 RDP 好像,官方文档写的很详细,要求和上面 SSH 几乎差不多,国内不如套中转
客户端执行
1 | cloudflared access rdp --hostname rdp.example.com --url rdp://localhost:3389 |
这个似乎是将 RDP 服务映射到本机 3389 端口,我也不是很清楚
然后浏览器会进行验证身份
如何让 RDP 像 SSH 一样在网页端远程我还不知道,期待大佬解答!
R2
R2 对象存储配置我单独发布了一篇保姆级文章
留一个文件测试链接吧:https://r2.smalljp.com/default/xiongchumo.mp4
看好多小伙伴反馈国内速度也很不错:CF R2 国内流媒体速度测试 - 美国 VPS 综合讨论 - 全球主机交流论坛 - Powered by Discuz! (hostloc.com)
后续了解了更多与 cloudflare 知识会继续更新,不过感觉可能也就是了解一下规则之类的
对计算机语言都不怎么了解看不懂 Turnstile 验证码,更不会 Workers Pages…
本文转载于:https://blog.tanglu.me/cloudflare-configure,若有侵权,及时联系删除!