搭建北邮人BT反代域名过程小记

Rhilip 2016-10-06 PM 2344℃ 8条

因为某些需要,常常需要在无IPv6的环境中访问一些纯IPv6网址。但是以前的处理方法是挂上一个双栈代理然后访问,这样的访问过于麻烦,之前群里提供的各种反代域名也多因为种种原因“消失”了~
正好自己手头上有空的VPS,正好可以搭建反代域名来访问。

2020.02.23 本人自己搭建的反代域名已经关闭,请自己另行搭建使用。

安装Nginx、设置DNS记录

  1. 使用包管理器、源代码编译、LNMP一键脚本等方式安装Nginx,这里我使用军哥的lnmp一键脚本配置来搭建本服务器终端的LNMP环境。
  2. 配置虚拟主机:参见 http://lnmp.org/faq/lnmp-vhost-add-howto.html ,lnmp原作者的方法已经很详细了,这里就不买丑了~

    (只需要反代的话,就直接在Nginx配置目录中添加conf配置文件即可,不一定需要通过下列命令创建。
    使用`lnmp vhost add`创建一个网址为“byr.rhilip.info”的虚拟主机,想要指向bt.byr.cn。因为是一个纯粹的反代服务,所以输入使用的domain后,剩下的选项一路No就好了~
    
  3. 在域名提供商处添加A记录

配置Nginx核心文件

  1. 进入LNMP一键包的虚拟主机配置文件夹,找到刚刚创建的“byr.rhilip.info.conf”文件,并编辑(请自己百度vim编辑器的使用方法喵~)。
    vi /usr/local/nginx/conf/vhost/byr.rhilip.info.conf

删除之前系统生成的代码,填入以下代码,注意修改server_name和proxy_pass部分。

server
{
    listen          80;
    server_name     byr.rhilip.info;

    location / {
        proxy_pass          http://bt.byr.cn/;
        proxy_redirect      default;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

条目解释:

server_name : 访问的代理网站地址
proxy_pass : 欲代理的网站地址
proxy_redirect :对发送给客户端的URL进行修改。在很多反代的教程中,我看到这里都是no,但是这种情况下,直接访问我们的代理网站地址,会被重定位到我们想要代理的网址,故而不能实现我们想要实现的功能;所以改成default(将根据location和proxy_pass参数的设置来决定url)~
proxy_set_header : 用于记录访问用户的真实IP地址
  1. 测试规则是否正确

/usr/local/nginx/sbin/nginx -t

若提示:“the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok configuration file /usr/local/nginx/conf/nginx.conf test is successful”表示正常,若有错误请根据错误提示排除问题。

  1. 重载nginx规则

service nginx reload

屏蔽搜索引擎收录

因为该网站的特殊性,我们并不想让搜索引擎收录到这个反代域名。常见的反收录方法有robots.txt的方式,但是在我们的前一部设置,导致直接在域名文件夹中建立robots.txt的方式无效。所以我们需要使用其他的方式解决。
另外的一种方式就是在nginx的配置文件中用User-agents方式屏蔽常见的爬虫。在前面的conf文件的service字段中添加

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}

最终形成的xxx.rhilip.info.conf文件内容为:

server
{
    listen          80;
    server_name     xxx.rhilip.info;

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}

    location / {
        proxy_pass          http://bt.byr.cn/;
        proxy_redirect      default;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        }

}

重新执行命令service nginx reload,重载nginx规则。

最后,我们可以使用站长工具中的 搜索蜘蛛、机器人模拟抓取工具 来确定我们的屏蔽是否成功~


2018.01.24 更新

  • 如果你需要解决反代图片显示问题,请使用 ngx_http_substitutions_filter_module ,并在location字段中添加 subs_filter src="https?://bt.byr.cn/ src="/ ir; 即可。
  • 如果你需要使用https方式访问你的反代域名,请考虑使用301的形式进行跳转。并可考虑将proxy_pass值改为 https://bt.byr.cn/
  • 如果你想同时实现v4纯挂钟(不建议),请考虑将你本地ut客户端的tracker地址中域名改为你建立的反代域名。(因为bt.byr.cn与tracker.byr.cn目前是alias的关系)

2018.09.05 更新

  • 因为站点对单一IP总数有上限,故禁止反代用户使用signup.php访问。在进入反代的location前,先deny掉。
location ~ signup\.php { deny all; }
  • 如果你的Nginx有lua模块,则可以使用lua模块输出相关提示信息。
location ~ signup\.php {
    content_by_lua_block {
        ngx.header.content_type = "text/plain";
        ngx.print('It\'s not allowed to use My reverse proxy to Signup any accounts in BYRBT~  by Rhilip, 2018.09.05')
        ngx.exit(403)
    }
}

本人目前使用配置为

[email protected]:~# cat /usr/local/nginx/conf/vhost/byr.rhilip.info.conf 
server {
     listen          80;
     server_name     byr.rhilip.info;
     include         no-spyder.conf;
     return          301 https://$server_name$request_uri;
}
server {
     listen          443 ssl;
     server_name     byr.rhilip.info;
     include         no-spyder.conf;

     client_max_body_size 40m;
     ssl_certificate /etc/cert/ssl.crt;
     ssl_certificate_key /etc/cert/ssl.nopass.key;
     ssl_session_timeout 5m;

     location ~ signup\.php {
          content_by_lua_block {
              ngx.header.content_type = "text/plain";
              ngx.print('It\'s not allowed to use My reverse proxy to Signup any accounts in BYRBT~  by Rhilip, 2018.09.05')
              ngx.exit(403)
          }
     }

     location / {
        proxy_pass          https://bt.byr.cn/;
        proxy_redirect      default;
        proxy_set_header    Accept-Encoding "";
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

        subs_filter src="https?://bt.byr.cn/ src="/ ir;
        subs_filter href="https?://bt.byr.cn/ href="/ ir;
     }
}

[email protected]:~# cat /usr/local/nginx/conf/no-spyder.conf
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") {
     return 403;
}

