解密Hostker&主机壳CDN——Nginx篇

上一篇我们说到《HTTPS 握手过程》,现在进入主线 CDN。来看一张图了解用户的访问过程:cdn2从图上我们可以看到进入 CDN 之后第一个步骤是判断 HTTP 请求头的 Host 值,系统会从内存中读取 Host 对应的数据,包括域名所属主机、用户自定义的 UA、IP 安全策略等。前面的文章有提到,我们没有使用 Nginx 的配置文件保存这些数据,而是直接写入内存,因此省去了每次修改都扫描整个配置文件的过程。

拿到了配置之后,我们在 Nginx 层有一些系统统一给用户准备好的保护规则,例如恶意 IP、UA 全局屏蔽。首先进行全局的规则判断,然后进行用户自定义的黑名单规则判断。没有问题的话,进入到危险行为判断。

危险行为包括 CC 攻击、WordPress 后台爆破、论坛密码爆破、垃圾评论等。针对这些问题我们在 Nginx 层开发了 AntiCC 模块和 AntiSPAM 模块。

AntiCC 模块

anticc

在用户遇到 CC 攻击时,我们会临时启动 AntiCC 模块进行过滤。首次访问的访客将会重定向到 anticc.smartgslb.com 并出现这个界面。用户点击「继续访问」按钮后,浏览器将会运行一段 js 进行计算得到正确的令牌,并重定向回 CDN 节点,继续之前的访问。确保不影响其它网站的正常使用。

※ 对于引来流量洪水攻击的网站,我们将会直接清退!这一模块仅用于紧急自保使用。已知自己被人攻击的用户不要试图使用我们的 CDN!

AntiSPAM 模块

顾名思义,这个模块就是防垃圾。除了前面提到的根据 UA 和 IP 进行黑名单防御之外,我们针对比较常见的 WP、DZ 密码爆破等行为开发了这个模块。

原理非常简单,在 POST 请求到特定 URL 的时候,CDN 会进行一个判断,访客需要首先访问过网页,得到一个 token 在浏览器中,然后再进行 POST 行为,我们的 CDN 才会放行。目前这一模块每天都会拦截上万次 WordPress 后台密码爆破攻击。

静态资源处理

说到静态资源,防盗链必不可少。由于有 CDN 的存在,我们无法直接在运算节点 Apache 层面写 .htaccess 进行防盗链,而是需要在控制面板中进行配置。这一点不难理解,几句话带过。

我们一直强调自己独有的静态资源加速,这一功能原理也不复杂,针对未备案的域名,将访客的图片、附件请求 302 重定向至我们的域名,例如 www.90.cx 重定向到 www-90-cx-static.smartgslb.com 域名,这样可以在不干扰网页的情况下,提供中国大陆最近最快的 CDN 带宽供用户访问。

重定向也有非常多的讲究,不能一股脑儿全部重定向过去,js 和 css 这两个流量不大而且和网页渲染密切相关的东西肯定不能进行重定向。字体方面,我们在重定向之后增加了跨域许可头(CORS),确保浏览器可以正确载入字体。这些都是在静态资源处理模块中完成的动作。

数据统计

我们自己实现了一个 UDP 协议,Nginx 在处理完请求之后会将请求情况实时汇报给我们一个节点,我们进行汇总处理并展示在 http://status.hostker.com/

至此 Nginx 部分的任务就结束了。

接下来轮到《解密Hostker&主机壳CDN——Squid篇

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.