記一次nginx配置自定義錯(cuò)誤頁面的麻瓜經(jīng)歷-創(chuàng)新互聯(lián)

其實(shí)很久沒碰過nginx了,突然來了個(gè)任務(wù)就只能硬著頭皮上了。
先說下背景:
我們業(yè)務(wù)采用的是容器的形式部署,nginx做反代的結(jié)構(gòu),當(dāng)用戶請(qǐng)求到達(dá)nginx服務(wù)器時(shí),先判斷nginx配置的根目錄下是否存在對(duì)應(yīng)的靜態(tài)文件,不存在則進(jìn)行轉(zhuǎn)發(fā)。
在nginx中配置了error_page 404的跳轉(zhuǎn)規(guī)則,預(yù)期效果是請(qǐng)求資源/路徑不存在時(shí),跳轉(zhuǎn)到我們自定義的404頁面,而不是那大大的還加粗了的冷冰冰的"404 Not found"。
具體配置段如下:

創(chuàng)新互聯(lián)建站長期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為芷江企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,芷江網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
error_page 404 500 /404.html; #定義狀態(tài)碼為404 500時(shí)的展示頁面
location = /404.html{
    root /usr/share/nginx/html;#此資源的位置
}

剛開始的想法是,location已經(jīng)有很多正確匹配到資源路徑的處理規(guī)則,而優(yōu)先級(jí)最低的location / {規(guī)則X}表示未能匹配到的資源按規(guī)則X處理。
好吧,那就直接return 404不就可以了?
結(jié)果還真的是可以,但是。。。正確頁面加載不出來了,F(xiàn)12進(jìn)入調(diào)試模式,發(fā)現(xiàn)頁面中很多資源請(qǐng)求也成是404了,尷尬沒考慮到這個(gè)問題,暫先放棄這個(gè)想法。

現(xiàn)在問題是nginx服務(wù)器上的默認(rèn)404頁面文件已經(jīng)被刪掉了,而且仔細(xì)觀察,發(fā)現(xiàn)更奇怪的是,下面的nginx版本號(hào)信息顯示的是1.13.0,而這個(gè)服務(wù)器的版本是1.12.2??!
記一次nginx配置自定義錯(cuò)誤頁面的麻瓜經(jīng)歷
記一次nginx配置自定義錯(cuò)誤頁面的麻瓜經(jīng)歷

冷靜,一定要冷靜
行吧,看來問題已經(jīng)可以基本定位了,此時(shí)是由nginx代理的backend集群里中某一臺(tái)響應(yīng)的404頁面,而不是由我們所設(shè)想的那樣,nginx-server直接響應(yīng)自定義的404頁面。
好吧原因找到了,就看看有沒有相關(guān)方法能阻止一下了。。查各種資料后終于找到兩個(gè)有關(guān)的參數(shù),而且好巧不巧這兩個(gè)參數(shù)默認(rèn)是off的。
fastcgi_intercept_errors 和 proxy_intercept_errors

以下是官方介紹:

Syntax: fastcgi_intercept_errors on | off;
Default:    
fastcgi_intercept_errors off;
Context:    http, server, location
Determines whether FastCGI server responses with codes greater than or equal to 300 should be passed to a client or be intercepted and redirected to nginx for processing with the error_page directive.

友情鏈接:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_intercept_errors

Syntax: proxy_intercept_errors on | off;
Default:    
proxy_intercept_errors off;
Context:    http, server, location
Determines whether proxied responses with codes greater than or equal to 300 should be passed to a client or be intercepted and redirected to nginx for processing with the error_page directive.

友情鏈接:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors
嘛意思呢?大概就是當(dāng)后端服務(wù)器的響應(yīng)狀態(tài)碼大于等于300時(shí),決定是否直接將響應(yīng)發(fā)送給客戶端,亦或?qū)㈨憫?yīng)轉(zhuǎn)發(fā)給nginx由error_page指令來處理。
當(dāng)為on時(shí),nginx會(huì)攔截error_page指令明確指定的錯(cuò)誤狀態(tài)碼。如果來自被代理服務(wù)器的應(yīng)答狀態(tài)碼不匹配error_page指令,應(yīng)答會(huì)照常發(fā)送到客戶端。

開啟后,check并reload下配置文件。再次測試,成功!而且正常頁面也能訪問。
記一次nginx配置自定義錯(cuò)誤頁面的麻瓜經(jīng)歷

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

標(biāo)題名稱:記一次nginx配置自定義錯(cuò)誤頁面的麻瓜經(jīng)歷-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://bm7419.com/article38/ceoppp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、做網(wǎng)站、外貿(mào)建站、動(dòng)態(tài)網(wǎng)站網(wǎng)站導(dǎo)航、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)