2019.09.30 更新

傻逼百度把本人反代站点排在“BYRBT”等搜索关键词的第一位,此外,登录和注册功能被某些二逼玩坏了(而且本人觉得这样挺好的)。
所以使用subs_filter方式,替换部分返回,当你访问本人反代的时候,会提示你如下信息:
110025.png
给被百度坑害的孩子一个正确的链接。。。。

标签: 反代, LNMP

非特殊说明,本博所有文章均为博主原创。

上一篇 没有了
下一篇 利用ipv6网络进行windows系统更新

评论啦~



已有 8 条评论


  1. Gao Jie
    Gao Jie

    谢谢,对我来说还是挺有用~~
    另外问一下,这种模式下tracker怎么用

    回复 2019-06-14 21:28
    1. Rhilip
      Rhilip 博主

      文章里面说了

      回复 2019-06-15 21:15
  2. jwerfj99j4thj9
    jwerfj99j4thj9

    啊明白了,改过来了,刚刚是我nginx的docker挂了。但是现在报502 bad gateway了(

    回复 2019-09-06 20:49
    1. jwerfj99j4thj9
      jwerfj99j4thj9

      明白了,是docker默认没开ipv6。。。我直接改host网络模式了

      回复 2019-09-06 23:27
  3. jwerfj99j4thj9
    jwerfj99j4thj9

    提问:您将tracker部分划掉了是说现在不行了还是仅仅是不推荐使用呢

    回复 2019-09-09 16:41
    1. Rhilip
      Rhilip 博主

      仅仅不推荐。用反代作为announce地址会让tracker抓到反代服务器的ip,可能会让管理认为同一ip下多个用户作弊。

      回复 2019-09-10 17:05
  4. jwerfj99j4thj9
    jwerfj99j4thj9

    提问:我搭好了之后套上cf,就没法访问了,看nginx日志全是301,这是为啥呀

    回复 2019-12-06 14:14
    1. jwerfj99j4thj9
      jwerfj99j4thj9

      我又明白了,301是因为纯http被301,而我的cf的tls调的flexible,所以cf会用http访问vps。改成strict就好了

      回复 2019-12-06 14:34