【问题标题】:Nginx Proxy_pass try_files drop to location handlerNginx Proxy_pass try_files 放到位置处理程序
【发布时间】:2016-01-27 02:00:25
【问题描述】:

我在 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;
}

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

提前致谢

【问题讨论】:

    标签: nginx alias proxypass


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2020-06-09
      • 2017-01-17
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      相关资源
      最近更新 更多