最近在改一个项目,前端使用了Ant Design且我没有源码,因此只能自己实现一个MessageBox组件。
在掘金上看见了一个现成的组件,略加修改使其适应Ant Design的风格。
用法:
1 | const message = useMessage(); |
代码如下:
1 | /** |
最近在改一个项目,前端使用了Ant Design且我没有源码,因此只能自己实现一个MessageBox组件。
在掘金上看见了一个现成的组件,略加修改使其适应Ant Design的风格。
用法:
1 | const message = useMessage(); |
代码如下:
1 | /** |
本文完全基于正常NS接入Cloudflare的流程进行讲解,因此不含优选内容。
好的缓存配置能让回源流量少很多,也能节省客户端的加载时间。
在Cloudflare缓存配置页,将缓存级别设置为忽略查询字符串。
浏览器缓存 TTL按需设置,一般设置5天以上。
讲解:
缓存级别的三个选项分别如下解释:
URL参数访问,就回源。URL参数都返回同一个资源。URL参数进行不同的缓存。为什么这么设置:一般的,静态资源不同的URL参数请求取得的结果是相同的,而且设置为标准或没有查询字符串有被攻击的风险(对不同参数的资源会进行回源)。
浏览器缓存 TTL:静态资源在浏览器缓存的时长,按照静态资源的变化情况来设置。
如果有条件,还可以用API设置边缘缓存时长,与浏览器缓存 TTL一样,按需设置,一般来说时间长一点较好。
侧边栏“速度-优化”页面。建议全部开启即可。
在“内容优化”中,关闭Rocket Loader。将Auto Minify全部打开。
这里只讲基本的安全配置,不讲自定义规则。
“安全性-自动程序”中,开启自动程序攻击模式。
“安全性-设置”中,开启浏览器完整性检查。其他两项按需设置。
建议使用API关闭Privacy Pass(我没找到设置项,可能被CF移除了),因为它会导致一部分验证码绕过漏洞。
这台服务器是黑五入手的,详细配置如下:
| 项目 | 信息 |
|---|---|
| CPU數量 | 1vCPU $2.52 USD |
| 内存(MB) | 1024MB (1GB) $2.52 USD |
| 硬盤空間(GB) | 10GB $4.20 USD |
| 流量(GB) | 500GB (0.5TB) $4.20 USD |
| 帶寬速率(Gbps) | 7Gbps |
1 | -> System Information |
叠了黑五半价券之后,年付大概 70¥



我是专门为了它的 CFMT 线路接入购买的,在测评时也测试了一下它的DDoS防护。
测试使用的攻击平台由我的朋友提供,为了防止被滥用就不公开了。
第一次测试 UDP 反射攻击。攻击带宽大约 700Gbps。丢包率如下图(前三分之一为未开始攻击时的丢包率,后三分之二为攻击时)
第二次测试 SYN Flood 攻击。攻击带宽大约 50Gbps。所有外网流量都无法流入,但停止攻击后立刻复活。
从基础数据来看, CPU 单核跑分 852 分是在一个还说得过去的水平的,对于一台普通的高防网站服务器来说够用了。硬盘 IO 在 VPS 范围呢则是比较高的一个水平,可惜硬盘太小了,加大容量得加钱。
网络带宽没有续表,但是由于其三网绕日本 NTT 的线路导致到国内带宽缩水很多。我加钱上的 7Gbps 到国内仅剩 1Gbps 了。
我购买这台机器主要是为了它的 DDoS 防护。目前来看它的防护确实耀眼。得益于Cloudflare Magic Transmit的加持,使其能够防护超过 5Tbps 的 DDoS 攻击,我个人认为是比较满意的了。
之前学校要开课就拿 Typecho 糊了一个小网站拿来配合,今天发现登不上去了感觉非常离谱。
F12 抓包看了一下发现登录返回了 302 而且没有附带报错信息,非常非常的离谱。
查了一下文档,没有查到(不过也正常,ty 文档约等于空气)。
研究了一下发现:
修改 Typecho 根目录下的config.inc.php`,添加这么一行:
1 | define('__TYPECHO_SECURE__', true); |
然后清除一下缓存,他就好了。
总之就是非常离谱
如果你在进行前后端分离的开发时发现在测试环境内没有任何问题,而一上生产环境就会出现前端根本无法向后端发出请求的问题,那么恭喜你,你成为了万恶的CORS的受害者之一!!!
你可以按F12打开开发者工具,选择网络选项卡,按F5刷新网页。不出意外的话你会看见一长串的CORS Error。同时,控制台也会输出错误。
@> 跨源资源共享 (CORS)(或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),这样浏览器可以访问加载这些资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的”预检”请求。在预检中,浏览器发送的头中标示有HTTP方法和真实请求中会用到的头。
跨源HTTP请求的一个例子:运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 来发起一个到 https://domain-b.com/data.json 的请求。
出于安全性,浏览器限制脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一个域请求 HTTP 资源,除非响应报文包含了正确 CORS 响应头。
@>
@> 来源: 跨源资源共享(CORS) - HTTP | MDN
如果你使用了支持修改返回头的CDN,你可以直接在CDN侧配置。
在CDN侧添加如下四个返回头:
| 标头名称 | 值 |
|---|---|
| Access-Control-Allow-Methods | GET,POST,HEAD,OPTIONS |
| Access-Control-Allow-Origin | * |
| Cross-Origin-Opener-Policy | cross-origin |
| Cross-Origin-Resource-Policy | cross-origin |
如果你没有使用CDN,那么直接在Nginx配置文件中写规则即可。 |
使用 CloudFlare Workers 反向代理 Gravatar
博主非常不建议用这种方法自建你的 Gravatar 源。因为 Cloudflare 由于被国内某些小脑萎缩群体用来搭建代理之后,连接延迟大大增加!
去科赋锐控制面板,找到左边菜单的Workers。
依次点击创建应用程序 -> 创建Worker。
随便写一个名称,然后部署。
编辑代码,替换成如下内容:
1 | addEventListener("fetch", event => { |
大功告成!
[post cid=”21” /]
接上文,使用 PowerDNS 搭建根服务器后,我又想尝试搭建权威域名服务器。
首先说一下我的观点:自建权威域名服务器犀利而无用。他要求高昂的成本但几乎没有回报。我的权威域名服务器是在两台我弃用的服务器上搭建的,因此可以无视成本。但我不建议各位这么做。
利用 PowerDNS 的 Lua 支持,我们可以轻松的搭建出一套支持分线路解析的 GeoDNS 服务器。
需要:
geoipupdate 工具。1 | apt install geoipupdate |
/etc/geoip,并修改/etc/GeoIP.conf:1 | AccountID [账户编号] |
1 | crontab -e |
1 | apt install -y pdns-backend-geoip |
/etc/powerdns/pdns.conf1 | enable-lua-records=yes |
在 PowerDNS Lua 中,用户的 IP 地址作为一个变量bestwho存在。不过如果用户的 DNS 服务器没有告知上游服务器用户的地址,那么bestwho就会指向 DNS 服务器的地址。
PowerDNS 提供了一个 lua 函数pickclosest,该函数从一个 IP 列表中选择离bestwho地理位置最近的服务器返回。
还有一个函数country,可以分辨国家。
两者的使用:
1 | A "pickclosest({'1.1.1.1','8.8.8.8','114.114.114.114','223.5.5.5'})" |
今天晚上博主突发奇想:既然根域名服务器的存根文件是公开的,那为什么不自建一个呢?使用现有的资源,我们完全可以在短时间内自己搭建一个 DNS 根服务器,并且让你的递归 DNS 使用它。
https://www.baidu.com/想要访问网页。此时你的浏览器会将你输入的 URL 中的域名取出,并根据你设置的系统 DNS 请求到域名服务器。www.baidu.com.的记录,如存在则直接返回,如不存在则继续请求下去。query www.baidu.com.请求,根服务器返回了.com顶级域名的顶级域名服务器地址a.gtld-servers.net.。query www.baidu.com.请求,得到baidu.com的权威域名服务器地址dns.baidu.com。query www.baidu.com.请求,得到www子域的解析记录。到上述第六步时,DNS 解析过程就已经完成了。看似复杂,实则只在几十毫秒内。
目前可选的 DNS 服务器程序很多,例如广为人知的PowerDNS和BIND9。本文选择了PowerDNS作为服务器程序。
apt install pdns-server pdns-backend-mysqlBIND格式的 zone 文件。vim /etc/powerdns/pdns.d/bind.conf1 | launch=bind |
.,并且第 4 列是NS的行。1 | . 86400 IN NS root-server.你的域名. |
注意:所有的域名后面的.不可省略!
1 | mv root.zone root.zone.bak |
如果有多台服务器要成为根服务器,重复以上步骤几次即可。
5. 新建/etc/powerdns/bind.conf文件,添加如下内容。
1 | zone "." { type native; file "/etc/powerdns/root.zone"; }; |
systemctl restart pdns重启 PowerDNS 服务器。dig @你服务器 IP,应当会得到如下回复(其中root-server.omn.cc是我设置的域名):
dig @你服务器IP www.example.com,得到如下回复:;; AUTHORITY SECTION:
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
……;; ADDITIONAL SECTION:
m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
m.gtld-servers.net. 172800 IN A 192.55.83.30
l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
l.gtld-servers.net. 172800 IN A 192.41.162.30
……
恭喜!你的根服务器已经搭建好了!
有了根服务器,接下来就可以配置你的递归 DNS 服务器,让它们使用你自己的根服务器完成解析了。
将你在root.zone文件里自己添加的两行/三行(如果你有IPV6)内容保存为roots.hint文件,传到你的递归 DNS 服务器上去。
然后在 PowerDNS Recursor 的配置文件中新加一行:
1 | hint-file=/etc/powerdns/root.hint |
如果你开了 DNSSEC 验证,还需要添加一行:
1 | lua-config-file=/etc/powerdns/script.lua |
然后在/etc/powerdns/script.lua中写入:
1 | addNTA(".") |
保存后重启 PowerDNS Recursor 即可。
Update your browser to view this website correctly.&npsb;Update my browser now