Nginx
名稱中包含查詢字元串的文件。需要 nginx 忽略內容標頭的查詢字元串
有一個包含大量文件的目錄。這些都是來自備份的靜態文件。
問題是某些文件的名稱如下:
mystyle.css?version=3.3.1
提供文件時,nginx 沒有檢測到文件是 css,因此不發送
Content-Type: text/css
標頭,這給我帶來了一些麻煩。重命名文件非常麻煩,因為它需要重命名大量文件,同時還要在 html、javascript 等內部重命名它們。是否可以幫助 nginx 忽略 ? 和查詢字元串的其餘部分,只檢查 mystyle.css 以確定要服務的 mimetype 類型?這對於像 SVG 圖像這樣的東西來說尤其麻煩,因為瀏覽器不會檢測到它們,除非您將它們作為
image/svg+xml
.
Nginx 查看最終文件名並得出副檔名是
css?version=3.3.1
. 它在types
塊中查找它並沒有找到匹配項,因此使用 的值default_type
來代替。如果您在一個文件夾下擁有所有 CSS 類型文件,而在另一個文件夾下擁有所有 SVG 類型文件 - 或者如果不同類型的 URI 路徑是唯一的,則可以為特定位置中的所有文件設置 mime-type:
location /css { types { } default_type text/css; }
從問題的第一行開始,您表示有一個目錄包含大量文件,可能具有不同的 mime 類型。
您可以使用
map
帶有正則表達式的指令來辨識文件的 mime 類型。您需要為目錄中包含的每種類型的文件添加一行。我的範例僅包含一些。該文件/etc/nginx/mime.types
包含 Nginx 通常配置為辨識的類型,但您只需將當前歸檔的文件類型添加到此目錄。map $request_uri $type { default application/octet-stream; ~*\.css text/css; ~*\.js application/javascript; } server { ... location /some/path { default_type ""; types { } add_header Content-Type $type; } }
免責聲明:這可能是一個 hack,但似乎有效。
將 設置
default_path
為空字元串和空types
塊,可以防止 Nginx 添加自己的 Content-Type 標頭。有關指令的詳細資訊,請參閱本文件。
map