当前位置: 首页 > news >正文

【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配置...
    
        # 代理到Tomcat
        location / {
            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跳转问题!

相关文章:

  • JavaScript逆向工程:如何判断对称加密与非对称加密
  • LLM应用开发(七)--记忆
  • 聊一聊接口测试时遇到第三方服务时怎么办
  • map映射到二维数组
  • Windows下安装depot_tools
  • 云曦月末断网考核复现
  • 力扣HOT100之链表: 148. 排序链表
  • queue容器
  • 3.软考高项(信息系统项目管理师)-范围管理
  • Openssl升级至openssl9.8p1含全部踩坑内容
  • Socket多路复用网络编程应用总结
  • RDD行动算子和累加器
  • 低代码控件开发平台:飞帆中粘贴富文本的控件
  • C++学习中常见的数组越界问题及解决方案
  • fit 转 gpx
  • w286入校申报审批系统设计与实现
  • 单片机方案开发 代写程序/烧录芯片 九齐/应广等 电动玩具 小家电 语音开发
  • Gemini Deep Research惊艳升级:2.5 Pro模型带来的研究效率革命
  • Transformer 多卡并行计算-SimpleDataset设计:`labels`;input_ids;attention_mask是什么
  • 加速度计芯片的主要参数定义、计算、测试方法
  • 怎么在网站上做反邪教知识/公司怎么做网络营销
  • yollow网站推广/谷歌chrome浏览器下载
  • 网站分为哪几个部分/交换友情链接的方法
  • 关键词优化内容/网络优化的工作内容
  • 网站建设经典案例/杭州优化外包哪里好
  • 肇庆网站开发/站长工具最近查询