網(wǎng)站首頁 編程語言 正文
Nginx error_page自定義錯(cuò)誤頁面設(shè)置
#fastcgi_intercept_errors on;
#語法:fastcgi_intercept_errors on|off
#默認(rèn)值:fastcgi_intercept_errors off
#使用字段:http, server, location
#這個(gè)指令指定是否傳遞4xx和5xx錯(cuò)誤信息到客戶端,或者允許nginx使用error_page處理錯(cuò)誤信息。
#你必須明確的在error_page中指定處理方法使這個(gè)參數(shù)有效,正如Igor所說“如果沒有適當(dāng)?shù)奶幚矸椒ǎ?
#nginx不會(huì)攔截一個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤不會(huì)顯示自己的默認(rèn)頁面,這里允許通過某些方法攔截錯(cuò)誤。
#proxy_intercept_errors 為on 表示 nginx按照原response
#proxy_intercept_errors on|off
#proxy_intercept_errors off
#使用字段:http, server, location #code輸出,后端是404,就是404.這個(gè)變量開啟后,我們才能自定義錯(cuò)誤頁面。
proxy_intercept_errors on;
upstream dev1 {
server 127.0.0.1:8080; #HessianTest3
}
server {
listen 80;
server_name kevin.com;
location / {
proxy_pass http://dev1; #HessianTest3
}
#參考書本第40頁
#error_page 404 =200 /404.html;
#error_page 500 502 503 504 =200 /50x.html;
#location = /404.html {
# root html;
#
#}
#location = /50x.html {
# root html;
#}
#當(dāng)頁面發(fā)生異常的時(shí)候可以指定跳轉(zhuǎn)到location中,也可以指定跳轉(zhuǎn)到指定的URL地址上面
error_page 404 http://www.baidu.com/;
}
Nginx error_page 使用
接觸到了error_page ,這里記錄一下
1. error_page語法
語法:
error_page code [ code... ] [ = | =answer-code ] uri | @named_location
默認(rèn)值:
no?
使用字段:
http, server, location, location 中的if字段?
2. 實(shí)例
nginx指令error_page的作用是當(dāng)發(fā)生錯(cuò)誤的時(shí)候能夠顯示一個(gè)預(yù)定義的uri,比如:
error_page 502 503 /50x.html;
location = /50x.html {
? ? root /usr/share/nginx/html;
} ?
這樣實(shí)際上產(chǎn)生了一個(gè)內(nèi)部跳轉(zhuǎn)(internal redirect),當(dāng)訪問出現(xiàn)502、503的時(shí)候就能返回50x.html中的內(nèi)容,這里需要注意是否可以找到50x.html頁面,所以加了個(gè)location保證找到你自定義的50x頁面。
同時(shí)我們也可以自己定義這種情況下的返回狀態(tài)嗎,比如:
error_page 502 503 =200 /50x.html;
location = /50x.html {
? ? root /usr/share/nginx/html;
} ??
這樣用戶訪問產(chǎn)生502 、503的時(shí)候給用戶的返回狀態(tài)是200,內(nèi)容是50x.html。
當(dāng)error_page后面跟的不是一個(gè)靜態(tài)的內(nèi)容的話,比如是由proxyed server或者FastCGI/uwsgi/SCGI server處理的話,server返回的狀態(tài)(200, 302, 401 或者 404)也能返回給用戶。
error_page 404 = /404.php;
location ~ \.php$ {
? ? fastcgi_pass 127.0.0.1:9000;
? ? fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
? ? include fastcgi_params;
} ??
也可以設(shè)置一個(gè)named location,然后在里邊做對(duì)應(yīng)的處理。
error_page 500 502 503 504 @jump_to_error;
location @jump_to_error { ? ?
? ? proxy_pass http://backend;
}
同時(shí)也能夠通過使客戶端進(jìn)行302、301等重定向的方式處理錯(cuò)誤頁面,默認(rèn)狀態(tài)碼為302。
error_page 403 ? ? ?http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;
同時(shí)error_page在一次請(qǐng)求中只能響應(yīng)一次,對(duì)應(yīng)的nginx有另外一個(gè)配置可以控制這個(gè)選項(xiàng):recursive_error_pages
默認(rèn)為false,作用是控制error_page能否在一次請(qǐng)求中觸發(fā)多次。
3. Nginx 自定義404錯(cuò)誤頁面配置中有無等號(hào)的區(qū)別
- error_page 404 /404.html 可顯示自定義404頁面內(nèi)容,正常返回404狀態(tài)碼。
- error_page 404 = /404.html 可顯示自定義404頁面內(nèi)容,但返回200狀態(tài)碼。
- error_page 404 /404.php 如果是動(dòng)態(tài)404錯(cuò)誤頁面,包含 header 代碼(例如301跳轉(zhuǎn)),將無法正常執(zhí)行。正常返回404代碼。
- error_page 404 = /404.php 如果是動(dòng)態(tài)404錯(cuò)誤頁面,包含 header 代碼(例如301跳轉(zhuǎn)),加等號(hào)配置可以正常執(zhí)行,返回php中定義的狀態(tài)碼。但如果php中定義返回404狀態(tài)碼,404狀態(tài)碼可以正常返回,但無法顯示自定義頁面內(nèi)容(出現(xiàn)系統(tǒng)默認(rèn)404頁面),這種情況可以考慮用410代碼替代( header("HTTP/1.1 410 Gone"); 正常返回410狀態(tài)碼,且可正常顯示自定義內(nèi)容)。
例子
server ?{
? ? listen 80;
? ? server_name ?test.com;
? ? index ? ? ? index.html index.htm;
?
? ? location / {?
? ? ? ? proxy_pass http://online;
? ? ? ? error_page 404 = @fallback;
? ? ? ? proxy_intercept_errors on;
? ? }
? ? location @fallback {
? ? ? ? proxy_pass http://backend;
? ? }
}
?
upstream online {
? ? ? ? ?server 192.168.88.18:80;
? ? ? ? ?server 192.168.88.28:80;
}
?
upstream backend {
? ? ? ? ?server 192.168.88.38:80;
}
例子
由于在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)坐下來喝杯茶。"}';
? ?if ( $arg_callback != "" )?
? ?{?
? ? ? ?return 200 'try{$arg_callback($ret_body)}catch(e){}';?
? ?}?
? ?return 200 $ret_body;?
}
總結(jié)
原文鏈接:https://blog.csdn.net/jc0803kevin/article/details/78992102
相關(guān)推薦
- 2022-07-08 一文詳解C++中運(yùn)算符的使用_C 語言
- 2022-09-15 c語言實(shí)現(xiàn)向上取整計(jì)算方法_C 語言
- 2022-08-06 pandas數(shù)據(jù)合并之pd.concat()用法詳解_python
- 2023-02-12 Docker創(chuàng)建MongoDB容器并添加root密碼驗(yàn)證與更多用戶詳細(xì)步驟_docker
- 2022-07-26 “Field ‘id‘ doesn‘t have a default value“
- 2022-01-16 1.把字符串轉(zhuǎn)化為時(shí)間戳,再將時(shí)間戳轉(zhuǎn)化為Date對(duì)象 /** *@parame time = 2
- 2022-05-23 iOS?UISegmentControl實(shí)現(xiàn)自定義分欄效果_IOS
- 2022-10-01 React?hooks?useState異步問題及解決_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支