【Nginx】Nginx代理Tomcat配置及404問題解決

當Tomcat返回HTTP 404未找到錯誤時,可以通過以下兩種方式設置跳轉到指定地址:
① 在Tomcat應用內部配置錯誤頁面跳轉(直接修改Tomcat的Web應用配置)
② 在Nginx反向代理層攔截404錯誤并跳轉(無需修改Tomcat,由Nginx統一處理)。

以下是具體配置方法:


方法1:在Tomcat應用中配置404跳轉(修改web.xml)

適用于直接控制Tomcat應用的情況,通過定義錯誤頁面實現跳轉。

步驟:
  1. 修改應用的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>
    
  2. 創建自定義錯誤頁面(可選)
    如果跳轉到應用內頁面(如/custom-404.html),需在Web應用的根目錄下創建對應文件。

  3. 重啟Tomcat生效

    # 重啟Tomcat服務
    sudo systemctl restart tomcat
    

方法2:在Nginx反向代理層攔截404并跳轉

適用于通過Nginx代理Tomcat的場景,無需修改Tomcat配置,直接在Nginx中處理錯誤。

步驟:
  1. 修改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;  # 僅允許內部訪問# }
    }
    
  2. 驗證并重載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 字段(跳轉時)或返回的自定義頁面內容。

常見問題排查

  1. Tomcat未返回真實404狀態碼
    確保Tomcat應用在資源不存在時正確返回404(而非其他狀態碼如500)。
  2. Nginx未啟用proxy_intercept_errors
    必須設置 proxy_intercept_errors on;,否則Nginx不會處理后端返回的錯誤碼。
  3. 路徑或權限問題
    • 檢查自定義錯誤頁面的路徑是否存在且可讀。
    • 確認Nginx配置中的跳轉地址可公開訪問(如外部URL需有效)。

總結

  • 若需靈活控制跳轉邏輯(如動態重定向),優先使用Nginx配置。
  • 若需保持應用獨立性(如不同應用有不同的404頁面),優先修改Tomcat的web.xml

根據實際場景選擇合適方案即可解決404跳轉問題!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76961.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

某公司網絡OSPF單區域配置

1.配置背景&#xff1a; xx公司網絡由三臺路由器和一臺交換機組成&#xff0c;現在想要三臺路由器之間通過OSPF實現互連互通。 2.網絡結構如下&#xff1a; 3.具體配置&#xff1a; 3.1路由器 RA 配置&#xff1a; 1.更改主機名稱&#xff1a; Router>en Router#conf t…

電腦知識 | TCP通俗易懂詳解 <一>

目錄 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f68d;什么是TCP/TCP協議 三、&#x1f9cd;?♂為什么TCP可靠 1.&#x1f970;關于可靠 2.&#x1f920;哪里可靠 3.&#x1f393;?圖片的三次握手&#xff0c;四次揮手 4.&#x1f4da;?知識點總結 四、&…

MyBatis 中 Mapper 傳遞參數的多種方法

# MyBatis Mapper 傳遞參數的多種方法及其優勢 在使用 MyBatis 進行數據庫操作時&#xff0c;Mapper 接口的參數傳遞是一個非常基礎但又十分重要的部分。不同的參數傳遞方式適用于不同的場景&#xff0c;合理選擇可以大大提高代碼的可讀性和維護性。本文將詳細介紹幾種常見的 …

Dify 插件開發筆記

Dify 插件開發 開發流程 #mermaid-svg-U9rSMmcbWvcGcFMu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-U9rSMmcbWvcGcFMu .error-icon{fill:#552222;}#mermaid-svg-U9rSMmcbWvcGcFMu .error-text{fill:#552222;st…

行星際激波在日球層中的傳播:Propagation of Interplanetary Shocks in the Heliosphere (第二部分)

行星際激波在日球層中的傳播&#xff1a;Propagation of Interplanetary Shocks in the Heliosphere &#xff08;第一部分&#xff09;- Chapter 1: Introduction & Chapter 2: Basics of Magnetohydrodynamics 行星際激波在日球層中的傳播&#xff1a;Propagation of In…

巴法云平臺-TCP設備云-微信小程序實時接收顯示數據-原理

微信小程序通過WebSocket或HTTP長輪詢連接平臺&#xff08;而非直接使用TCP&#xff09;&#xff01;&#xff01;&#xff01; 物聯網平臺對協議層的一種封裝設計——將底層通信協議&#xff08;如TCP&#xff09;與應用層業務邏輯&#xff08;如主題路由&#xff09;解耦&am…

QT Sqlite數據庫-教程002 查詢數據-上

【1】DQL語句&#xff1a; DQL語句&#xff08;數據查詢語言&#xff09;&#xff0c;用來查詢數據記錄。DQL 基本結構由 SELECT FROM、WHERE、JOIN 等子句構成。DQL 語句并不會改變數據庫&#xff0c;而是讓數據庫將查詢結果發送結果集給客戶端&#xff0c;返回的結果是一張虛…

基礎數學:線性代數與優化理論

