1. error_page語法
語法:php
error_page code [ code... ] [ = | =answer-code ] uri | @named_location
默認值:html
no
使用字段:nginx
http, server, location, location 中的if字段
2. 實例
nginx指令error_page的做用是當發生錯誤的時候可以顯示一個預約義的uri,好比:spa
error_page 502 503 /50x.html; location = /50x.html { root /usr/share/nginx/html; }
這樣實際上產生了一個內部跳轉(internal redirect),當訪問出現50二、503的時候就能返回50x.html中的內容,這裏須要注意是否能夠找到50x.html頁面,因此加了個location保證找到你自定義的50x頁面。code
同時咱們也能夠本身定義這種狀況下的返回狀態嗎,好比:server
error_page 502 503 =200 /50x.html; location = /50x.html { root /usr/share/nginx/html; }
這樣用戶訪問產生502 、503的時候給用戶的返回狀態是200,內容是50x.html。htm
當error_page後面跟的不是一個靜態的內容的話,好比是由proxyed server或者FastCGI/uwsgi/SCGI server處理的話,server返回的狀態(200, 302, 401 或者 404)也能返回給用戶。ip
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; }
也能夠設置一個named location,而後在裏邊作對應的處理。io
error_page 500 502 503 504 @jump_to_error; location @jump_to_error { proxy_pass http://backend; }
同時也可以經過使客戶端進行30二、301等重定向的方式處理錯誤頁面,默認狀態碼爲302。ast
error_page 403 http://example.com/forbidden.html; error_page 404 =301 http://example.com/notfound.html;
同時error_page在一次請求中只能響應一次,對應的nginx有另一個配置能夠控制這個選項:recursive_error_pages
默認爲false,做用是控制error_page可否在一次請求中觸發屢次。
2. Nginx 自定義404錯誤頁面配置中有無等號的區別
- error_page 404 /404.html 可顯示自定義404頁面內容,正常返回404狀態碼。
- error_page 404 = /404.html 可顯示自定義404頁面內容,但返回200狀態碼。
- error_page 404 /404.php 若是是動態404錯誤頁面,包含 header 代碼(例如301跳轉),將沒法正常執行。正常返回404代碼。
- error_page 404 = /404.php 若是是動態404錯誤頁面,包含 header 代碼(例如301跳轉),加等號配置能夠正常執行,返回php中定義的狀態碼。但若是php中定義返回404狀態碼,404狀態碼能夠正常返回,但沒法顯示自定義頁面內容(出現系統默認404頁面),這種狀況能夠考慮用410代碼替代( header("HTTP/1.1 410 Gone"); 正常返回410狀態碼,且可正常顯示自定義內容)。