如何在Nginx map指令中使用通配符?

前端之家收集整理的这篇文章主要介绍了如何在Nginx map指令中使用通配符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试使用Nginx来提供由Web应用程序生成的缓存文件,并发现了一个潜在的问题; url-space是宽的,并且将超过32000子目录的Ext3限制.

我想分解子目录,比如说,制作一个两级文件系统缓存.那么,我目前正在缓存一个文件

/var/cache/www/arbitrary_directory_name/index.html

我会把它存储在类似的东西中

/var/cache/www/a/r/arbitrary_directory_name/index.html

我的麻烦是我无法获得try_files,甚至重写以进行映射.我对这个问题的搜索让我相信我需要做这样的事情(严重缩写):

http {
    map $request_uri $prefix {
        /aa*   a/a;
        /ab*   a/b;
        /ac*   a/c;
        ...
        /zz*   z/z;
    }

    location / {
        try_files /var/cache/www/$prefix/$request_uri/index.html @fallback;

        # or
        # if (-f /var/cache/www/$prefix/$request_uri/index.html) {
        #     rewrite ^(.*)$/var/cache/www/$prefix/$1/index.html;
        # }
    }
}

但我不能得到/ aa *模式来匹配传入的uri.没有*,它将匹配一个精确的uri,但我不能让它匹配前两个字符.

Nginx文档建议应该允许使用通配符,但我看不到让它们工作的方法.有没有办法做到这一点?我错过了一些简单的事吗?或者我是以错误的方式来做这件事的?

我怀疑只有特殊的hostname mode支持globs.你需要使用正则表达式来实现这一点,所以你的地图应该是这样的:

map $request_uri $prefix {
    ~^/aa(?
原文链接:https://www.f2er.com/nginx/435529.html

猜你在找的Nginx相关文章