反代目标文件 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;
}
请问这种情况是目标源做了限制吗?(感觉不像,追加参数只是图片尺寸,也只是偶尔反代用下,频率极小),还是反代规则有问题?
1
VKMEPR OP 补充个细节:原来 123.txt 文件里的图片 URL 是相对路径链接,现在是绝对链接。
|
2
ophark 2018-09-06 22:16:48 +08:00
location ~* \.(txt|png)$ 这个不要改,后面的?w=100&h=100 是 args,不是 uri
|
3
VKMEPR OP @ophark 不改从 123.txt 里获取图片还是原来链接,网上说反代文件里的网址要另外安装 nginx 模块处理。可是之前没装也能用,现在变化的只是改成了完整 URL,还是相同域名。不知哪里出问题了。。
|
4
pengwen 2018-09-06 23:05:03 +08:00 via Android
?不应该转义吗,
txt|png\?w=100&h=100 |
5
pengwen 2018-09-06 23:07:50 +08:00
|
6
NickCarter 2018-09-06 23:23:01 +08:00 via iPhone
感觉是楼上说的正则转义
|
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 |