Traefik 不会路由路径
Traefik won't route path
为了测试 Traefik,我制作了一个应用程序,如 Traefik 的说明 文档中所示的 whoami,它以友好的消息响应对“/”和“/”的 GET HTTP 请求子端点。我已经验证更改 whoami 以通过不同的路径回答确实有效,但出于某种原因,Traefik 不会解析我的应用程序,即使我已经像对 whoami 一样配置它。我知道首先想到的是,如果我以与 whoami 相同的方式配置我的应用程序,那么问题将出在我的应用程序上,但 curl 确实确认我可以从 Traefik 的容器访问我的应用程序,所以它得到了我想知道 Traefik 中是否内置了 whoami 应用程序可以工作而我的应用程序不能工作的东西。我知道这是一个愚蠢的假设,但我看不出我的应用程序除了响应 HTTP Get 请求之外还需要做什么。您可以看到该应用程序以及我如何调出所有内容 here,只需要查看 build.sh
。我解决的另一个问题是在 swarm 模式下配置 Traefik,我必须创建一个 Traefik 图像而不是将配置作为参数传递。主要配置显示在下面的代码中,traefik_rp 它只是一个带有 tom 文件的 traefik 图像,将其设置为 sarmMode。
version: '3'
services:
traefik:
# The official v2 Traefik docker image
image: traefik_rp
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
simple_app:
image: simpleapp
environment:
ASPNETCORE_ENVIRONMENT: Release
labels:
- "traefik.http.routers.simple_app_service.rule=Path(`/simpleapp`)"
whoami:
# A container that exposes an API to show its IP address
image: containous/whoami
labels:
- "traefik.http.routers.whoami.rule=Path(`/`)"
此致。
我检查文档的时间太短了,但请尝试将其添加到标签中:
labels:
- traefik.enable=true
- traefik.frontend.entryPoints=http,https
Traefik 不会从 HTTP 请求中清除路由,它会以与接收到的相同的方式传递给应用程序。所以你的应用程序必须回答它在 Traefik 上配置的相同路由。 whoami 应用程序可能被编程为吐出 HTTP 响应,而不管访问的路由是什么,同时我编程的应用程序只回答根('/')路径。
尝试 PathPrefix
而不是 Path
。否则只会匹配 /simpleapp
。您需要 /simpleapp
、/simpleapp/
和 /simpleapp/sub
.
simple_app:
image: simpleapp
environment:
ASPNETCORE_ENVIRONMENT: Release
labels:
- "traefik.http.routers.simple_app_service.rule=PathPrefix(`/simpleapp`)"
另外,正如其他答案所建议的那样,请确保您的应用程序也处理 /simpleapp
前缀。否则你需要使用 StripPrefix.
为了测试 Traefik,我制作了一个应用程序,如 Traefik 的说明 文档中所示的 whoami,它以友好的消息响应对“/”和“/”的 GET HTTP 请求子端点。我已经验证更改 whoami 以通过不同的路径回答确实有效,但出于某种原因,Traefik 不会解析我的应用程序,即使我已经像对 whoami 一样配置它。我知道首先想到的是,如果我以与 whoami 相同的方式配置我的应用程序,那么问题将出在我的应用程序上,但 curl 确实确认我可以从 Traefik 的容器访问我的应用程序,所以它得到了我想知道 Traefik 中是否内置了 whoami 应用程序可以工作而我的应用程序不能工作的东西。我知道这是一个愚蠢的假设,但我看不出我的应用程序除了响应 HTTP Get 请求之外还需要做什么。您可以看到该应用程序以及我如何调出所有内容 here,只需要查看 build.sh
。我解决的另一个问题是在 swarm 模式下配置 Traefik,我必须创建一个 Traefik 图像而不是将配置作为参数传递。主要配置显示在下面的代码中,traefik_rp 它只是一个带有 tom 文件的 traefik 图像,将其设置为 sarmMode。
version: '3'
services:
traefik:
# The official v2 Traefik docker image
image: traefik_rp
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
simple_app:
image: simpleapp
environment:
ASPNETCORE_ENVIRONMENT: Release
labels:
- "traefik.http.routers.simple_app_service.rule=Path(`/simpleapp`)"
whoami:
# A container that exposes an API to show its IP address
image: containous/whoami
labels:
- "traefik.http.routers.whoami.rule=Path(`/`)"
此致。
我检查文档的时间太短了,但请尝试将其添加到标签中:
labels:
- traefik.enable=true
- traefik.frontend.entryPoints=http,https
Traefik 不会从 HTTP 请求中清除路由,它会以与接收到的相同的方式传递给应用程序。所以你的应用程序必须回答它在 Traefik 上配置的相同路由。 whoami 应用程序可能被编程为吐出 HTTP 响应,而不管访问的路由是什么,同时我编程的应用程序只回答根('/')路径。
尝试 PathPrefix
而不是 Path
。否则只会匹配 /simpleapp
。您需要 /simpleapp
、/simpleapp/
和 /simpleapp/sub
.
simple_app:
image: simpleapp
environment:
ASPNETCORE_ENVIRONMENT: Release
labels:
- "traefik.http.routers.simple_app_service.rule=PathPrefix(`/simpleapp`)"
另外,正如其他答案所建议的那样,请确保您的应用程序也处理 /simpleapp
前缀。否则你需要使用 StripPrefix.