在具體目錄中使用 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

我假設您希望提供一個位置 URI,(.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$例如/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;
}

對 URI 的呼叫/myString.file.ext將提供以下內容:/data/photos/myString/file.ext

請注意,所有 nginx 位置都以/.

另請記住,每個請求均由只有一個位置,因此,如果它們應該同時應用於請求,您可能需要合併您的兩個。

相關內容