lucaslorentz/caddy-docker-proxy

How to map multiple handlers?

wsw70 opened this issue · 2 comments

I would like to convert to labels the followig Caddyfile

https://sharry.swtk.eu {
    # https://eikek.github.io/sharry/doc/rest#rest-api
	route {
		handle / {
			import authenticate-with-authelia
			reverse_proxy sharry-restserver-1:9090
		}

                handle /app/login {
			import authenticate-with-authelia
			reverse_proxy sharry-restserver-1:9090
		}

                handle /app/home {
			import authenticate-with-authelia
			reverse_proxy sharry-restserver-1:9090
		}

		# fallback handling of everything else
		handle {
			reverse_proxy sharry-restserver-1:9090
		}
	}
}

I tried to find a way that follows the documentation and ended up with

      caddy: "sharry.swtk.eu"
      caddy.handle_path_0: /
      caddy.handle_path_0.0_import: "authenticate-with-authelia"
      caddy.handle_path_0.1_reverse_proxy: "sharry:9090"
      caddy.handle_path_1: /app/login
      caddy.handle_path_1.0_import: "authenticate-with-authelia"
      caddy.handle_path_1.1_reverse_proxy: "sharry:9090"
      caddy.handle_path_2: /app/home
      caddy.handle_path_2.0_import: "authenticate-with-authelia"
      caddy.handle_path_2.1_reverse_proxy: "sharry:9090"
      caddy.handle_path_3.0_reverse_proxy: "sharry:9090"

My idea is that the first underscored digit is the index of the entry in route, and for a given one, the underscored digit would be the order of statements. is this the correct approach?

I tried to make sense of the compiled configuration via the :2019/config/ JSON but it is a bit too complex for me.

I had it all wrong on so many levels. The correct configuration is

      caddy: "sharry.swtk.eu"
      caddy.route.0_handle: /
      caddy.route.0_handle.0_import: "authenticate-with-authelia"
      caddy.route.0_handle.1_reverse_proxy: "sharry:9090"
      caddy.route.1_handle: /app/login
      caddy.route.1_handle.0_import: "authenticate-with-authelia"
      caddy.route.1_handle.1_reverse_proxy: "sharry:9090"
      caddy.route.2_handle: /app/home
      caddy.route.2_handle.0_import: "authenticate-with-authelia"
      caddy.route.2_handle.1_reverse_proxy: "sharry:9090"
      caddy.route.3_handle.0_reverse_proxy: "sharry:9090"
  • the prefix vs postfix of a digit mans "ordered order" vs "random order"
  • I forgot the route part
  • I blindly used handle_path instead of handle (taken from the example)

You can simplify it by using a named matcher:

@authenticated path / /app/login /app/home
handle @authenticated {
	import authenticate-with-authelia
	reverse_proxy sharry:9090
}

handle {
	reverse_proxy sharry:9090
}

Shouldn't you use {{upstreams 9090}} instead? That way it'll auto-populate the upstreams if you have multiple replicas running etc.

And you don't need the wrapping route around the whole thing, it doesn't do anything for you.