Nginx

Nginx 靜態文件排除一個或一些文件副檔名

  • January 1, 2020

我正在通過 nginx 提供一個靜態站點。

   location ~* \.(avi|bin|bmp|dmg|doc|docx|dpkg|exe|flv|gif|htm|html|ico|ics|img|jpeg|jpg|m2a|m2v|mov|mp3|mp4|mpeg|mpg|msi|pdf|pkg|png|ppt|pptx|ps|rar|rss|rtf|swf|tif|tiff|txt|wmv|xhtml|xls|xml|zip)$ {
       root /var/www/html1;
       access_log off;
       expires 1d;
   }

我的目標是排除像http://connect1.webinar.ru/converter/task/. 全視圖就像http://mydomain.tld/converter/task/setComplete/fid/34330/fn/7c2cfed32ec2eef6788e728fa46f7a80.ppt.swf。儘管這些 URL 以這種格式結束,但它們不是靜態的,而是偽造的腳本請求,所以我對它們有疑問。

做這個的最好方式是什麼?如何為此 URL 添加排除項,或者我可以從該 Nginx 位置的列表中排除特定的文件副檔名(.ppt.swf、pptx.swf)?

謝謝。

location ~* \.(?:avi|bin|bmp| ... |(?<!\.pptx\.|\.ppt\.)swf)$ {
   root /var/www/html1;
   access_log off;
   expires 1d;
}

.

$ man pcrepattern
$ man pcresyntax

由於您在靜態文件的位置使用正則表達式,因此您只需向其添加!pptx?\.swf條件並排除條件swf

您的位置將如下所示:

位置 ~* \.(avi|bin|bmp| ... |!pptx?\.swf)$ {
根 /var/www/html1;
access_log 關閉;
1d 到期;
}

並且不要忘記為*.swf文件添加單獨的位置:

位置 ~* [0-9a-z]*\.swf$
根 /var/www/html1;
access_log 關閉;
1d 到期;
}

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