Nginx

NGINX 重定向到子文件夾中的記憶體文件

  • July 6, 2021

我有一個程序可以創建優化版本的圖片,這些圖片會上傳到/images/網路伺服器上的文件夾中。它遍歷子文件夾並在每個子文件夾中創建一個.optimized包含優化版本的文件夾,如果它至少比原始版本小一定大小。我的目標是檢查是否存在這樣的優化版本,如果存在則提供它,否則提供原始版本(在某種意義上gzip_static,如果它存在,如何提供文件的 .gz 版本)。

我在 Apache 前面將 NGINX 作為代理執行,所以雖然我習慣於使用 htaccess 處理此類問題,但我試圖在 NGINX 中本地執行它以避免伺服器不得不將請求移交給 Apache。在.htaccess,我可以做這樣的事情:

RewriteCond %{REQUEST_FILENAME} ^(/images/(?:.*/)?)(.*?)$ [OR]
RewriteCond $1.optimized/$2 -f
RewriteRule .* $1/.optimized/$2 [L]

有沒有直接在 NGINX 中處理這個問題的好方法?我發現的大多數類似案例都將所有記憶體/優化文件保存在一個記憶體文件夾中,這與我描述的結構相反。

您可以使用正則表達式location來提取 URI 的第一部分和第二部分。使用try_files語句按順序在文件系統中搜尋每個文件。

例如:

location ~ ^(/images/.*?)([^/]+)$ {
   try_files $1.optimized/$2 $1$2 =404;
}

引用自:https://serverfault.com/questions/1068714