Nginx Proxy_pass try_files下拉到位置处理程序

时间:2016-01-26 17:04:19

标签: nginx alias proxypass

我正在尝试将try_files与proxy_pass(或其他别名)结合使用。

当前配置:

location /staticsrv {
    alias /var/www/static/trunk/;
    #proxy_pass http://static.localtest.nl/;
}
location ~ ^/staticsrv/images/gallery/(.*)$ {
    try_files $uri @img_proxy;
}
location @img_proxy {
    rewrite ^(.*)$ /index.php/?c=media&m=index&imag=$uri;
}

然而,对于每个文件,它都会被删除到重写规则,因为它不存在。 有没有“技巧”(读取正确的配置)来解决我的不幸?或者它是不可能的?这两个域最终将位于同一服务器上,因此我们可以使用别名和proxy_pass。

提前致谢

1 个答案:

答案 0 :(得分:1)

您的location ~ ^/staticsrv/images/gallery/(.*)$需要rootalias来构建try_files尝试的本地路径。此外,您不一定需要正则表达式:

location /staticsrv/images/gallery/ {
    alias /var/www/static/trunk/images/gallery/;
    try_files $uri @img_proxy;
}
location @img_proxy {
    rewrite ^ /index.php/?c=media&m=index&imag=$uri last;
}

proxy_pass无法与try_files一起使用,因为其中一个处理远程内容而另一个处理本地内容。

由于this open bug,我尽量避免在同一位置区块中使用aliastry_files

可能的解决方法是使用与文档根密切匹配的另一个中间 URI:

location /staticsrv/images/gallery/ {
    rewrite ^/staticsrv(.+)$ /trunk$1 last;
}
location /trunk {
    internal;
    root /var/www/static;
    try_files $uri @img_proxy;
}
location @img_proxy {
    rewrite ^ /index.php/?c=media&m=index&imag=$uri last;
}