Skip to Content
InstallationReverse proxy and HTTPS

Reverse proxy and HTTPS

LatestArr serves plain HTTP on port 3000 and expects TLS to be handled in front of it. If you’re exposing it beyond your own network, put it behind a reverse proxy.

LatestArr doesn’t need to be public to work. Only your SMTP server has to deliver the email. Keeping the admin UI on your LAN or a VPN is a perfectly good setup.

Two settings to get right

  1. TRUST_PROXY=true, so LatestArr believes the proxy’s X-Forwarded-For and X-Forwarded-Proto headers. That’s what makes login rate limiting use the real client IP, and what lets the session cookie be marked Secure.
  2. WEB_ORIGIN set to the public https:// URL, e.g. https://newsletter.example.com.

Your proxy must forward those two headers. Caddy and Traefik do by default; Nginx needs them set explicitly.

⚠️

If you can’t sign in after putting LatestArr behind a proxy, TRUST_PROXY is the usual cause. It must be set when there is a TLS proxy, and left off when there isn’t.

Examples

These are minimal starting points. The Caddy example comes from the project’s own docs; the Traefik and Nginx ones are standard configurations that haven’t been tested by the project. Corrections welcome.

Caddyfile
newsletter.example.com { reverse_proxy localhost:3000 }

Then in .env:

.env
TRUST_PROXY=true WEB_ORIGIN=https://newsletter.example.com

Restart with docker compose up -d for the change to take effect.

In 0.10.0, Compose didn’t pass TRUST_PROXY through to the container, so setting it in .env had no effect. That’s fixed New in 0.11.

Last updated on