日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx配置技巧汇总

發布時間:2025/4/16 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx配置技巧汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Nginx作為文件服務

避免瀏覽器自動播放文件

有時對于圖片、視頻,瀏覽器會視能力,自動為用戶顯示或播放。這主要是由于Web服務器在返回文件本身數據的同時,返回了一些特殊的MIME類型,比如:image/jpeg(JPEG圖像),application/pdf(PDF文檔),video/mpeg(MPEG動畫)。這些MIMIE類型實際上是告訴瀏覽器,文件數據到底是什么,這樣瀏覽器就能更好的為用戶展示數據。現在像圖片、pdf、甚至是視頻基本都是可以直接在瀏覽器中展示和播放的。但是有時,我們需要瀏覽器為用戶下載文件而不是直接播放,而Nginx在默認配置下,會根據文件的后綴來匹配相應的MIME類型,并寫入Response header,導致瀏覽器播放文件而不是下載,這時需要通過配置讓Nginx返回的MIME類型為下面這個類型:

application/octet-stream

這個類型會讓瀏覽器認為響應是普通的文件流,并提示用戶下載文件。可以通過在Nginx的配置文件中做如下配置達到這樣的目的:

location?/download/?{types????????{?}default_type?application/octet-stream; }

這樣當Url路徑中包含/download/時,MIME類型會被重置為application/octet-stream。另外,nginx自帶的MIME類型映射表保存在conf/mime.types中。

文件上傳大小限制放開

有的時候后端的Web-Server提供文件上傳的服務,但是如果前端使用Nginx做反向代理時,會出現文件無法上傳的問題,這可能是由于Ngxin默認對客戶端請求的body的限制。因為,默認情況下Nginx對客戶端請求的大小限制是1m,而上傳的文件往往超過1m。可以通過修改如下配置項,來放寬這個限制:

client_max_body_size?10m;

將這個值設置為0,可以取消這個限制。這個配置項可以用在http,?server,?location配置節中。詳見client_max_body_size

下載文件重命名

通常情況下,為了保證用戶上傳的文件在服務器的文件系統中不至于重名,一般會將文件名修改成guid后保存,并在數據庫中保持guid與文件名的映射。此時,如果使用Nginx來提供對這些用戶文件的下載功能的話,文件下載到用戶瀏覽器,會以文件的guid名作為文件名,這顯然是用戶不想看到的。可以考慮用這個方案。
假設我們有一個文件的原始文件名為test.txt,對應的guid文件名是21EC2020-3AEA-1069-A2DD-08002B30309D.txt,文件的虛擬路徑是/download/

使用服務器端編程語言,在輸出的html中使用如下鏈接提供文件的下載:

<a?href="/download/21EC2020-3AEA-1069-A2DD-08002B30309D.txt?n=test.txt"?target='_blank'>下載test.txt</a>

可以看到,將原始文件名以QueryString的方式帶在請求中,這樣可以在Nginx端,利用$arg_name變量來取到這個QueryString的值,從而重寫response header:

add_header?Content-Disposition?"attachment;?filename=$arg_n";

這會在response header中加入如下鍵值:

Content-Disposition:?"attachment;?filename=test.txt";

經測試,無論是IE還是Chrome都可以支持這個header。

關于Content-Disposition,詳見這里

關于Nginx的標準http模塊的嵌入變量,詳見這里

Nginx作為反向代理

一個IP多個域名

如果只有一個公網IP,但是網站功能需要劃分為多個不同的子網站或者子域名,可以用Nginx來搭建反向代理來“復用”IP資源。假設有如下幾個域名都是abc.com這個主域的:

www.abc.comimage.abc.comvideo.abc.com

1. 首先在DNS出注冊這3個域名同時指向同一個IP,Nginx作為前端的web服務器,讓所有訪問這個IP地址80端口的請求全部指向Nginx
2. 然后,配置Nginx,根據域名將請求轉發轉發給內網的上游服務器,例如下面的配置:

????server?{????????listen?80;????????server_name?www.abc.com;????????location?/?{????????????????proxy_pass?http://192.168.1.100;}}????server?{????????listen?80;????????server_name?image.abc.com;????????location?/?{????????????????alias?/var/www/image;}}????server?{????????listen?80;????????server_name?video.abc.com;????????location?/?{????????????????proxy_pass?http://192.168.1.100:8081/video;}}

在上述配置中,將三個域名分發給了不同的模塊處理:

  • www.abc.com?分發給上游的http://192.168.1.100服務器處理

  • image.abc.com?則直接映射到了Nginx本機的一個目錄

  • video.abc.com?分發給上游的http://192.168.1.100:8081/video服務器處理(video是上游web-server的某虛擬目錄)

  • 上游服務器超時

    Nginx作為反向代理的時候,如果上游服務器處理時間過長的話,有時會返回504網關超時,從nginx的錯誤日志看出如果是upstream timed out,就表示是上游服務器處理時間過長,Nginx認為服務超時。Nginx在請求上游服務器時默認的超時時間為1分鐘,可以通過調整proxy_read_timeout屬性增加這個超時時間

    proxy_read_timeout??180s;

    本文出自https://segmentfault.com/a/1190000000437323

    轉載于:https://blog.51cto.com/lookingdream/2118786

    總結

    以上是生活随笔為你收集整理的nginx配置技巧汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。