You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik v2路由404问题求助:跨服务器Tomcat应用访问失败

排查与解决Traefik v2路由404问题

核心问题分析

你的配置中,路由规则匹配/myphpapp前缀的请求,但转发到后端Tomcat时,可能存在路径传递异常、配置加载失败或网络连通性问题,导致404错误。

分步排查与修复

1. 验证动态配置文件加载正确性

Traefik的文件提供者会扫描/etc/traefik/dynamic目录下的.yml/.toml文件,但如果你的动态配置文件名是traefik.yml,可能和Traefik默认的静态配置文件名冲突,导致加载失败。

  • 把动态配置文件重命名为dynamic.yml(或其他非traefik.yml的名称)
  • 查看Traefik日志(docker logs traefik),确认是否有配置加载错误的提示

2. 修复路径转发逻辑(关键)

虽然你的路由规则匹配了/myphpapp前缀,但默认情况下Traefik会将完整路径(包括/myphpapp)转发到后端。实际场景中,建议通过路径剥离中间件确保路径正确传递,修改动态配置如下:

http:
  middlewares:
    strip-myphpapp-prefix:
      stripPrefix:
        prefixes:
          - "/myphpapp"
        forceSlash: false

  routers:
    inventoryapp-router:
      rule: "Host(`myawesomeapp.de`) && PathPrefix(`/myphpapp`)"
      service: inventoryapp-service
      middlewares:
        - strip-myphpapp-prefix

  services:
    inventoryapp-service:
      loadBalancer:
        servers:
          - url: "http://10.15.3.2:8301/myphpapp/"

说明:将服务URL直接指向Tomcat应用的上下文路径/myphpapp/,同时用stripPrefix中间件去掉请求URL中的/myphpapp前缀,确保转发到后端的路径是/login.html,匹配Tomcat应用的实际路由。

3. 验证Traefik与后端服务器的网络连通性

进入Traefik容器,测试能否访问后端Tomcat:

docker exec -it traefik curl http://10.15.3.2:8301/myphpapp/login.html
  • 如果返回404,说明Traefik容器无法正常访问后端服务,检查服务器A的防火墙规则(是否允许服务器B的IP访问8301端口)、网络路由是否通畅
  • 如果返回正常内容,说明网络没问题,问题出在Traefik的路由配置

4. 检查Traefik Dashboard确认路由状态

访问http://服务器B的IP:8080(你的配置中开启了api.insecure=true),查看:

  • Routers标签下,inventoryapp-router是否显示为enabled状态
  • Services标签下,inventoryapp-service是否正常关联到后端服务器
  • 如果路由未加载,检查动态配置文件的语法是否正确(可用YAML校验工具检查格式)

5. 处理HTTP到HTTPS的跳转(可选)

如果需要强制HTTPS,在路由中添加tls配置,并配置HTTP入口的跳转中间件:

http:
  middlewares:
    redirect-to-https:
      redirectScheme:
        scheme: https
        permanent: true

  routers:
    # 新增HTTP跳转路由
    http-redirect-router:
      rule: "Host(`myawesomeapp.de`)"
      entryPoints:
        - web
      middlewares:
        - redirect-to-https
      service: dummy-service # 虚拟服务,仅用于跳转

    inventoryapp-router:
      rule: "Host(`myawesomeapp.de`) && PathPrefix(`/myphpapp`)"
      entryPoints:
        - websecure
      service: inventoryapp-service
      middlewares:
        - strip-myphpapp-prefix
      tls:
        certResolver: letsencrypt

  services:
    dummy-service:
      loadBalancer:
        servers:
          - url: "http://localhost:8080" # 随便填一个可达的地址即可

总结

最可能的原因是动态配置文件加载异常或路径转发逻辑错误,优先检查配置文件名和添加路径剥离中间件,再验证网络连通性和路由状态。

内容的提问来源于stack exchange,提问作者Phong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:57:40