Nginx

嵌套位置無法正常工作

  • January 21, 2018

我無法調試這段 nginx 配置:

我想為文件的所有請求添加一些標頭.pdf然後

我想刪除我添加到我的 veiw 目錄中的令牌以避免不需要的瀏覽器記憶體:

location /static {
   location ~* \.pdf$ {
       add_header Access-Control-Allow-Origin *;
       add_header Content-Disposition 'inline';
   }
   #Remove Anti cache token
   rewrite "^/static[0-9]{10}/(.*)$" /static/$1 last;
   ...
}

沒有 nginx 語法錯誤,但請求.pdffor 顯示 404 not found 錯誤意味著重寫不適用於請求。

非常感謝任何幫助

謝謝

nginx選擇一個location處理請求時,它可以選擇內塊或外location塊。它沒有結合兩者的陳述。

rewrite不被嵌套繼承location。如果您希望將rewrite其應用於所有位置,則應將其置於server塊範圍內。

您的語句的正則表達式rewrite足夠具體,可以按原樣移動。

例如:

rewrite "^/static[0-9]{10}/(.*)$" /static/$1 last;

location /static {
   location ~* \.pdf$ {
       add_header Access-Control-Allow-Origin *;
       add_header Content-Disposition 'inline';
   }
   ...
}

當然,在兩個塊中重複該rewrite語句可能更有效。location


另一種方法是rewrite完全避免這種情況,並使用正則表達式通過使用指令location來刪除反記憶體令牌。alias有關更多資訊,請參閱此文件

例如:

location ~ "^(?<prefix>/static)[0-9]{10}(?<suffix>/.*)$" {
   alias /path/to/root$prefix$suffix;

   location ~* \.pdf$ {
       add_header Access-Control-Allow-Origin *;
       add_header Content-Disposition 'inline';
   }
   ...
}

請注意,正則表達式location塊與前綴塊具有不同的評估順序location。有關詳細資訊,請參閱此文件

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