V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
VKMEPR
V2EX  ›  NGINX

这个 nginx 反代问题有解决办法吗?

  •  
  •   VKMEPR · 2018-09-06 22:01:50 +08:00 · 3011 次点击
    这是一个创建于 2304 天前的主题,其中的信息可能已经有所发展或是发生改变。

    反代目标文件 http://a.com/123.txt 在该文件里有若干图片 URL,反代规则如下:

    location ~* \.(txt|png)$ {
        proxy_pass http://a.com;
    }
    

    这样可以反代 123.txt 和里面的图片资源,但后来 123.txt 这个文件里的图片 URL 附带了参数,类似这样:

    test.png?w=100&h=100

    于是相应改了反代规则,但这样就无法获取里面的图片资源了。用 Chrome 网站工具查看网络请求,网址链接是正确的,但返回 404 状态码。

    location ~* \.(txt|png?w=100&h=100)$ {
        proxy_pass http://a.com;
    }
    

    请问这种情况是目标源做了限制吗?(感觉不像,追加参数只是图片尺寸,也只是偶尔反代用下,频率极小),还是反代规则有问题?

    10 条回复    2018-09-07 15:33:12 +08:00
    VKMEPR
        1
    VKMEPR  
    OP
       2018-09-06 22:08:10 +08:00
    补充个细节:原来 123.txt 文件里的图片 URL 是相对路径链接,现在是绝对链接。
    ophark
        2
    ophark  
       2018-09-06 22:16:48 +08:00
    location ~* \.(txt|png)$ 这个不要改,后面的?w=100&h=100 是 args,不是 uri
    VKMEPR
        3
    VKMEPR  
    OP
       2018-09-06 22:27:46 +08:00
    @ophark 不改从 123.txt 里获取图片还是原来链接,网上说反代文件里的网址要另外安装 nginx 模块处理。可是之前没装也能用,现在变化的只是改成了完整 URL,还是相同域名。不知哪里出问题了。。
    pengwen
        4
    pengwen  
       2018-09-06 23:05:03 +08:00 via Android
    ?不应该转义吗,
    txt|png\?w=100&h=100
    pengwen
        5
    pengwen  
       2018-09-06 23:07:50 +08:00
    ```
    location ~* \.(txt|png\?w=100\&h=100)$ {
    proxy_pass http://a.com;
    }
    ```
    试试这个
    NickCarter
        6
    NickCarter  
       2018-09-06 23:23:01 +08:00 via iPhone
    感觉是楼上说的正则转义
    Lax
        7
    Lax  
       2018-09-07 00:58:03 +08:00
    加这一行试试呢
    proxy_set_header Host a.com;
    ryd994
        8
    ryd994  
       2018-09-07 05:05:07 +08:00 via Android
    “原来 123.txt 文件里的图片 URL 是相对路径链接,现在是绝对链接”
    这才是重点。换成绝对链接后你只能用 sub filter 或者 subs filter 来替换 host 部分。sub filter 是自带的,但只能替换文本。subs 支持 regex,但是要另外编译。
    你可以找找有没有带 subs 的二进制包。比如 Ubuntu 有 nginx-plus-module-subs-filter

    @pengwen 什么鬼转义
    Nginx 的 location 用的是 nomalized uri,根本没有 args
    pengwen
        9
    pengwen  
       2018-09-07 09:27:53 +08:00
    @ryd994 你说的对,一时间没想起 args,看到正则第一反应是不是正则出问题了
    VKMEPR
        10
    VKMEPR  
    OP
       2018-09-07 15:33:12 +08:00
    @ryd994 感谢!确实是这个问题,添加 subs_filter 模块解决了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2303 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:08 · PVG 00:08 · LAX 08:08 · JFK 11:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.