---
layout: post
title: 网站被Ban怎么办？
tags: [网站, Ban]
---
  虽然不是第一次，但是这事终于落到我头上了<!--more-->   
  
# 起因
  在一年前，我写了一篇[Anti-Ban](/2019/04/27/antiban.html)的文章，主要讲的是如何避免由于网站被Ban导致的无法访问。   
  然而现在身份换了，我不再是被Ban网站的访问者，而是维护者，这时候我们应该怎么办？

# 解决方案
  我维护的网站就是花火学园，前两天网站的域名say-huahuo.com包括其子域名都被DNS污染了。污染的当天访问量直接下降3/4，简直是太恐怖了，而且这还只是防火长城的最低级别的攻击。   
  被污染的两天后百度权重骤降，直接预估流量暴降10倍……我以前还挺自信的，让网站与域名耦合度很高，这么一搞，我以后是不敢再在内链里搞URL了，最多就是绝对路径，然后像我之前还搞什么图床之类的现在出现这么个事也不敢再搞子域名了。   
  当然域名被污染这个也不是什么大事，在我维护前貌似也出现过类似的事情，那时候的用户量远比现在低，解决方案也很简单就是换域名，只是我以前太自大了好多配置的地方都用的是带域名的URL，所以直接换就会出现好多问题。   
  还好Nginx有一个叫做`sub_filter`的模块，我可以直接使用这个模块把页面中所有涉及say-huahuo.com的部分全部替换成现在的say-huahuo.me。虽然这样会增大服务器的压力但是也没有啥更好的办法了，以后有机会再把数据库里的所有链接替换一下应该就没问题了吧。   
  不过那也只是个辅助的方案，大多数情况还是要Discuz里面调整。首先要在后台把所有有关应用域名的东西全部关掉，然后在配置文件里把cookie域删掉，另外还要改一下UCenter的配置文件，要把UC_API的地址改成/uc_server，不然头像就会调用带域名的URL然后就会出问题。     
  
# 永远要考虑用户
  其实对于我来说，换不换域名都是次要的，因为防火长城最低级别的攻击DNS污染使用DoH、DoT、DNSCrypt等一大堆避免被污染的方案就可以解决，实在不行用hosts文件手动设置IP也行嘛。   
  虽然这么说，但是访问网站的一大批用户全是电脑小白，那些人能把手放在鼠标上能用键盘打几个字已经很了不起了，像复杂的事情他们也不会懂。虽然我维护的网站没有广告，流量对我来说毫无意义，但是维护一个没有人访问的网站也很无聊啊，没有人访问网站开着有什么意义？   

# 如何使用国外的服务器检测DNS污染
  一般防火长城都是在国际网络出入口设立的，所以如果是国内访问国内还是国外访问国外都是不通过防火长城的。所以怎么样才能在国外检测某域名在国内的状态呢？   
  我之前也不清楚这个问题，后来发现，只要用国内的DNS来解析不就好了嘛23333，在国外也可以用`nslookup`使用国内的DNS，这样就会经过防火长城而实现检测的功能了。

# 总结
  通过这件事，我明白了防火长城再垃圾也是能防住大量用户的，毕竟大量用户都是小白，而且域名一旦被他们认证，终身也别想解禁，所以一般情况下还是不要惹他们比较好。   
  另外只搞了备用域名没搞发布地址也确实是考虑的不够周全，不过也确实是我太自大了，怎么会认为那样的网站不会被防火长城屏蔽？虽然这个域名活了将近两年，但是确实我们做的准备不够充分。   
  还有就是尽可能不要滥用子域名，虽然说有些静态资源放到子域名可以不传cookie可以让速度更快一些，但是这种事对我们来说没有意义，另外就是不要让网站与域名耦合，万一哪一天要换域名麻烦事就出来了。像我的博客用的基本上都是绝对路径，这样就能避免由于GitHub Pages域名出问题之后换域名困难的问题了。
