使用 nginx 在具体目录中处理不同的静态文件

使用 nginx 在具体目录中处理不同的静态文件

我正在构建一个应用程序,其中一些文件将由应用程序本身提供。我不擅长配置服务器端的东西,所以我的 nginx 配置如下:

location ~* (.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$ {
    try_files $uri $1.$3;
}

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|txt)$ {
    access_log  off;
    expires     30d;
    root        /var/www/domain_tld/public;
}

我知道第二条规则是为了提供由 nginx 直接列出的扩展,这很酷,但我想要一条规则:

/data/photos/{string}/{name}.{extension}

先感谢您

答案1

我假设您希望为服务器提供一个类似于(.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$以下文件的位置 URI /data/photos/$1/$2.$3

然后,就这么简单(请注意,我稍微修改了正则表达式,尽可能将所有情况列入白名单可能会更完美):

location ~* ^/(?<string>.+)\.(?<name>\d+)\.(?<extension>js|css|png|jpg|jpeg|gif)$ {
    root /data/photos;
    try_files $string/$name.$extension =404;
}

调用该/myString.file.extURI 将提供以下来源的内容/data/photos/myString/file.ext

请注意,所有 nginx 位置都以 开头/

还要记住的是,每个请求都由只有一个位置,因此如果它们应该同时应用于请求,您可能需要合并它们。

相关内容