安然无恙,各位;

之前不是写了两篇关于goedgeCDN系统的一些文笔吗,详细:

之前都没怎么仔细的写清楚使用的教程,只是大致的讲述了基本的接入使用就不在阐述了,这里就补一下之前画的大饼,顺便推一下我们团队的CDN项目,教程只是说说去使用LEDCDN(QiuDN是LEDCDN前身)

基本上主要就是这些了,水一下简单说明了一些小点点,管理端随便摸索都懂了,要是不懂说明你不合适去玩自建,老老实实过来用LEDCDN吧

因为。。。实际上用户操作面板端有了一个解释文档了。。

image-20241003202600753

基础设置

接入使用相信大家通过之前的简单的教程已经基本的了解过了,那么也不在多复述,简单过过就行,如果有不懂的可以回去补课


当然,其实是我不愿意再去重复折腾了,毕竟我已经弄完了

添加服务

image-20241002181343262

先讲添加网站模块;


加速域名就是需要绑定的域名

域名协议选择开HTTPS就需要上传证书,证书一般是keycer格式的,这里可以直接前往ohttps.com注册,申请快速通知支持泛域名

image-20241002181531745

源站信息的话,如果你源站开启了SSL,也就是HTTPS模式,就要把源站协议调整HTTPS(443)协议然后再填写源站IP,当然如果有端口直接IP+端口号即可,如果没有启动,则是HTTP;同时,还支持很多模式

image-20241002181840217

回源主机名如果没有其他需求则是默认跟随CDN服务即可,无需其他的调整,”跟随CDN服务”是指访问源站的站点域名和当前CDN服务保持一致;”跟随源站”是指访问源站的站点域名仍然是填写的源站地址中的信息,不随CDN服务域名改变而改变

image-20241002181934905

然后就是点击DNS,复制下来CNAME解析值后前往域名解析处添加CNAME解析

image-20241002182218076

image-20241002182325311

安全设置

选择HTTP,就可以选择自动跳转https访问服务

image-20241002182419736

选择HTTPS,可以设置网站服务的SSL安全设置,支持启用HTTP2/3,然后TLS选择你需要的版本即可,加固建议:启用对TLS 1.2TLS 1.3的支持,并禁用对TLS 1.0的支持,不懂什么是TLS可以去简单了解一下

image-20241002182833300

点击更多选项进入扩展设置,HSTS是HTTP 严格传输安全,简单说明就是强制只能HTTPS链接;而OCSP Stapling 就是为了解决 OCSP 隐私问题和性能问题而生的,简单说明就是避免了客户端验证会产生的阻塞问题,提升了HTTPS性能

image-20241002183015564

防护设置

首先选择五秒盾,启用五秒盾后可以点击更多选项可以根据自身需求来设置细致的配置

image-20241002183802439

特别要讲

  • 单IP最低QPS:当某个IP在1分钟内平均QPS达到此值时,才会触发5秒盾;如果设置为0,表示任何访问都会触发QPS算法:QPS = 总请求数 / 时间段

  • 加入IP白名单:选中后,表示验证通过后,将访问者IP加入到临时白名单中,此IP下次访问时不再校验5秒盾;此白名单只对5秒盾有效,不影响其他规则。此选项主要用于可能无法正常使用Cookie的网站


选择CC防护,启用CC防护后可以点击更多选项可以根据自身需求来设置细致的配置

image-20241002184300758

