有時您可能需要強制用戶從您的網站下載內容,而不是在他們的網站上查看。如果您的網站有很多可下載的內容,這一點很重要。在本文中,我們將了解如何在 NGINX 中強制下載文件。強制文件下載可防止用戶在您的服務器上流式傳輸這些文件并減少您網站的服務器負載。
現在的瀏覽器能夠識別很多文件類型(txt,pdf,jpg...),并在瀏覽器中自動打開
情況一:
添加頭信息Content-Disposition "attachment;"會使瀏覽器強制下載:
代碼如下:
#表示瀏覽器內嵌顯示一個文件 Content-disposition: inline; filename=foobar.pdf #表示會下載文件,如火狐瀏覽器中 Content-disposition: attachment; filename=foobar.pdf
nginx配置如下,在相應的server中添加如下location:
代碼如下:
location /download { add_header Content-Disposition "attachment;"; }
情況二:
有這么一個需求,對于圖片文件和pdf等文件鏈接,只要訪問實在某個路徑下,不能在瀏覽器中打開圖片,而是提示用戶保存到本地,文件名使用訪問的文件名。
這個問題主要是IE造成的,不管mime類型是什么,比如人工把圖片的mime類型設置為octet-stream,如果瀏覽器認識文件后綴的話,仍然會在瀏覽器中打開圖片。
解決方案:
在響應的http頭添加:Content-Disposition: attachment; filename=文件名
nginx配置如下:
代碼如下:
location ~ ^/somepath/(.*)$ { add_header Content-Disposition "attachment; filename=$1"; alias "E:/apache-tomcat-7.0.32/webapps/upload/$1"; }
這里使用到了正則表達式,捕獲請求的文件名。
另外,需要注意nginx的location優先級,首先是=,然后是^~,最后才是~。
基本上,您需要在要強制下載的 URL 的位置塊中添加以下行。
add_header Content-disposition "attachment; filename=$1"; default_type application/octet-stream;
上面兩行將內容處置標頭設置為“附件”,將內容類型設置為“應用程序/八位字節流”以啟用下載。
例如,如果您想對以 /downloads 開頭的所有 URL 強制下載,則在該文件夾的位置塊中添加上述行,如下所示。
location /downloads { ... add_header Content-disposition "attachment; filename=$1"; default_type application/octet-stream; ... }
如果您想強制下載以某些文件類型和擴展名(例如 .jpg、.png、.mp3 等)結尾的所有文件,請在用于這些文件類型的位置塊中添加上述 2 行。
location ~* ^/.+.(?:gif|jpe?g|png|mp4|mp3)$ { ... add_header Content-disposition "attachment; filename=$1"; default_type application/octet-stream; ... }
以上修改完成后需要重啟Nginx,或重新加載
nginx -s reload
審核編輯:湯梓紅
-
服務器
+關注
關注
12文章
9300瀏覽量
86056 -
HTTP
+關注
關注
0文章
511瀏覽量
31518 -
瀏覽器
+關注
關注
1文章
1035瀏覽量
35527 -
代碼
+關注
關注
30文章
4824瀏覽量
69035 -
nginx
+關注
關注
0文章
154瀏覽量
12229
原文標題:Nginx文件強制下載的配置方法
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論