Reverse Proxy with File Server

1. Output of caddy version:

v2.6.2 h1:wKoFIxpmOJLGl3QXoo6PNbYvGW4xLEgo32GPBEjWL8o=

2. How I run Caddy:

Caddy is run by a systemd service as user caddy

a. System environment:

Oracle Linux 8, systemd used

b. Command:

systemctl start/stop/restart caddy

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]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

d. My complete Caddy config:

armorlate.epicgamer.org {
	encode gzip
	log {
		output file /var/log/caddy/pootle/access.log
	}
	file_server /assets/* {
		root /home/opc/dev/pootle/env/lib/python2.7/site-packages/pootle/assets
		browse
	}
	reverse_proxy localhost:9999
}

3. The problem I’m having:

4. Error messages and/or full log output:

Opening the site in a web browser doesn't load the assets folder correctly because they are static files

5. What I already tried:

I already tried to add root to all the pootle directory and specifying only the assets for the file server

6. Links to relevant resources:

https://docs.translatehouse.org/projects/pootle/en/latest/
https://armorlate.epicgamer.org/

Directives are sorted according to the directive order.

I’d recommend writing your config with handle blocks to do this instead:

armorlate.epicgamer.org {
	encode gzip
	log {
		output file /var/log/caddy/pootle/access.log
	}

	handle_path /assets/* {
		root * /home/opc/dev/pootle/env/lib/python2.7/site-packages/pootle/assets
		file_server browse
	}

	handle {
		reverse_proxy localhost:9999
	}
}

There, I suggest using handle_path (which strips the matched path prefix) because otherwise the path would be appended to the root which would cause there to be a /assets/assets doubled up path segment which would cause files to not be found.

Are you sure you need browse? You should only enable that if you want requests to a directory to show an index page which lists the files in the directory. If you only have static assets, you probably don’t want browse.

Also, I don’t recommend serving files from /home, because you can run into file permission issues. I recommend moving your files to /srv or /var/www/html and serving them from there.

1 Like

Thanks for the help!
Now I get a permission error for the entire folder so the file is found, that should be a easy fix!

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