使用 Nginx 反向代理百度爬虫支持 Github Pages 收录 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
songxin
V2EX    分享创造

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

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

    使用 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  
    PRO
       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     Solana     4731 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:00 PVG 12:00 LAX 21:00 JFK 00:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86