------------------ Original ------------------
Sender: "agentzh"<age...@gmail.com>;
Send time: Thursday, Feb 21, 2013 1:36 PM
To: "Collin/hug"<413...@qq.com>;
Cc: "openresty"<openresty@googlegroups.com>;
Subject: Re: Reply: Reply: nginx subrequest写cache的问题
Hello!
2013/2/20 Collin/hug:
>
> 我之前用了nginx proxy,我是这样做的,在nginx中配置一个location
> location ~ /.*\.(jpg|png|txt) {
> proxy_pass http://10.x.x.x;
> }
> 再在subrequest中请求内部服务器的资源(10.x.x.x是我内部的某个服务器),这没有问题。
>
> 我现在想实现的是对于任意一个url,比如我想去拉一张某图片网站上的图片,那我的proxy_pass 的backend server我就不知道怎么配了。
>
ngx_proxy 模块的 proxy_pass 配置指令支持变量,所以可以这么写:
proxy_pass http://$backend$uri?$args;
这样便能实现全动态的目标。当然,你需要同时配置 resolver 指令以指定 DNS 服务器。下面是一个完整的例子:
resolver 8.8.8.8;
location = /t {
set_unescape_uri $my_uri $arg_uri;
set_unescape_uri $my_args $arg_args;
set_unescape_uri $my_backend $arg_backend;
proxy_pass http://$my_backend$my_uri?$my_args;
}
可以通过这个通用的 /t 接口请求 http://luajit.org/luajit.html:
curl localhost:8080/t?uri=/luajit.html&args=&backend=luajit.org
假设当前的 nginx 服务器监听的是 8080 端口。
显然,我们可以通过这个 /t 访问网络中任意的 http 接口。事实上,就连 http:// 这个部分也可以通过变量控制。
Best regards,
-agentzh