加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

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

发布时间:2020-12-13 21:22:31 所属栏目:Nginx 来源:网络整理
导读:我正在尝试使用Nginx来提供由Web应用程序生成的缓存文件,并发现了一个潜在的问题; url-space是宽的,并且将超过32000子目录的Ext3限制. 我想分解子目录,比如说,制作一个两级文件系统缓存.那么,我目前正在缓存一个文件 /var/cache/www/arbitrary_directory_nam

我正在尝试使用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(?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读