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
TRUST_PROXY=true, so LatestArr believes the proxy’sX-Forwarded-ForandX-Forwarded-Protoheaders. That’s what makes login rate limiting use the real client IP, and what lets the session cookie be markedSecure.WEB_ORIGINset to the publichttps://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.
Caddy
newsletter.example.com {
reverse_proxy localhost:3000
}Then in .env:
TRUST_PROXY=true
WEB_ORIGIN=https://newsletter.example.comRestart 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.