假设我有一个example.com
装有 nginx 的服务器。
我想创建一个代理,它将代理传递作为请求 URI 或 GET 参数的一部分给出的 URL(它可能包含查询字符串)。
例如,我希望 nginx在发出请求http://www.google.pl/image.png?x=y
时进行解析。GET example.com/proxy/http://www.google.pl/image.png?x=y
我曾尝试过这样的事情:
location /proxy {
rewrite /proxy(.*) /$1 break;
resolver 8.8.8.8;
proxy_pass http://$arg_host/$arg_uri?$query_string;
}
也许我想要重定向?假设我想提供位于不同服务器上的图像(在我的域上)。
答案1
尝试这个:
location ~ /proxy/(http://.*) {
resolver 8.8.8.8;
proxy_pass http://$1$is_args$args;
}
不需要明确重写。如果请求行有参数,$is_args
则将设置为?
,否则将设置为空字符串,并且$args
将包含请求中的参数(不包括?
),如果没有查询参数,则设置为空字符串。$1
将匹配位置正则表达式中包含的 URI 部分( ... )
。