Reputation: 189
I'm trying to setup Traefik to replace my Nginx reverse proxy setup. I have my domain setup like this: - I can access different services using http://example.com and detecting which service I should proxy to, by using subpath.
I tried to recreate same setup with Traefik. First by using ReplacePathRegex and then StripPrefix. My api requests work fine, but when I try to use Portainer, requests made from web browser omit /portainer part which causes web ui to break.
For example:
I make request to http://example.com/portainer.
I get response and then consecutive requests should be made like this: http://example.com/portainer/vendor1.css
and instead it makes request like this:
http://example.com/vendor1.css
Is there any way to setup Traefik behavior to exactly match Nginx proxy_pass
?
I found this post that gives me a partial solution: Is there an equivalent to ReverseProxyPass for Apache in Traefik?. Portainer seems to be working when I make request to http://example.com/portainer/ by adding "/" to the end.
I tried to fix it with forceSlash
, but it did not make any change
Is it possible to make it work with or without trailing "/"?
This is how requests look like in /portainer
and /portainer/
:
This is my current Traefik configuration (I'm only using Docker):
Upvotes: 1
Views: 1213
Reputation: 189
I found a solution: https://community.containo.us/t/middleware-to-add-the-if-needed/1895
This is what I had to add to labels
in my portainer container to make it work:
- traefik.http.middlewares.strip-prefix.chain.middlewares=strip-prefix-1,strip-prefix-2
- traefik.http.middlewares.strip-prefix-1.redirectregex.regex=^(https?://[^/]+/[a-z0-9_]+)$$
- traefik.http.middlewares.strip-prefix-1.redirectregex.replacement=$${1}/
- traefik.http.middlewares.strip-prefix-1.redirectregex.permanent=true
- traefik.http.middlewares.strip-prefix-2.stripprefixregex.regex=/[a-z0-9_]+
It is not ideal solution as I think there should be an easier way to achieve it, but for the time being it satisfies my needs.
Upvotes: 0
Reputation: 328
Stripprefix middleware is for removing prefixes from the path before forwarding the request. According to your configuration, everything after /portainer
and /portainer
itself will be stripped.
In your case, it will also remove the trailing slash. If you need to forward /
to the Portainer, then you need to use portainer
(without slash) as to configure the prefix of stripprefix middleware.
Upvotes: 0