深入理解Nginx之error_page模塊的使用
error_page的概念
error_page是nginx一個(gè)重要的指令,作用是定制化服務(wù)器錯(cuò)誤頁(yè)面。當(dāng)nginx發(fā)生內(nèi)部錯(cuò)誤時(shí),比如說(shuō)404、403、500等錯(cuò)誤,默認(rèn)會(huì)跳轉(zhuǎn)到nginx自帶的錯(cuò)誤頁(yè)面。但是使用error_page指令可以修改默認(rèn)錯(cuò)誤頁(yè)面,并且可以指定跳轉(zhuǎn)的url或者文件路徑。
語(yǔ)法:
error_page code [ code... ] [ = | =answer-code ] uri | @named_location
默認(rèn)值:
no
使用字段:http, server, location, location 中的if字段
使用舉例
跳轉(zhuǎn)到指定頁(yè)面
其原理是響應(yīng)到錯(cuò)誤代碼后,導(dǎo)向指定的路由,然后再由指定的路由處理,如下當(dāng)錯(cuò)誤代碼是404時(shí),相當(dāng)于訪問(wèn)http://localhost:80/50x.html,正好被內(nèi)部傳送給 location = /50x.html讓其來(lái)進(jìn)行處理(需要注意必須有50x.html這個(gè)頁(yè)面)
error_page 404 403 500 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}跳轉(zhuǎn)到指定網(wǎng)址
其原理是響應(yīng)到錯(cuò)誤代碼后,302(臨時(shí)重定向到目標(biāo)網(wǎng)址),如下當(dāng)錯(cuò)誤代碼為404時(shí),導(dǎo)向https://www.csdn.net
error_page 404 403 500 https://www.csdn.net;
使用location的@符合完成錯(cuò)誤信息展示
server{
error_page 404 @jump_to_error;
location @jump_to_error {
default_type text/plain;
return 404 'Not Found Page...';
}
}?更改反饋狀態(tài)碼
本來(lái)遇到404找不到文件的錯(cuò)誤,但是nginx可以把它狀態(tài)碼改為200返回給用戶(例子如下) ?
error_page 404 =200 /50x.html;#注意這里的縮進(jìn)不是隨便的
location = /50x.html {
root /usr/share/nginx/html;
}error_page配置小提示
注意 error_page 配置時(shí)加 = 和不加 = 的區(qū)別,加了 = 表示響應(yīng)為指定的 http status code ,默認(rèn)為 200,不加 = 為原錯(cuò)誤的狀態(tài)碼~
# 這樣可以訪問(wèn)錯(cuò)誤頁(yè)面時(shí) http status 為 404 ,并且頁(yè)面內(nèi)容是 404.html 的內(nèi)容 error_page 404 /404.html error_page 404 500 /404.html; # 這樣配置訪問(wèn)錯(cuò)誤頁(yè)面時(shí) http status 為 200 ,但頁(yè)面內(nèi)容是 404.html 的內(nèi)容 error_page 404 500 = /404.html; # 這樣配置訪問(wèn)錯(cuò)誤頁(yè)面時(shí) http status 為 404 ,但頁(yè)面內(nèi)容是 404.html 的內(nèi)容 error_page 404 500 =404 /404.html; # 也可以把404請(qǐng)求直接301到某個(gè)域上 error_page 404 =301 https://xuexb.com/404;
這樣就可以根據(jù)自己需求配置錯(cuò)誤頁(yè)為指定的狀態(tài)碼,因?yàn)榉?200 的狀態(tài)碼可能會(huì)被瀏覽器攔截。
- error_page 404 /404.html 可顯示自定義404頁(yè)面內(nèi)容,正常返回404狀態(tài)碼。
- error_page 404 = /404.html 可顯示自定義404頁(yè)面內(nèi)容,但返回默認(rèn)200狀態(tài)碼。
- error_page 404 /404.php 如果是動(dòng)態(tài)404錯(cuò)誤頁(yè)面,包含 header 代碼(例如301跳轉(zhuǎn)),將無(wú)法正常執(zhí)行。正常返回404代碼。
- error_page 404 = /404.php 如果是動(dòng)態(tài)404錯(cuò)誤頁(yè)面,包含 header 代碼(例如301跳轉(zhuǎn)),加等號(hào)配置可以正常執(zhí)行,返回php中定義的狀態(tài)碼。但如果php中定義返回404狀態(tài)碼,404狀態(tài)碼可以正常返回,但無(wú)法顯示自定義頁(yè)面內(nèi)容(出現(xiàn)系統(tǒng)默認(rèn)404頁(yè)面),這種情況可以考慮用410代碼替代( header("HTTP/1.1 410 Gone"); 正常返回410狀態(tài)碼,且可正常顯示自定義內(nèi)容)。
實(shí)戰(zhàn)應(yīng)用解讀
限流應(yīng)用
由于在nginx配置中,設(shè)置了limit_req的流量限制,導(dǎo)致許多請(qǐng)求返回503錯(cuò)誤代碼,在限流的條件下,為提高用戶體驗(yàn),希望返回正常Code 200,且返回操作頻繁的信息:
location /test {
...
limit_req zone=zone_ip_rm burst=1 nodelay;
error_page 503 =200 /dealwith_503?callback=$arg_callback;
}
location /dealwith_503{
set $ret_body '{"code": "V00006","msg": "操作太頻繁了,請(qǐng)坐下來(lái)喝杯茶。"}';
if ( $arg_callback != "" )
{
return 200 'try{$arg_callback($ret_body)}catch(e){}';
}
return 200 $ret_body;
}尋找錯(cuò)誤碼對(duì)應(yīng)的文件
error_page后面跟的/error/404.html就相當(dāng)于其訪http://localhost:80/error/404.html其被location /error捕獲
error_page 404 /error/404.html;
error_page 403 /error/403.html;
location /error {
alias /var/www/html;
}到此這篇關(guān)于深入理解Nginx之error_page模塊的使用的文章就介紹到這了,更多相關(guān)Nginx error_page內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx修改默認(rèn)80端口(解決跟Tomcat的端口沖突)
本文主要介紹了Nginx修改默認(rèn)80端口(解決跟Tomcat的端口沖突),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
通過(guò)nginx做mysql的負(fù)載均衡實(shí)現(xiàn)過(guò)程
Nginx stream模塊用于DNS和主從MySQL的TCP/UDP代理與負(fù)載均衡,安裝需編譯啟用或通過(guò)yum安裝,配置stream塊及upstream實(shí)現(xiàn)轉(zhuǎn)發(fā)和輪詢,測(cè)試后驗(yàn)證端口監(jiān)聽狀態(tài)2025-07-07
Centos基于Nginx搭建RTMP服務(wù)器的實(shí)現(xiàn)
本文主要介紹了Centos基于Nginx搭建RTMP服務(wù)器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
網(wǎng)站如何通過(guò)nginx設(shè)置黑/白名單IP限制及國(guó)家城市IP訪問(wèn)限制
如果你的服務(wù)器被攻擊很厲害,而且服務(wù)器是自己練手的,不需要其他用戶訪問(wèn)的,那么就可以配置一下nginx的白名單,下面這篇文章主要給大家介紹了關(guān)于網(wǎng)站如何通過(guò)nginx設(shè)置黑/白名單IP限制及國(guó)家城市IP訪問(wèn)限制的相關(guān)資料,需要的朋友可以參考下2022-07-07
nginx代理去掉URL前綴的實(shí)現(xiàn)方法
nginx作為一款廣泛使用的反向代理服務(wù)器,在實(shí)際應(yīng)用中,經(jīng)常需要去掉代理請(qǐng)求中的前綴,下面這篇文章主要給大家介紹了關(guān)于nginx代理去掉URL前綴的實(shí)現(xiàn)方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
nginx+lua(openresty)實(shí)現(xiàn)黑/白名單權(quán)限控制的示例
本文介紹了如何使用Openresty進(jìn)行權(quán)限控制和灰度發(fā)布,具體通過(guò)定時(shí)器定期更新黑名單數(shù)據(jù),進(jìn)行用戶過(guò)濾和權(quán)限管控,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09
nginx配置SSL/TLS證書的實(shí)現(xiàn)步驟
在當(dāng)今互聯(lián)網(wǎng)環(huán)境中,網(wǎng)站安全性至關(guān)重要,SSL/TLS 協(xié)議為網(wǎng)站提供了加密通信的能力,保護(hù)用戶數(shù)據(jù)免受竊聽和篡改,本文將詳細(xì)介紹如何在 Nginx 服務(wù)器上配置 SSL/TLS 證書,感興趣的可以了解一下2025-10-10
編寫Go程序?qū)ginx服務(wù)器進(jìn)行性能測(cè)試的方法
這篇文章主要介紹了編寫Go程序?qū)ginx服務(wù)器進(jìn)行性能測(cè)試的方法,包括對(duì)其負(fù)載均衡和緩存等方面的測(cè)試,極力推薦!需要的朋友可以參考下2015-06-06

