小编K. *_*dam的帖子

如何将带有参数的原始 URI 传递给 `query` 中指定的 Traefik ErrorPage 处理程序?

我正在尝试使用 nginx 来提供使用错误页面中间件的自定义错误页面,以便可以使用自定义错误页面处理对lambda 服务(我无法控制)的 404 请求。我希望能够在该错误页面上获取此原始请求的上下文,无论是在 Nginx 中用于进一步转发,还是作为用于进一步处理的标头,例如在 PHP 或诸如此类的内容中,以便我可以在 404 页面上提供上下文链接。

但是,现在在 Traefik 的 ErrorPage 中间件中重定向到 Nginx 之后,请求似乎丢失了原始服务查询中的所有标头和数据。

我的 dockerfile 的相关部分:

traefik.port=8080
traefik.protocol=http
traefik.docker.network=proxy
traefik.frontend.rule=PathPrefix:/myservice;ReplacePathRegex:^/myservice/(.*) /newprefix/$$1
traefik.frontend.errors.myservice.status=404
traefik.frontend.errors.myservice.service=nginx
traefik.frontend.errors.myservice.query=/myservice-{status}
Run Code Online (Sandbox Code Playgroud)

Nginx 收到转发的 404 请求,但请求 URI 只是/myservice-404查询中指定的路径(或者/,如果我省略了traefik.frontend.errors.myservice.query)。在 ReplacePathRegex 之后,我在标头中获得了原始请求的路径HTTP_X_REPLACED_PATH,但是在任何标头中都不再可以访问任何查询参数,并且 nginx 看不到有关原始 URI 的任何其他信息。例如,如果我请求mysite.com/myservice/some/subpath?with=parameters,HTTP_X_REPLACED_PATH标题将显示/myservice/some/subpath但不包括参数。

Traefik 是否可以将有关原始请求的完整上下文传递给另一个服务?

我真正想要的是try_files,在那里我可以说“如果这个 traefik 请求失败,请尝试其他路径”,但我会满足于能够在处理后端服务器中访问原始的完整请求参数. 如果有一种方法可以使用 Traefik 收到的完整路径和查询向 Nginx 发送请求,那将是理想的。

tl;博士:

  • 我正在将请求路由到 Traefik 中的特定服务
  • 如果该请求是 404,我希望能够将该请求传递给 Nginx 以进行进一步处理/上下文错误页面
  • 我希望 …

traefik

5
推荐指数
1
解决办法
76
查看次数

标签 统计

traefik ×1