
這是我的 nginx 設定的片段:
server {
error_page 500 /errors/500.html;
}
當我在應用程式中引發 500 錯誤時,Chrome 僅顯示其預設 500 頁面(Firefox 和 Safari 顯示空白頁面),而不是我的自訂錯誤頁面。
我知道該文件存在,因為我可以訪問http://server/errors/500.html
並且看到該頁面。我還可以將文件移至文檔根目錄並將配置更改為:
server {
error_page 500 /500.html;
}
並且 nginx 正確地提供了頁面,因此看起來伺服器上沒有其他配置錯誤。
我也嘗試過:
server {
error_page 500 $document_root/errors/500.html;
}
和:
server {
error_page 500 http://$http_host/errors/500.html;
}
和:
server {
error_page 500 /500.html;
location = /500.html {
root /path/to/errors/;
}
}
沒有運氣。
這是預期的行為嗎?錯誤頁面是否必須存在於文件根目錄中,或者我是否遺漏了一些明顯的內容?
更新1:這也失敗了:
server {
error_page 500 /foo.html;
}
什麼時候foo.html
確實存在於文檔根目錄中。看起來似乎有其他東西正在覆蓋我的配置,但這個區塊是/etc/nginx/*
引用該指令的唯一地方error_page
。
有其他地方可以設定nginx配置嗎?
答案1
嘗試新增
proxy_intercept_errors on;
或者
fastcgi_intercept_errors on;
在伺服器區塊中,取決於您的配置。
這種配置工作正常:
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/static/pages;
}
答案2
嘗試這個:
伺服器 { error_page 500 =200 /errors/500.html; }
這應該可以發送 http 狀態 200,以便瀏覽器顯示您的頁面。在預設狀態(500)下,瀏覽器可能會顯示自己的錯誤頁面並忽略您的內容,即使它是由伺服器發送的。
問候,亞當