nginx 不會在文檔根目錄的子目錄中提供 error_page

nginx 不會在文檔根目錄的子目錄中提供 error_page

這是我的 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)下,瀏覽器可能會顯示自己的錯誤頁面並忽略您的內容,即使它是由伺服器發送的。

問候,亞當

相關內容