當Tomcat返回HTTP 404未找到錯誤時,可以通過以下兩種方式設置跳轉到指定地址:
① 在Tomcat應用內部配置錯誤頁面跳轉(直接修改Tomcat的Web應用配置)
② 在Nginx反向代理層攔截404錯誤并跳轉(無需修改Tomcat,由Nginx統一處理)。
以下是具體配置方法:
方法1:在Tomcat應用中配置404跳轉(修改web.xml)
適用于直接控制Tomcat應用的情況,通過定義錯誤頁面實現跳轉。
步驟:
-
修改應用的
web.xml
文件
在Tomcat應用的WEB-INF/web.xml
(或全局的conf/web.xml
)中添加以下配置:<!-- 定義404錯誤跳轉到指定路徑 --> <error-page><error-code>404</error-code><location>/custom-404.html</location> <!-- 跳轉到應用內的靜態頁面 --><!-- 或跳轉到外部URL --><!-- <location>https://example.com/not-found</location> --> </error-page>
-
創建自定義錯誤頁面(可選)
如果跳轉到應用內頁面(如/custom-404.html
),需在Web應用的根目錄下創建對應文件。 -
重啟Tomcat生效
# 重啟Tomcat服務 sudo systemctl restart tomcat
方法2:在Nginx反向代理層攔截404并跳轉
適用于通過Nginx代理Tomcat的場景,無需修改Tomcat配置,直接在Nginx中處理錯誤。
步驟:
-
修改Nginx配置文件
在Nginx的server
塊中添加以下配置,攔截Tomcat返回的404錯誤并重定向:server {listen 443 ssl;server_name example.com;# SSL配置...# 代理到Tomcatlocation / {proxy_pass http://tomcat-server:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;# 關鍵配置:啟用錯誤攔截proxy_intercept_errors on;}# 捕獲404錯誤并跳轉到指定地址error_page 404 =301 https://example.com/not-found;# 或跳轉到靜態頁面# error_page 404 /custom-404.html;# location = /custom-404.html {# root /usr/share/nginx/html;# internal; # 僅允許內部訪問# } }
-
驗證并重載Nginx
# 檢查配置語法 sudo nginx -t# 重新加載配置 sudo nginx -s reload
驗證跳轉是否生效
- 訪問一個不存在的URL:
例如https://example.com/non-existent-path
,觀察是否自動跳轉到指定地址。 - 使用
curl
測試:
檢查響應頭中的curl -v https://example.com/non-existent-path
Location
字段(跳轉時)或返回的自定義頁面內容。
常見問題排查
- Tomcat未返回真實404狀態碼
確保Tomcat應用在資源不存在時正確返回404(而非其他狀態碼如500)。 - Nginx未啟用
proxy_intercept_errors
必須設置proxy_intercept_errors on;
,否則Nginx不會處理后端返回的錯誤碼。 - 路徑或權限問題
- 檢查自定義錯誤頁面的路徑是否存在且可讀。
- 確認Nginx配置中的跳轉地址可公開訪問(如外部URL需有效)。
總結
- 若需靈活控制跳轉邏輯(如動態重定向),優先使用Nginx配置。
- 若需保持應用獨立性(如不同應用有不同的404頁面),優先修改Tomcat的
web.xml
。
根據實際場景選擇合適方案即可解決404跳轉問題!