V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
songxin
V2EX  ›  分享创造

使用 Nginx 反向代理百度爬虫支持 Github Pages 收录

  •  
  •   songxin · 2018-06-22 10:55:19 +08:00 · 6510 次点击
    这是一个创建于 2371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 Nginx 反向代理百度爬虫支持 Github Pages 收录

    最近在学习 Nginx,想到既然 Nginx 可以做反向代理,为嘛不能直接代理百度爬虫,
    去向 github pages 请求,然后将结果返回给百度爬虫,这样就能直接让百度收录 github pages 了。
    百度爬取 github 给 403 的主要判断依据是 user agent,可以在 Nginx 中直接对 user agent 进行伪造。

    试了一下,的确可以。
    Nginx 具体配置如下:

    server{
             listen 80;
             server_name 3gods.com; #替换成自己的域名
             location / {
                 proxy_pass         https://songxin1990.github.io; #替换成自己的 github pages 主页
                 proxy_redirect     off;
                 proxy_set_header   User-Agent "Mozilla/5.0";
                 proxy_set_header   Host                        $host;
                 proxy_set_header   X-Real-IP                $remote_addr;
                 proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;
              }
    }
    

    但是这种收录方式必须要有台 vps 并装上 Nginx,所以自己写了个小程序, 主要就是接受 form 表单提交的要绑定域名和 github pages 的访问地址,然后后台生成一个 nginx.conf, 再 service nginx reload 一下就可以了。 具体的可以看这篇文章: Github Pages 百度索引收录工具

    程序很粗糙,不过大概会有哪些问题,自己都有考虑到,先看看又没人用吧,没人用的东西就没价值,后续也就没有继续优化改造的必要了。
    欢迎大家讨论,吐槽。

    34 条回复    2018-06-25 19:01:53 +08:00
    est
        1
    est  
       2018-06-22 11:04:31 +08:00
    意义何在?
    songxin
        2
    songxin  
    OP
       2018-06-22 11:15:40 +08:00
    @est 意义就是为了让百度收录,你不用在部署到 coding.net ,也不用在 vps 上搞个镜像站点,每次都要更新。而是直接让百度爬虫去 github pages 上抓取。
    torbrowserbridge
        3
    torbrowserbridge  
       2018-06-22 11:29:25 +08:00 via Android
    意义何在
    LongLights
        4
    LongLights  
       2018-06-22 11:32:18 +08:00
    感觉挺有意义的啊。。。这样一个人有一台 vps 就能帮一堆人的 GitHubPage 实现百度正常抓去了。。。
    zacksleo
        5
    zacksleo  
       2018-06-22 11:48:17 +08:00 via iPhone
    目前不抓吗
    kera0a
        6
    kera0a  
       2018-06-22 11:53:15 +08:00
    这样百度抓取的结果 URL 应该是 3gods.com ?(用你的示例),然后抓完了还得把 DNS 解析 改回 github pages 吧?
    不然 VPS 得一直开着,正常用户也得走代理
    Tink
        8
    Tink  
       2018-06-22 11:59:40 +08:00 via iPhone
    这和反带源站有何区别?
    BFDZ
        9
    BFDZ  
       2018-06-22 12:00:14 +08:00
    绑定自定义域名,百度就会收录,个人实测

    www.bfdz.ink

    bfdz.github.io
    songxin
        10
    songxin  
    OP
       2018-06-22 12:02:38 +08:00   ❤️ 1
    可能是我没交代清楚,问题是:百度无法收录 github pages,因为 github 对百度爬虫的访问直接给 403。
    之前的解决方法是:1.使用 coding 做镜像; 2.使用 vps 部署镜像站点,用 Nginx 反向代理避免一个 80 端口被占用;
    3.使用 CDN。
    这些方法都有些缺陷,coding.net 很恶心必须要主页贴 logo,vps 部署镜像要保证同步的问题还要搞各种依赖环境,CDN 没搞过不好说。

    这个方式就是只需要 Nginx 就可以了,伪造 user agent 让百度爬虫自己去抓,这样玩的人多了可能后续 github 会有一些反制措施,因为百度爬虫这东西非常不友好,不遵循 robots,每天爬取频次过高等。
    songxin
        11
    songxin  
    OP
       2018-06-22 12:05:20 +08:00
    @kera0a 这里域名肯定改成你自己的啊,DNS 里面肯定要加百度的线路解析,指向到 VPS 的外网 ip 就行了。
    songxin
        12
    songxin  
    OP
       2018-06-22 12:05:56 +08:00
    @BFDZ 真的假的?你百度直接抓 bfdz.github.io 没返回 403 ?
    MonoLogueChi
        13
    MonoLogueChi  
       2018-06-22 12:06:03 +08:00 via Android
    @kera0a 楼主的意思应该是,把你的域名百度解析到他的 VPS,然后反代去抓,这样抓到的页面是你的域名,而正常用户则会直接被解析到你的网站
    kera0a
        14
    kera0a  
       2018-06-22 12:10:10 +08:00
    @songxin
    @MonoLogueChi
    我只是用一下楼主的例子。 不太清楚怎么做到 百度爬虫 解析到 VPS 的 IP,正常用户解析到 github pages。
    DNSPod 有这种功能么?
    songxin
        15
    songxin  
    OP
       2018-06-22 12:14:52 +08:00
    @MonoLogueChi 是的,我这个东西只是帮大家的 github pages 能够让百度抓取,其他的没任何影响。
    DNS 里面要加一条线路类型为百度的 A 记录,地址填我的 VPS 的 ip。
    当然,我的 VPS 挂了,被攻击了,这也会有风险,因为对百度爬虫来说,站点更换 ip 对 SEO 有非常大影响,就看有没人信任,想用,仅此而已。

    我只是提供一种解决 github pages 被百度收录的方法,顺带提供一个小工具。
    自有 VPS 和 Nginx 的可以自己这么干,就不用这个了。
    songxin
        16
    songxin  
    OP
       2018-06-22 12:15:55 +08:00
    @kera0a 去学习了解下 DNS 和 Nginx 吧,我之前也搞很久。
    kera0a
        17
    kera0a  
       2018-06-22 12:19:31 +08:00
    @songxin 看了一下,确实是 DNSPod 的功能,我用的 cloudflare,没这种功能,这种方法是不能用了 - -
    ihancheng
        18
    ihancheng  
       2018-06-22 12:35:38 +08:00
    @BFDZ 实测不行哦,绑定自定义域名百度工具是抓取不到的。会有 403 错误,IP 显示为 xxx.github.io 的 IP

    抓取异常信息: 拒绝访问

    返回 HTTP 头:
    HTTP/1.1 403 Forbidden
    Cache-Control: no-cache
    Content-Type: text/html
    yuluofanchen
        19
    yuluofanchen  
       2018-06-22 15:07:05 +08:00
    整那么多干啥子。

    直接 xxx.github.io ,每天百度抓取一次,多次提交。发多点外链,1 个月内收录。10 个域名都是这样子的。
    songxin
        20
    songxin  
    OP
       2018-06-22 17:39:51 +08:00
    @yuluofanchen 收录不了。。。不信试试
    yuluofanchen
        21
    yuluofanchen  
       2018-06-22 18:18:54 +08:00
    @songxin 已经试过了。去年测试 10 个,收录 10 个。
    wql
        22
    wql  
       2018-06-22 19:08:25 +08:00 via Android
    百度之前的幺蛾子事情,应该是 github 屏蔽百度。
    swkl86
        23
    swkl86  
       2018-06-23 07:18:22 +08:00 via Android
    都用上 vps 了想不通为什么还要用 pages ?
    意义在于收录?你确定?用 pages 的人大部分都只是当一个记事本。
    真想做收录的肯定上 wp 了,意义何在?
    就为了 md 和 git?我只能说,你们真的好有空,加油!
    songxin
        24
    songxin  
    OP
       2018-06-23 07:48:09 +08:00
    @swkl86.。。。。
    songxin
        25
    songxin  
    OP
       2018-06-23 07:50:31 +08:00
    @swkl86 我建议你先看看我前面的回复。还有,为什么用了 VPS 就不应该用 pages ?有是更好的替代品吗?
    至少我觉得用 github 的 pages 或者 issues 来写点博客,记点东西是很方便的。
    Dawnki
        26
    Dawnki  
       2018-06-23 15:29:11 +08:00 via iPhone
    之前用 hexo 写博客就遇到这个收录问题,找朋友的 vps 试试看
    songxin
        27
    songxin  
    OP
       2018-06-23 16:21:13 +08:00
    @Dawnki 嗯,可以试试,不行就直接用我这个,至少目前不出大问题,我的 vps 不会换,linode 的 froment 机房,180ms 左右。
    ihancheng
        28
    ihancheng  
       2018-06-23 19:00:22 +08:00 via Android
    按照你的方法添加了解析,用了空闲的 vps 做了设置。。还是抓去不成功🙃心累
    songxin
        29
    songxin  
    OP
       2018-06-23 20:47:45 +08:00
    @ihancheng 可以把你的设置截个图,我有空帮看下,现在有点忙。
    msg7086
        30
    msg7086  
       2018-06-24 04:55:21 +08:00
    Google Pages 就是个静态网站托管。
    你都有 VPS 了,除非是硬盘容量不够,要不然服务器开个定时任务从 Git 上 Pull 下来启动就好了嘛。
    msg7086
        31
    msg7086  
       2018-06-24 04:55:51 +08:00
    ↑ 打错了 GitHub Pages。

    PS: 我自己用的 GitLab Pages,也挺好用的。
    songxin
        32
    songxin  
    OP
       2018-06-24 08:21:00 +08:00 via iPhone
    @msg7086 这样的话我要维护两份数据了。而且有图片占容量较大。
    codehz
        33
    codehz  
       2018-06-25 10:30:00 +08:00
    @songxin #32 图片不建议通过 github pages 来部署,首先,这玩意有流量上限。。。其次速度和专业的图床(即使是免费的)相比没有任何优势。

    另外 git pull 可以完全自动化实现(通过设置 webhook ),所以维护的问题也是不存在
    songxin
        34
    songxin  
    OP
       2018-06-25 19:01:53 +08:00
    @codehz 图片之前放七牛的,后面被恶意刷了几千 G 流量。
    webhook 简单看了下,就是进行一个 Git 操作后触发相应的通知机制,请求一个指定的 url。
    但是这样的话你又需要一个东西来接收处理这个 webhook 请求。

    另外,基于服务考虑,比如你这个工具后续要给成千上万的人使用,nginx 和 webhook 哪种方式更简单?
    基于资源考虑,也不太可能将每个人的仓库都做一个镜像。

    当然你自己的机器,怎么玩都可以,但是并不是每个人都有自己的机器。
    此贴就此略过了,以后不在回复。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1177 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:07 · PVG 02:07 · LAX 10:07 · JFK 13:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.