问一个 nginx 相关的问题! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sologgfun
V2EX    问与答

问一个 nginx 相关的问题!

  •  
  •   sologgfun 2019-06-25 19:34:01 +08:00 2535 次点击
    这是一个创建于 2301 天前的主题,其中的信息可能已经有所发展或是发生改变。

    起因是这篇文章

    https://github.com/EtherDream/jsproxy/blob/master/docs/blogs/js-hook.md

    里面有这样一段描述

    举个例子,假如我们用 a.com 反向代理 b.com ,并且 b.com 有如下网页: <img src="http://www.v2ex.com/foo.gif"> <img src="http://b.com/bar.gif"> 第一个 img 是相对路径。由于当前实际地址是 a.com ,因此最终访问的 URL 是 http://a.com/foo.gif 。我们的后端服务器收到请求后,抓取 http://b.com/foo.gif 的内容并返回给用户。这没有问题。 第二个 img 是绝对路径,这就有问题了!浏览器会直接访问 b.com ,根本不经过我们的后端。而 b.com 是无法直接访问的,于是图片加载失败。 

    我的问题是:难道我用 nginx 反向代理页面的话,绝对路径的资源真的都不会经过 nginx 这层吗?

    有老哥给我科普一下吗,这和我的理解不一样阿,我一直以为 nginx 就是把我请求的所有资源一起在它那里请求完给我。不是吗?

    13 条回复    2019-06-26 08:44:52 +08:00
    momocraft
        1
    momocraft  
       2019-06-25 19:39:33 +08:00
    为什么不自己试一下呢
    misaka19000
        2
    misaka19000  
       2019-06-25 19:48:38 +08:00
    绝对路径或相对路径都是浏览器发起的请求,只不过相对路径能命中 Nginx 而绝对路径无法命中 Nginx 而已
    imdong
        3
    imdong  
       2019-06-25 19:51:54 +08:00
    是的,绝对路径是真的绝对不会变得。

    但是,你可以在 nginx 替换 b.coma.com
    或者在页面头部加一个自己的 js
    js 接管页面的加载错误,把错误地址改成正确的重新请求。
    jiao
        4
    jiao  
       2019-06-25 19:54:45 +08:00
    你写个 baidu.com 绝对路径的 img 标签,浏览器请求的图片压根跟你服务器没关系啊。
    ochatokori
        5
    ochatokori  
       2019-06-25 19:56:46 +08:00 via Android
    是的,这个图片对于浏览器来说是个跨域资源,会直接向 b 获取资源

    同样的问题可能还会出现在 30x 重定向上,a 有可能会被重定向到 b
    MonoLogueChi
        6
    MonoLogueChi  
       2019-06-25 20:01:33 +08:00 via Android
    第一个是绝对路径,第二个是 URL。
    先说第一个的行为,浏览器解析标签,知道请求 a.com/foo.gif 可以得到这张图片,就去发起这个请求
    再说第二个,浏览器解析之后一看,这张图片的地址是 b.com/foo.gif ,就去发起这个请求
    waytostand
        7
    waytostand  
       2019-06-25 20:06:39 +08:00 via iPhone
    6 楼正解
    sologgfun
        8
    sologgfun  
    OP
       2019-06-25 20:32:35 +08:00
    @momocraft 主要这个要试一下感觉还有点麻烦,,所以直接问一下 h
    msg7086
        9
    msg7086  
       2019-06-25 23:13:02 +08:00
    > “把我请求的所有资源一起在它那里请求完给我”

    HTTP 不是这样工作的。
    HTTP 是一次只返回一个资源,浏览器读取文件以后,再次解析然后再次向服务器请求后续资源。
    所以不存在“一起请求”这个过程,也不会出现“请求的所有资源”这样的东西。
    hlwjia
        10
    hlwjia  
    PRO
       2019-06-25 23:30:30 +08:00 via iPhone
    我的天,首先别说绝对不绝对路径的

    第二个 url 你期望他也经过你的 nginx ? render 那个地方的是浏览器啊,浏览器发起的 b 站请求就因为这个是 a 站 render 出来的页面所以要经过你的 nginx。

    那么 cdn 拿来干嘛?
    also24
        11
    also24  
       2019-06-25 23:37:17 +08:00
    > nginx 就是把我请求的所有资源一起在它那里请求完给我。
    划掉 『一起』二字之后确实是正确的。

    但是你需要注意的是,浏览器请求 http://b.com/bar.gif 的时候,并不需要经过你的 nginx,也就是说前提都不满足。


    想要达到 http://b.com/bar.gif 这种资源也能处理的目的的话,就需要做内容替换,例如把所有的 『 b.com 』都替换为 『 a.com 』。

    你可以参考这个模块:
    http://nginx.org/en/docs/http/ngx_http_sub_module.html
    或者第三方模块:
    https://github.com/yaoweibin/ngx_http_substitutions_filter_module
    also24
        12
    also24  
       2019-06-25 23:40:23 +08:00
    仔细看了下那个文章,它用 JS hook 方式处理了内容替换的问题,那就不需要 nginx 操心了。
    sologgfun
        13
    sologgfun  
    OP
       2019-06-26 08:44:52 +08:00
    是我自己误解了,现在懂了,感谢哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2214 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:08 PVG 00:08 LAX 09:08 JFK 12:08
    Do have faith in what you're doing.
    ubao 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