▌proxy_intercept_errors
當上游服務(wù)器響應(yīng)頭回來后,可以根據(jù)響應(yīng)狀態(tài)碼的值進行攔截錯誤處理,與error_page 指令相互結(jié)合。用在訪問上游服務(wù)器出現(xiàn)錯誤的情況下。
服務(wù)部署情況
一、主服務(wù)(nginx:80) , /usr/local/nginx/sbin/nginx
二、上游服務(wù)(nginx:8012), /usr/local/nginx_8012/nginx
上游服務(wù)器文件說明
404.html 和 404_default.html 內(nèi)容:
04.html:上游服務(wù)器提供的特定404頁面內(nèi)容,當nginx:80訪問上游服務(wù)器資源不存在(返回404),要求顯示的內(nèi)容頁面。404_default.html:上游服務(wù)器默認404頁面。50x.html:上游服務(wù)器提供的特定50x頁面內(nèi)容,當nginx:80訪問上游服務(wù)器出現(xiàn)50x錯誤(包含500, 502, 503和504),要求顯示的內(nèi)容頁面。50x_default.html:上游服務(wù)器提供的處理50x的默認頁面
注意:
404.html 和 50x.html 是給 nginx:80配置中使用的
404_default.html 和 50x_default.html是給 nginx:8012配置中使用的
nginx:80服務(wù)中關(guān)于404和50x的配置
nginx:8012服務(wù)中關(guān)于404和50x的配置
幾種配置
一、nginx:80服務(wù)的特定location配置
1). 開啟proxy_intercept_errors2). 設(shè)置特定的 error_page, 分別處理404和50x
配置如下
@404fallback 和 @50xfallback配置見
請求測試:
當通過nginx:80服務(wù)請求上游一個不存在的資源時,響應(yīng)的結(jié)果如下:
結(jié)果進行說明:
1、由于上游服務(wù)器的配置
add_header Cache-Control max-age=5;
add_header Content-Encoding gzip;
所以響應(yīng)頭包含Cache-Control 和gzip頭。
2、由于nginx:80配置,當出現(xiàn)404時,具體內(nèi)容要從上游服務(wù)器獲取。
@404fallback的配置
所以響應(yīng)的內(nèi)容為:
Upstream server provides a special page for representing 404.
二、上述配置不變,修改@404fallback中的資源名稱
(由404.html修改為 404_not_exists.html)
這個資源在上游服務(wù)器文件列表中并不存在
在執(zhí)行請求測試時,結(jié)果如下:
對結(jié)果進行說明:
1、由于請求的 nginx:8012服務(wù)器下的 /404_not_exists.html,該資源并不存在,所以沒有匹配nginx:8012中的location / {xxx} 配置(見圖1-3)。所以響應(yīng)頭沒有再增加 Cache-Control 和 gzip。
2、走到了nginx:8012的404處理流程中,所以響應(yīng)內(nèi)容如下,是404_default.html的內(nèi)容。
Upstream default 404 page.
三、測試error_page的不同位置
1). 關(guān)閉nginx:80 location中的error_page指令
2). 為nginx:80在server級別設(shè)置error_page指令,分別設(shè)置404和50x
測試結(jié)果與一、相同
注意沒有測試修改@fallback內(nèi)部的資源不存在的情況。后續(xù)再補充
四、關(guān)于error_page 的其他功能說明
1、修改error_page為:
執(zhí)行測試結(jié)果為:
結(jié)果說明:
a、這種寫法可以修改響應(yīng)頭的狀態(tài)碼。即可以將404或者其他5xx狀態(tài)碼修改為200。不填寫默認值是200
b、注意:等號與@404fallback之間有一個空格
c、上述配置與將 error_page 修改為 error_page 404 =200 @404fallback; 效果一樣
2、修改響應(yīng)狀態(tài)碼為指定值。比如301,302等
測試結(jié)果:
總結(jié)
1、可以在特定location中將proxy_intercept_errors開啟,來處理上游服務(wù)器的特定響應(yīng)狀態(tài)碼。并獲取自定義錯誤頁面的內(nèi)容,同時在不改變用戶請求url的情況下,進行內(nèi)容的展現(xiàn)。
2、可以結(jié)合error_page 來改變響應(yīng)狀態(tài)碼。
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
8959瀏覽量
85085 -
指令
+關(guān)注
關(guān)注
1文章
606瀏覽量
35617 -
配置
+關(guān)注
關(guān)注
1文章
187瀏覽量
18341
原文標題:結(jié)合nginx源碼學(xué)習(xí)error_page和proxy 指令的關(guān)系
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論