特别要讲

  • 使用自定义拦截阈值:请根据自己的服务需求来设置,否则就不动,当发现源站撑不住就需要下调阈值,服务不正常速度慢等就上调阈值,但是需要你的源站服务器性能足够,不然就出现攻击就炸

  • 启用CC无感防护 - 是否启用CC防护,启用后,自动检测并拦截CC攻击

  • 更多选项
    • 单IP最低QPS - 当某个IP在1分钟内平均QPS达到此值时,才会触发CC防护;如果设置为0,表示任何访问都会触发
    • 例外URL - 如果填写了例外URL,表示这些URL跳过CC防护不做处理;比如API类的调用不做限制,可以填入 /api/*
    • 限制URL - 如果填写了支持URL,表示只对这些URL进行CC防护处理;如果不填则表示支持所有的URL;比如只想针对搜索URL进行CC防护,可以填入 /search*
    • 检查请求来源指纹 - 在接收到HTTPS请求时尝试检查请求来源的指纹,用来检测代理服务和爬虫攻击;如果你在网站前面放置了别的反向代理服务,请取消此选项
    • 启用GET302校验 - 选中后,表示自动通过GET302方法来校验客户端;适用于网页类的应用,不适用于API应用
    • 使用自定义阈值 - 默认情况下,对CC攻击IP的拦截策略可以在系统集群设置中定义,如果想自己修改,可以选中此选项,并根据自己的需要填入各个时间范围内的请求数限制

WAF设置

防CC攻击简单设置(主要看)

请根据需求调整,有标识,请不要随意设置此项避免出现验严重报错,(补充,这调的有问题,自己配吧,更合适自己)

CC单URL请求数

image-20241003190303923

image-20241003190321341

image-20241003190345780

CC单URL请求数

image-20241003190413296

image-20241003190428359

随机URL攻击

image-20241003190455598

image-20241003190512196

这是LEDCDN默认全局开启的策略

image-20241003190620341

可以把局域网下了,主要是个人需求


当然,要是实在服务器太低配了直接开始严防无脑模式吧!

image-20241005121124606

此规则适合静态网站,如果是容易被误判封锁了可以上调高一点,比如1-50、5-20等,祝您用得愉快,可以加入聊天群测试呢~

当然,也可以设置一个最低的阈值,然后启用人机验证!人机验证方式就可以在更多设置选择

image-20241005140937191

image-20241005141029952


规则示例

只允许某些特定来源的网站访问

这里面就有两个规则:一个是我们允许所有来源为空的访问(也就是用户直接访问网站),第二个就是允许特定域名的来源访问,所以我们要添加的规则就是阻止以下条件的访问:

  1. 来源不为空
  2. 来源不是我们允许的域名

在规则集里添加的规则如下:

  • 规则:
    1. 规则1
      • 参数: 请求来源 - [refererOrigin]
      • 操作符: 正则不匹配
      • 对比值: a\.com|b\.c\.d\.com
      • 这里写的是你允许的域名列表
      • 要符合基本的正则表达式语法
    2. 规则2
      • 参数: 请求来源 - [refererOrigin]
      • 操作符:字符串不等于
      • 对比值:不填留空
  • 规则之间的关系:和(And)
  • 执行动作:网页网页(PAGE)
禁止访问特定的URL

比如一个网站禁止访问 /hello.html

  • 参数:请求路径 - [requestPath]

  • 操作符:字符串等于

  • 对比值:/hello.html

  • 执行动作:

    1
    网页网页(PAGE)
    • 状态码:403

设置后,访问 /hello.html/hello.html?v=123 之类的URL会显示403,而访问其他URL则正常。

只允许访问特定的URL

比如一个网站只允许访问 /hello.html ,访问其他页面时提示403

  • 参数:请求路径 - [requestPath]

  • 操作符:字符串不等于

  • 对比值:/hello.html

  • 执行动作:

    1
    网页网页(PAGE)
    • 状态码:403

设置后,访问 /hello.html/hello.html?v=123 之类的URL是正常的,访问 /world.html 会显示403。

只允许访问特定的目录

比如一个网站只允许访问 /images/ ,访问其他页面时提示403

  • 参数:请求路径 - [requestPath]

  • 操作符:正则不匹配

  • 对比值:^/images/ (其中 ^ 在正则中表示开头)

  • 执行动作:

    1
    网页网页(PAGE)
    • 状态码:403

设置后,访问 /images/test.jpg/images/test.jpg?v=123 之类的URL是正常的,访问 /images2/test.jpg 会显示403。

编解码

编解码可以对输入的参数值进行二次处理后,再跟对比值进行对比。以下是几个示例:

示例1:判断某个参数值的长度必须大于100

如果要想判断某个参数值的长度大于100,可以使用编解码的”计算长度”,规则内容如下:

  • 参数:单个URL参数值-[arg]
  • 参数名:name (比如要判断的是URL中的参数name)
  • 编解码:计算长度
  • 操作符:数值大于
  • 对比值:100

这样当用户输入的name参数长度大于100的时候就会匹配到此规则。

示例2:判断某个用户输入的某个Base64内容必须包含某个字符串

当用户输入Base64内容的时候,使用常规的手段无法进行对比,所以可以使用编解码中的”BASE64Decode”,规则内容如下:

  • 参数:单个URL参数值-[arg]
  • 参数名:name (比如要判断的是URL中的参数name)
  • 编解码:BASE64Decode
  • 操作符:包含字符串
  • 对比值:HelloWorld

这样当用户输入类似于”SGVsbG9Xb3JsZA==“的内容时,就能匹配到该规则。

示例3:判断经过转义的URL是否匹配某个规则

如果用户输入的内容中是经过转义的,可能会对我们的判断有所影响,比如:

1
id%3D%3B+DELETE+FROM+abc

针对这种情况,我们可以使用编解码中的URLDecode来对输入值进行解码后再对比:

  • 参数:所有URL参数组合-[args]
  • 参数名:name (比如要判断的是URL中的参数name)
  • 编解码:URLDecode
  • 操作符:正则匹配
  • 对比值:DELETE FROM

经过解码后,上面的一段内容会被解码成:

1
id=; DELETE FROM abc

所以就会和我们写的正则相匹配


其他设置

随便说说就行,因为基本上都有标注了,主打就是出问题就关闭,一般需要设置的需求很少

  • 内容压缩

image-20241002184848910

如果启动了发现网站不正常就关闭,亦或者自行调整自己的需求,比如说WP博客程序网上就有很多的设置要求,都一一列出给你们了

  • 自定义页面

image-20241002185009290

这是一个可以让你自由自定义网站某状态码下的页面,比如说常见的404,你可以相应状态码是404然后自定义自己想要的404页面,又或者是502等报错,来给访客展示这个状态码下你想转告访客的信息

Websocket

image-20241002185151473

WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层;使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,常见使用场景就是实时聊天工具,这样不用你刷新了才看得到别人新发的信息


设置完这些基本上就已经可以使用了

常见问题

502 Bad Gateway 是怎么回事?

出现 502 Bad Gateway 通常说明源站无法连接,可以在访问日志里查看详情(如果开启了访问日志的话)。此时,请检查:

  1. 你有没有在源站中设置源站;
  2. 你是否在源站设置中设置了源站的专属域名,导致用户访问专属域名以外的域名时无法匹配到源站;
  3. 你填写的源站的协议、域名、端口等信息是否正确;
  4. 检查源站是否返回了502
  5. 通过 curl 或者 wget 等工具在边缘节点上直接访问源站URL,检查在边缘节点上是否能正常访问源站;
  6. 如果源站设置有防火墙或者限流设置,请关闭或者设置边缘节点为白名单。

504 Gateway Timeout 是怎么回事?

出现 504 Gateway Timeout 通常说明源站连接超时,可以在访问日志里查看详情(如果开启了访问日志的话)。此时,请检查:

  1. 检查源站的协议、域名、端口是否正确;
  2. 源站是否返回了504
  3. 通过 curl 或者 wget 等工具在边缘节点上直接访问源站URL,检查在边缘节点上是否能正常访问源站;
  4. 如果源站设置有防火墙或者限流设置,请关闭或者设置边缘节点为白名单。

在访问日志详情(访问日志后面图标点开)中”综合信息”页面会给出具体的错误,通常是:

  • dial tcp: xxx.xxx.xxx.xxx .. i/o timeout - 指的是节点通过TCP连接源站超时;通常是节点和源站的网络连接状况不佳,也有可能是源站设置了一些限流、限速措施,导致边缘节点无法正常连接源站;
  • dial tcp: lookup example.com on xxx.xxx.xxx.xxx - 指的是节点通过TCP连接域名解析服务超时,请检查节点设置的域名解析服务服务器地址是否正确、是否可以正常连接(Linux 上通常可以查看 /etc/resolv.conf );
  • dial udp: lookup example.com on xxx.xxx.xxx.xxx - 指的是节点通过UDP连接域名解析服务超时,请检查节点设置的域名解析服务服务器地址是否正确、是否可以正常连接(Linux 上通常可以查看 /etc/resolv.conf );
  • tls handshake timeout - TLS握手超时

使用CDN后报头无法读取?

有些自定义的报头经过CDN之后,源站无法读取,可能的原因是「LEDCDN」内容分发会自动将用户自定义的报头名称换为标准的报头,比如用户的请求中含有:

1
2
auth-key: MTIzNDU2
X-WWW-Echo: Helo

那么,经过CDN之后,源站接收到的报头会变成:

1
2
Auth-Key: MTIzNDU2
X-Www-Echo: Helo

在HTTP/2中在浏览器端查看的报头可能全部是小写的,但是实际在传输中报头都是首字母大写的。

知道原因后,我们就有了解决方案:

  • 方法1:修改源站的程序,从原先不标准的报头名称改为标准的报头名称,比如从 auth-key 改为 Auth-Key
  • 方法2:在网站设置”HTTP报头” — “请求报头”中自定义一个新的非标准报头,比如名称为auth-key,值为${header.Auth-Key},这样可以强行添加一个非标准报头在请求中,源站接收到的就是非标准的auth-key

使用CDN后浏览器无限重定向?

如果使用CDN后,浏览器端显示Too Many Redirects等无限重定向的现象,那么常见的可能原因有如下几个:

  1. 可能原因1:源站中设置的源站域名和CDN域名一致:如果源站的域名和用户访问CDN的域名是一样的,那么CDN将无法正常读取源站;请务必检查源站设置,防止源站中域名配置和CDN冲突;
  2. 可能原因2:源站地址是HTTP,但是在源站设置了自动跳转到HTTPS,所以导致源站一直在HTTP-HTTPS之间不断跳转,这种情况下,有以下几个解决方法:
    1. 取消源站的自动跳转设置(或者根据当前访问域名来判断是否跳转,而不是全部强制跳转);
    2. 源站地址改为HTTPS的,防止源站自动跳转。

出现 ERR_SSL_PROTOCOL_ERROR 错误是怎么回事?

如果你在浏览器上打开网站出现类似于以下的错误:

1
2
3
此网站无法提供安全连接
xxx.com 发送的响应无效。
ERR_SSL_PROTOCOL_ERROR

通常原因:

  1. 可能开启了网站443端口,但是没有上传SSL证书导致,你可以上传证书或者关闭443端口来解决此问题;
  2. 你没有在对应的网站里绑定当前访问的域名;
  3. 可能错误地在HTTP里将端口设置为443,请改为在HTTPS里设置这个端口。

开启HTTPS后浏览器提示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH

通常的几个原因:

  • 没有上传对应域名的SSL证书导致,请上传证书后再试;
  • 绑定的域名没有填写正确,请在”域名”设置里查看域名是否填写正确、是否有同一个域名绑定多个服务的情形。

已经上传了证书但是浏览器提示不安全

如果已经在管理系统绑定了域名,且已经上传此域名对应的证书,在浏览器上访问时仍然提示”不安全”类似字样,可能的几个原因:

  1. 你访问的是HTTP网址,而不是HTTPS网址,比如 http://你的域名,此时请换成HTTPS访问,直接输入 https://你的域名 来验证你的HTTPS设置是否成功;如果使用HTTPS访问成功,你只需要在网站设置里设置让HTTP自动跳转到HTTPS即可;
  2. 你访问的域名没有在”域名”设置里加入;
  3. 你访问的域名证书不正确。

源站提示无法找到域名

如果源站提示 Invalid Hostname 之类的错误,或者提示找不到对应的网站,或者显示的是别的域名对应网站的内容,原因是你没有设置正确的回源主机名。默认情况下,回源主机名和终端用户访问的域名一致,但如果你的源站不支持用户直接访问的域名的话,可以在”源站” — “更多设置”中统一修改回源主机名,修改为源站域名;如果你每个源站域名不一样的话,可以点开修改每个源站,然后设置对应的回源主机名;如果源站使用的是特殊的端口,那么你设置的回源主机名中可能也需要添加对应的端口(比如 example.com:9200)。

499是什么错误?

客户端在发送请求过程中取消请求的时候,会记录一个499,通常可以忽略。

后续需要补充可以留言,我会更新此文章!其实也就水水文章罢了,有错误点一定说,我立马去改正