Nginx
NGINX 重定向到子文件夾中的記憶體文件
我有一個程序可以創建優化版本的圖片,這些圖片會上傳到
/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; }