# allow the pre-auth page to work
preauth.example.com {
	reverse_proxy preauth:9000 {
		header_up X-Forwarded-Uri {uri}
		header_down -X-Powered-By
		rewrite /preauth.php
		transport fastcgi {
			root /preauth/
			split .php
		}
	}
}

# if using caddy v2.9.x+ you can use this snippet
# snippet to put the pre-auth system in front any service easily
(preauth) {
	reverse_proxy {args[0]} preauth:9000 {
		header_up X-Forwarded-Uri {uri}
		header_down -X-Powered-By
		rewrite /preauth.php
		transport fastcgi {
			root /preauth/
			split .php
		}
		@preauth_ok status 2xx
		handle_response @preauth_ok {
			copy_response_headers {
				include Set-Cookie Location
			}
			{block}
		}
	}
}

# snippet usage: this will cause pre-auth to restrict access to https://protected.example.com/secure
protected.example.com {
	import preauth /secure {
		reverse_proxy protected-service:9000
	}
	reverse_proxy exposed-service:9000
}

## alternatively, if using an older version of caddy,
## you will have to have add the boilerplate in your block
#protected.example.com {
#	reverse_proxy /secure preauth:9000 {
#		header_up X-Forwarded-Uri {uri}
#		header_down -X-Powered-By
#		rewrite /preauth.php
#		transport fastcgi {
#			root /preauth/
#			split .php
#		}
#		@preauth_ok status 2xx
#		handle_response @preauth_ok {
#			copy_response_headers {
#				include Set-Cookie Location
#			}
#			reverse_proxy protected-service:9000
#		}
#	}
#	reverse_proxy exposed-service:9000
#}

