摘要:本文記錄了一些作為反向代理和文件服務(wù)器的配置技巧和解決方案,原文會(huì)持續(xù)更新作為文件服務(wù)避免瀏覽器自動(dòng)播放文件有時(shí)對(duì)于圖片視頻,瀏覽器會(huì)視能力,自動(dòng)為用戶顯示或播放。
本文記錄了一些nginx作為反向代理和文件服務(wù)器的配置技巧和解決方案,原文會(huì)持續(xù)更新
Nginx作為文件服務(wù) 避免瀏覽器自動(dòng)播放文件有時(shí)對(duì)于圖片、視頻,瀏覽器會(huì)視能力,自動(dòng)為用戶顯示或播放。這主要是由于Web服務(wù)器在返回文件本身數(shù)據(jù)的同時(shí),返回了一些特殊的MIME類型,比如:image/jpeg(JPEG圖像),application/pdf(PDF文檔),video/mpeg(MPEG動(dòng)畫)。這些MIMIE類型實(shí)際上是告訴瀏覽器,文件數(shù)據(jù)到底是什么,這樣瀏覽器就能更好的為用戶展示數(shù)據(jù)?,F(xiàn)在像圖片、pdf、甚至是視頻基本都是可以直接在瀏覽器中展示和播放的。但是有時(shí),我們需要瀏覽器為用戶下載文件而不是直接播放,而Nginx在默認(rèn)配置下,會(huì)根據(jù)文件的后綴來匹配相應(yīng)的MIME類型,并寫入Response header,導(dǎo)致瀏覽器播放文件而不是下載,這時(shí)需要通過配置讓Nginx返回的MIME類型為下面這個(gè)類型:
application/octet-stream
這個(gè)類型會(huì)讓瀏覽器認(rèn)為響應(yīng)是普通的文件流,并提示用戶下載文件??梢酝ㄟ^在Nginx的配置文件中做如下配置達(dá)到這樣的目的:
location /download/ { types { } default_type application/octet-stream; }
這樣當(dāng)Url路徑中包含/download/時(shí),MIME類型會(huì)被重置為application/octet-stream。另外,nginx自帶的MIME類型映射表保存在conf/mime.types中。
文件上傳大小限制放開有的時(shí)候后端的Web-Server提供文件上傳的服務(wù),但是如果前端使用Nginx做反向代理時(shí),會(huì)出現(xiàn)文件無法上傳的問題,這可能是由于Ngxin默認(rèn)對(duì)客戶端請(qǐng)求的body的限制。因?yàn)?,默認(rèn)情況下Nginx對(duì)客戶端請(qǐng)求的大小限制是1m,而上傳的文件往往超過1m。可以通過修改如下配置項(xiàng),來放寬這個(gè)限制:
client_max_body_size 10m;
將這個(gè)值設(shè)置為0,可以取消這個(gè)限制。這個(gè)配置項(xiàng)可以用在http, server, location配置節(jié)中。詳見client_max_body_size
下載文件重命名通常情況下,為了保證用戶上傳的文件在服務(wù)器的文件系統(tǒng)中不至于重名,一般會(huì)將文件名修改成guid后保存,并在數(shù)據(jù)庫中保持guid與文件名的映射。此時(shí),如果使用Nginx來提供對(duì)這些用戶文件的下載功能的話,文件下載到用戶瀏覽器,會(huì)以文件的guid名作為文件名,這顯然是用戶不想看到的??梢钥紤]用這個(gè)方案。
假設(shè)我們有一個(gè)文件的原始文件名為test.txt,對(duì)應(yīng)的guid文件名是21EC2020-3AEA-1069-A2DD-08002B30309D.txt,文件的虛擬路徑是/download/
使用服務(wù)器端編程語言,在輸出的html中使用如下鏈接提供文件的下載:
下載test.txt
可以看到,將原始文件名以QueryString的方式帶在請(qǐng)求中,這樣可以在Nginx端,利用$arg_name變量來取到這個(gè)QueryString的值,從而重寫response header:
add_header Content-Disposition "attachment; filename=$arg_n";
這會(huì)在response header中加入如下鍵值:
Content-Disposition: "attachment; filename=test.txt";
經(jīng)測(cè)試,無論是IE還是Chrome都可以支持這個(gè)header。
Nginx作為反向代理 一個(gè)IP多個(gè)域名關(guān)于Content-Disposition,詳見這里
關(guān)于Nginx的標(biāo)準(zhǔn)http模塊的嵌入變量,詳見這里
如果只有一個(gè)公網(wǎng)IP,但是網(wǎng)站功能需要?jiǎng)澐譃槎鄠€(gè)不同的子網(wǎng)站或者子域名,可以用Nginx來搭建反向代理來“復(fù)用”IP資源。假設(shè)有如下幾個(gè)域名都是abc.com這個(gè)主域的:
www.abc.com image.abc.com video.abc.com
1. 首先在DNS出注冊(cè)這3個(gè)域名同時(shí)指向同一個(gè)IP,Nginx作為前端的web服務(wù)器,讓所有訪問這個(gè)IP地址80端口的請(qǐng)求全部指向Nginx
2. 然后,配置Nginx,根據(jù)域名將請(qǐng)求轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)給內(nèi)網(wǎng)的上游服務(wù)器,例如下面的配置:
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; } }
在上述配置中,將三個(gè)域名分發(fā)給了不同的模塊處理:
www.abc.com 分發(fā)給上游的http://192.168.1.100服務(wù)器處理
image.abc.com 則直接映射到了Nginx本機(jī)的一個(gè)目錄
video.abc.com 分發(fā)給上游的http://192.168.1.100:8081/video服務(wù)器處理(video是上游web-server的某虛擬目錄)
上游服務(wù)器超時(shí)Nginx作為反向代理的時(shí)候,如果上游服務(wù)器處理時(shí)間過長(zhǎng)的話,有時(shí)會(huì)返回504網(wǎng)關(guān)超時(shí),從nginx的錯(cuò)誤日志看出如果是upstream timed out,就表示是上游服務(wù)器處理時(shí)間過長(zhǎng),Nginx認(rèn)為服務(wù)超時(shí)。Nginx在請(qǐng)求上游服務(wù)器時(shí)默認(rèn)的超時(shí)時(shí)間為1分鐘,可以通過調(diào)整proxy_read_timeout屬性增加這個(gè)超時(shí)時(shí)間
proxy_read_timeout 180s;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/39068.html
摘要:同時(shí)配置中的為,默認(rèn)為。表示監(jiān)控所有核心,表示每秒采集,表示采集次。則考慮使用或等加速器來減少解釋文件的耗時(shí)。程序性能監(jiān)控常用的方法就是開啟的性能監(jiān)控功能,將輸出結(jié)果通過軟件分析。輸出的文件名類似和,可以拿到平臺(tái)下用進(jìn)行圖形化分析。 Nginx+PHP-FPM優(yōu)化技巧總結(jié) 這里是從網(wǎng)上找到的一片文章,認(rèn)真的實(shí)踐了一遍,有很多值得參考的地方可以學(xué)習(xí),由于之前的文章排版非?;靵y,所以本人一...
摘要:同時(shí)配置中的為,默認(rèn)為。表示監(jiān)控所有核心,表示每秒采集,表示采集次。則考慮使用或等加速器來減少解釋文件的耗時(shí)。程序性能監(jiān)控常用的方法就是開啟的性能監(jiān)控功能,將輸出結(jié)果通過軟件分析。輸出的文件名類似和,可以拿到平臺(tái)下用進(jìn)行圖形化分析。 Nginx+PHP-FPM優(yōu)化技巧總結(jié) 這里是從網(wǎng)上找到的一片文章,認(rèn)真的實(shí)踐了一遍,有很多值得參考的地方可以學(xué)習(xí),由于之前的文章排版非?;靵y,所以本人一...
摘要:安裝簡(jiǎn)單配置簡(jiǎn)潔啟動(dòng)快速便捷支持熱部署支持擁有高度模塊化的設(shè)計(jì)。備注在版本之前,不能在中使用權(quán)重。不能與同時(shí)使用。當(dāng)有服務(wù)器需要剔除,必須手動(dòng)掉。表示把請(qǐng)求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器。表示當(dāng)前的暫時(shí)不參與負(fù)載均衡。表示預(yù)留的備份機(jī)器。 本文已同步到專業(yè)技術(shù)網(wǎng)站 www.sufaith.com, 該網(wǎng)站專注于前后端開發(fā)技術(shù)與經(jīng)驗(yàn)分享, 包含Web開發(fā)、Nodejs、Python、Lin...
摘要:通過或在服務(wù)器上運(yùn)行時(shí)可以使用的可執(zhí)行文件,可以理解為解釋器也有說是官方的進(jìn)程管理器,至于是什么文章后面再分析,這里就當(dāng)作解釋器。就是為了解決的問題,制定的協(xié)議。 一個(gè)模糊的概念 無論是php,python編程語言,還是apache,nginx服務(wù)器對(duì)于cgi協(xié)議是個(gè)繞不開的話題。安裝,部署都會(huì)經(jīng)常的看到,那么它們到底是干什么的,網(wǎng)上的答案非常的多!今天通過它們進(jìn)行一波匯總,徹底告別這...
閱讀 2521·2021-11-11 16:54
閱讀 2732·2021-09-26 09:47
閱讀 4059·2021-09-08 09:36
閱讀 2819·2021-07-25 21:37
閱讀 980·2019-08-30 15:54
閱讀 2603·2019-08-30 14:22
閱讀 3314·2019-08-30 13:57
閱讀 2836·2019-08-29 17:17