Nginx
虛擬主機的 nginx 自定義 404 錯誤頁面
我在 nginx 上執行了一些虛擬主機,我希望它們每個都有自己的自定義 404 頁面。每個虛擬主機都有自己的 nginx.conf,我包括我的全域 nginx.conf。
在我目前無法正常工作的特定虛擬主機的配置文件中,配置塊如下所示:
server{ listen 80; server_name www.foo.com; expires 1M; access_log /srv/www/foo/logs/acces.log; error_log /srv/www/foo/logs/error.log; error_page 404 /404.html; location / { root /srv/www/foo/public_html; index index.html; rewrite ^/(.*)/$ /$1 permanent; try_files "${uri}.html" $uri $uri/ =404; } location = /404.html { internal; } }
404’ing 本身很好,但是當返回 404 狀態程式碼時,會顯示預設的 nginx 404 頁面,而不是位於站點根目錄中的自定義頁面 404.html。
我已經嘗試通過文件系統和站點的 URI 到錯誤頁面的絕對路徑,並且我嘗試將 error_page 指令放在 location 塊中。這些都不起作用。我懷疑問題出在我用來“美化”我的 URL 的 rewrite 和 try_files 組合中。
首先,將根指令設置在 location 塊之外 - 在這種情況下,在 error_page 指令之上。請參閱 nginx陷阱頁面。這樣做的原因是許多指令(包括 error_page)需要知道相對於某些東西的路徑 - 並且所有路徑都被假定為相對的(即 /404.html 不在文件系統的根目錄中 - 它是相對於您的文件的根)。
server{ #listen 80; - not needed server_name www.foo.com; root /srv/www/foo/public_html; expires 1M; access_log /srv/www/foo/logs/access.log; error_log /srv/www/foo/logs/error.log; error_page 404 /404.html; location / { index index.html; rewrite ^/(.*)/$ /$1 permanent; try_files "${uri}.html" $uri $uri/ =404; } location = /404.html { internal; } }
如果上述方法不能解決您的錯誤,請增加您的error_log的詳細程度(例如到“資訊”)並查看當您遇到 404 時 nginx 實際服務的頁面。