本篇文章簡單帶您復習線性代數與優化理論&#xff08;主要是我發表的文章中涉及過的或相關聯的&#xff09; 微積分和概率與統計由此進&#xff1a;基礎數學&#xff1a;微積分和概率與統計-CSDN博客 圖論與信息論由此進&#xff1a;基礎數學&#xff1a;圖論與信息論-CSDN博…

java android持久化數據

1. SQLite 數據庫&#xff08;Android 內置&#xff09; 1.1 創建數據庫幫助類 public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME "MyDatabase.db";private static final int DATABASE_VERSION 1;// 表名和列名…

鴻蒙動畫與交互設計:ArkUI 3D變換與手勢事件詳解

大家好&#xff0c;我是 V 哥。 在鴻蒙 NEXT 開發中&#xff0c;ArkUI 提供了豐富的 3D 變換和手勢事件功能&#xff0c;可用于創建生動且交互性強的用戶界面。下面詳細介紹 ArkUI 的 3D 變換和手勢事件&#xff0c;并給出相應的 ArkTS 案例代碼。 1. ArkUI 3D 變換 ArkUI 支…

HTTP 和 HTTPS 協議的區別及使用場景

在互聯網的世界里,HTTP 和 HTTPS 是我們經常接觸到的兩種網絡協議,它們在數據傳輸、安全性等方面存在諸多差異,適用的場景也各有不同。? 一、HTTP 和 HTTPS 的基本概念? HTTP,即超文本傳輸協議(Hyper - Text Transfer Protocol),是一種用于分布式、協作式和超媒體信息…

【微服務管理】注冊中心:分布式系統的基石

在分布式系統日益普及的當下&#xff0c;如何高效地管理眾多服務實例成為關鍵問題。注冊中心應運而生&#xff0c;它猶如分布式系統的 “指揮中樞”&#xff0c;承擔著服務注冊、發現等核心任務&#xff0c;為整個系統的穩定運行和高效協作提供堅實保障。本文將深入探討注冊中心…

高并發短信系統設計:基于SharingJDBC的分庫分表、大數據同步與實時計算方案

高并發短信系統設計&#xff1a;基于SharingJDBC的分庫分表、大數據同步與實時計算方案 一、概述 在當今互聯網應用中&#xff0c;短信服務是極為重要的一環。面對每天發送2000萬條短信的需求&#xff0c;我們需要一個能夠處理海量數據&#xff08;一年下來達到數千萬億級別&…

2025最新系統 Git 教程(七)(完結)

第4章 分布式Git 4.1 分布式 Git - 分布式工作流程 你現在擁有了一個遠程 Git 版本庫&#xff0c;能為所有開發者共享代碼提供服務&#xff0c;在一個本地工作流程下&#xff0c;你也已經熟悉了基本 Git 命令。你現在可以學習如何利用 Git 提供的一些分布式工作流程了。 這一…

OpenCV 圖像旋轉

一、OpenCV 圖像旋轉介紹 在計算機視覺和圖像處理領域&#xff0c;圖像旋轉是指將圖像圍繞某個中心點按照一定的角度進行轉動。旋轉操作會改變圖像中像素的位置&#xff0c;從而得到新的圖像布局。這一操作在很多場景中都有重要應用&#xff0c;比如文檔矯正、目標檢測時對圖像…

<C#>在 .NET 開發中,依賴注入, 注冊一個接口的多個實現

在 .NET 開發里&#xff0c;有時一個接口會有多個實現類&#xff0c;此時就需要向依賴注入容器注冊多個實現。下面會詳細介紹不同場景下如何注冊多個實現&#xff0c;以及怎樣從容器中解析這些實現。 1. 注冊多個實現 在 .NET 中&#xff0c;依賴注入容器可以通過不同方式注冊…

idea 保存格式化 但是不格式化 Xml

xml- 其他 - 保持空格勾選上 https://blog.csdn.net/m0_65724734/article/details/128378290?spm1001.2101.3001.6650.8&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-9-128378290-blog-135147277.235%5Ev43%5Epc_blog_bo…

如何在C++中優雅地繪制圖表

如何在C項目中優雅地繪制圖表 matplotlibpreparematplotlibcpp.hpython3vs configuretest Gnuplotpreparegnuplotgnuplot-iostream.hboostvs configuretest MathGL 在C項目中&#xff0c;在進行一些數據分析時往往不夠直觀&#xff0c;若能借助圖表進行分析可以達到事半功倍的效…

vue3使用keep-alive緩存組件與踩坑日記

目錄 一.了解一下KeepAlive 二.使用keep-alive標簽緩存組件 1.聲明Home頁面名稱 三.在路由出口使用keep-alive標簽 四.踩坑點1&#xff1a;可能需要配置路由&#xff08;第三點完成后有效可忽略&#xff09; 五.踩坑點2&#xff1a;沒有找到正確的路由出口 一.了解一下Kee…

ros通信機制學習——latched持久化機制

點云的地圖的發送邏輯中&#xff0c;我發現每次使用rostopic echo 時只會打印一次&#xff0c;然后就不會再打印了。并且rviz中也是始終都會顯示的&#xff0c;這里面其實就是用到了latched持久話機制&#xff0c;可以接受這最后一次發布的消息。 我們通過一個具體的項目來學習…