小编Ian*_*and的帖子

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

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

我想分解子目录,例如制作一个两级文件系统缓存。所以,我目前缓存文件的位置

/var/cache/www/arbitrary_directory_name/index.html
Run Code Online (Sandbox Code Playgroud)

我会把它存储在类似的地方

/var/cache/www/a/r/arbitrary_directory_name/index.html
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法获得try_files,甚至rewrite无法进行映射。我对这个主题的搜索使我相信我需要做这样的事情(大量缩写):

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;
        # }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无法获得/aa*与传入的 uri 匹配的模式。没有*,它将匹配一个确切的 uri,但我无法让它只匹配前两个字符。

Nginx 文档建议应该允许使用通配符,但我看不到让它们工作的方法。有没有办法做到这一点?我错过了一些简单的东西吗?还是我以错误的方式解决这个问题?

nginx

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

nginx ×1