{ auto_https off servers { max_header_size 8KB trusted_proxies static private_ranges client_ip_headers X-Forwarded-For X-Real-IP } } :80 { request_body { max_size 50GB } # ===== UNGUARDED PATHS (login/auth/logout) ===== handle_path /auth/* { reverse_proxy auth:8000 } handle /login { rewrite * / reverse_proxy auth:8000 } handle_path /login/* { reverse_proxy auth:8000 } handle /logout { reverse_proxy auth:8000/api/logout redir /login 302 } # ===== GUARDED ROUTES ===== # forward_auth as a route-level directive: applied to all subsequent handles route { forward_auth auth:8000 { uri /api/check header_up X-Real-IP {client_ip} header_up X-Forwarded-Uri {uri} copy_headers Cookie } handle_path /maps/* { root * /srv/maps file_server } handle_path /weather/* { root * /srv/weather file_server } handle_path /garden/* { root * /srv/garden file_server } @kiwixApi path /library/viewer* /library/content* /library/catalog* /library/skin* /library/search* /library/suggest* /library/raw* /library/ROOT* handle @kiwixApi { reverse_proxy kiwix:8080 } handle_path /library-admin/* { reverse_proxy zim-upload:8000 } handle_path /library/* { root * /srv/library file_server try_files {path} /index.html } handle /library { redir /library/ 301 } @freqs path /freqs /freqs/* handle @freqs { uri strip_prefix /freqs reverse_proxy freqs:8000 } @inventory path /inventory /inventory/* handle @inventory { uri strip_prefix /inventory reverse_proxy inventory:8000 } @overlay path /overlay /overlay/* handle @overlay { uri strip_prefix /overlay reverse_proxy overlay:8000 } @search path /search /search/* handle @search { uri strip_prefix /search reverse_proxy search:8000 } handle_path /pdfs/* { reverse_proxy pdfs:8000 } handle { reverse_proxy homepage:3000 } } }