请教一个 nginx 反代 google 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ghy459
0.44D
V2EX    NGINX

请教一个 nginx 反代 google 的问题

  •  1
     
  •   ghy459
    ghy459 2014-10-26 14:16:59 +08:00 8480 次点击
    这是一个创建于 4081 天前的主题,其中的信息可能已经有所发展或是发生改变。
    先贴配置:

    server
    {
    listen 443;
    server_name g4w.me;

    ssl_certificate /root/ssl/g4w.me.crt;
    ssl_certificate_key /root/ssl/g4w.me.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
    ssl_prefer_server_ciphers on;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

    location / {
    subs_filter www.google.com g4w.me;
    subs_filter ssl.gstatic.com www.g4w.me;
    subs_filter_types text/css text/xml text/Javascript;

    proxy_redirect off;
    proxy_pass https://www.google.com;
    proxy_set_header Host www.google.com;
    proxy_set_header User-Agent $http_user_agent;
    proxy_set_header Accept-Encoding '';
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }

    使用 ngx_http_substitutions_filter_module 模块对页面内容进行替换,但发现只有 www.google.com 能够成功替换,而 ssl.gstatic.com 一直替换不了。请问这是什么原因?

    具体可以访问 https://g4w.me 看看。

    PS.已经试过 ngx_http_sub_module 和 replace-filter-nginx-module ,都是 www.google.com 起作用了而 ssl.gstatic.com 不起作用。
    32 条回复    2014-11-23 16:22:39 +08:00
    anjunecha
        1
    anjunecha  
       2014-10-26 14:39:10 +08:00 via Android
    把两个域名分开反代,你试试另建一个新的 conf 文件,专门用来反代 ssl.gstatic.com, server_name 填为 www.g4w.me
    ghy459
        2
    ghy459  
    OP
       2014-10-26 14:46:06 +08:00
    @anjunecha 这一步已经做好了。

    现在的问题是,g4w.me 里面的 ssl.gstatic.com 不会自动替换成 www.g4w.me ,而是仍然访问原地址。
    anjunecha
        3
    anjunecha  
       2014-10-26 15:07:20 +08:00 via Android   2
    @ghy459 我明白你的问题出在哪里了,但是我现在暂时在外面,手机上贴代码不方便,等我一会儿回家之后给你贴代码,稍等我一下可以吗?
    ghy459
        4
    ghy459  
    OP
       2014-10-26 15:20:21 +08:00
    @anjunecha 没关系,先谢了~
    anjunecha
        5
    anjunecha  
       2014-10-26 16:07:36 +08:00
    @ghy459 你试试在你刚刚建的第二个 conf 文件里面使用这样的设置,使用下面的代码

    server
    {
    listen 443 ssl;
    server_name www.g4w.me;

    ssl_certificate /root/ssl/g4w.me.crt;
    ssl_certificate_key /root/ssl/g4w.me.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
    ssl_prefer_server_ciphers on;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

    location / {
    subs_filter www.google.com g4w.me;
    subs_filter ssl.gstatic.com www.g4w.me;
    subs_filter_types text/css text/xml text/Javascript;

    proxy_set_header Accept-Encoding "";
    proxy_set_header Accept-Langauge "zh-CN";

    proxy_pass https://ssl.gstatic.com/;

    # cookie domain replace
    proxy_cookie_domain ssl.gstatic.com www.g4w.me;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }
    ghy459
        6
    ghy459  
    OP
    &nsp;  2014-10-26 16:50:53 +08:00
    @anjunecha 我的 www.g4w.me 配置跟你写的基本一样了。

    其实现在的问题不在 www.g4w.me 的反代上,而是 g4w.me 里面的

    subs_filter ssl.gstatic.com www.g4w.me;

    这句话不起作用,导致在访问 g4w.me 的时候仍然向 ssl.gstatic.com 发送请求而不是向 www.g4w.me 发送。



    要达到的效果是下面红线的 ssl.gstatic.com 替换成 www.g4w.me
    fairytale
        7
    fairytale  
       2014-10-26 17:51:51 +08:00
    复杂点的替换,用代码实现吧,比如knproxy
    spance
        8
    spance  
       2014-10-26 17:56:50 +08:00   5
    想要完美一点,就不要折腾subs_filter了。
    好用的方案在这里 https://github.com/spance/AirGoo
    hzqim
        9
    hzqim  
       2014-10-26 18:35:57 +08:00
    域名反代不了,就反代IP.
    yingluck
        10
    yingluck  
       2014-10-26 20:51:51 +08:00   1
    试试subs_filter ‘//ssl.gstatic.com’,加上双引号

    其实这个只是个图片,不影响搜索
    rentaro
        11
    rentaro  
       2014-10-26 21:12:29 +08:00
    我也用 subs_filter,只有这一个资源不知为何无法反代 https://www.google.com/textinputassistant/tia.png
    ghy459
        12
    ghy459  
    OP
       2014-10-26 21:33:13 +08:0
    @rentaro 加上这一行就好了
    subs_filter www.google.com xxx.me;
    ghy459
        13
    ghy459  
    OP
       2014-10-26 21:37:18 +08:00
    @yingluck 加了双引号还是不行。这个 load 不出来的话标签那里就一直转,强迫症要犯了=。=
    ghy459
        14
    ghy459  
    OP
       2014-10-26 21:37:39 +08:00
    @spance 好像很强大的样子,晚点试试
    rentaro
        15
    rentaro  
       2014-10-26 21:47:51 +08:00
    @ghy459 这句是加了的,我是说除了这一个资源其他都反代成功
    ghy459
        16
    ghy459  
    OP
       2014-10-26 21:58:40 +08:00
    @rentaro 额,我就是加了这个,然后成功反代你说的资源。。。
    anjunecha
        17
    anjunecha  
       2014-10-26 22:23:53 +08:00
    @ghy459 不能实现?可以试试通过反代 IP ,把之前我贴的那个配置里面的 proxy_pass 参数改一下试试

    具体改为 :

    proxy_pass https://ssl.gstatic.com/;

    改为

    proxy_pass http://173.194.38.127;
    rentaro
        18
    rentaro  
       2014-10-26 22:30:29 +08:00   1
    ssl.gstatic.com 这个,我是用 subs_filter 替换为一个子目录,比如 www.g4w.me/gstc。然后
    用这个子目录去反代资源
    rentaro
        19
    rentaro  
       2014-10-26 22:31:55 +08:00
    呃,描述有误,目录的叫法不对
    anjunecha
        20
    anjunecha  
       2014-10-26 22:44:17 +08:00 via Android   1
    @rentaro 可能表述为路径更妥当
    ghy459
        21
    ghy459  
    OP
       2014-10-26 23:00:43 +08:00
    @anjunecha 谢谢你的帮忙哈,不过我暂时放弃了,明天还要上班=。=
    现在用了@spance 提供的 https://github.com/spance/AirGoo ,配置简单,先凑合着用。。
    ghy459
        22
    ghy459  
    OP
       2014-10-26 23:01:05 +08:00
    @rentaro 嗯,有空我再去试试,先谢了
    rentaro
        23
    rentaro  
       2014-10-26 23:17:30 +08:00
    @anjunecha 借地请教,11楼中我的反代小问题,配置和之前 /t/126028 类似,先行谢过
    anjunecha
        24
    anjunecha  
       2014-10-27 07:37:16 +08:00   1
    @rentaro 之前的那篇帖子就是我写的,很多时候如果反代域名不行的话可以试试通过反代 IP 的形式,
    ryd994
        25
    ryd994  
       2014-10-27 18:45:43 +08:00 via Android   1
    sub_filter对gzip内容无效,你试试改accept-encoding
    ryd994
        26
    ryd994  
       2014-10-29 15:14:52 +08:00 via Android
    @anjunecha 反带域名不行是没有upstream,
    加一个resolver 就好
    imxz
        27
    imxz  
       2014-10-30 00:56:46 +08:00
    @spance

    您好,请问如果想要反代谷歌学术的话,是否只需要修改airgoo.js中的hostname为 scholar.google.com 即可? 此外,如果为了用户访问不加https的网址时能跳转到https,在nginx中配置了301重定向,还能否正确发送x-forwarded头,以及ip、cookie等信息 ?

    谢谢 !
    spance
        28
    spance  
       2014-10-30 17:44:55 +08:00
    @imxz
    改hostname是可以的,只是没有对scholar作专门测试,可能会有部分请求漏网。
    301不影响。
    https server部分按照wiki配好就ok了。
    imxz
        29
    imxz  
       2014-10-30 20:10:21 +08:00   1
    @spance

    谢谢回复。

    我测试了一下,没用域名,直接ip访问的时候,直接改hostname为scholar.google.com好像不行,他会跳转到一个类似 xxx.xxx.xxx.xxx.nord (记忆中)的地址
    spance
        30
    spance  
       2014-10-30 20:53:14 +08:00   2
    @imxz
    google的js会去监测当前域的,而且很多地方用了大量的绝对地址和js拼接地址,如果没有处理干净,漏网的请求就能把页面重定向了。
    而且google得js经常升级变化,如果你的确需要scholar.google.com那最好分析一下跳转,然后把处理规则写到defines.js中,我可能没有精力去弄scholar了,维护一个项目都挺累的,毕竟业余时间也很有限啊。
    imxz
        31
    imxz  
       2014-10-30 21:41:43 +08:00
    @spance 好的,谢谢你!
    popphen
        32
    popphen  
       2014-11-23 16:22:39 +08:00
    @spance 哥们谢谢你,一下实现了我的想法
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3478 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 05:05 PVG 13:05 LAX 21:05 JFK 00:05
    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