File-server + reverse-proxy

1. Caddy version (caddy version): v2.2.1 h1

2. How I run Caddy:

systemd service
Here is caddy process info:
caddy 420 1 0 20:18 ? 00:00:00 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

a. System environment:

Ubuntu 20.04.1 LTS

b. Command:

/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

c. Service/unit/compose file:

# caddy.service
#
# For using Caddy with a config file.
#
# Make sure the ExecStart and ExecReload commands are correct
# for your installation.
#
# See https://caddyserver.com/docs/install for instructions.
#
# WARNING: This service does not use the --resume flag, so if you
# use the API to make changes, they will be overwritten by the
# Caddyfile next time the service is restarted. If you intend to
# use Caddy's API to configure it, add the --resume flag to the
# `caddy run` command or use the caddy-api.service file instead.

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

d. My complete Caddyfile or JSON config:

# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace the line below with your
# domain name.
#:80
emr.cure.org

# Set this path to your site's directory.
root * /usr/share/caddy

# Enable the static file server.
file_server

# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
route /metabase/* {
        uri strip_prefix /metabase
        reverse_proxy localhost:3000
}

# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

3. The problem I’m having:

4. Error messages and/or full log output:

5. What I already tried:

I am successfully serving up an index.html via https, but also need to proxy access to a metabase system on localhost:3000
I tried the config above but I get 404 when I go to: https://emr.cure.org/metabase

6. Links to relevant resources:

That’s because your route only matches requests starting with /metabase/, so https://emr.cure.org/metabase will not match. Try requesting https://emr.cure.org/metabase/ instead.

I’d recommend writing your config like this instead:

emr.cure.org {

	handle_path /metabase* {
		reverse_proxy localhost:3000
	}

	handle {
		root * /usr/share/caddy
		file_server
	}
}
1 Like

@francislavoie - that worked - THX so much !!

… and if I want to also proxy emr.cure.org:3307 to localhost:3306 without affecting file-server on port 443?

Just make another site block for that:

2 Likes

This topic was automatically closed after 30 days. New replies are no longer allowed.