diff --git a/config/nginx/keeporg.conf.tmpl b/config/nginx/keeporg.conf.tmpl index 6eb8961..a79f7bd 100644 --- a/config/nginx/keeporg.conf.tmpl +++ b/config/nginx/keeporg.conf.tmpl @@ -1,5 +1,9 @@ ### Deployed by https://git.rcmd.space/rcmd/keeporg +upstream keeporg { + server 10.200.1.3:32970; +} + server { listen 80; listen [::]:80; @@ -24,6 +28,27 @@ server { server_name keeporg.tiredsysadmin.cc; + # Shared by every proxied location below. A location that sets any + # proxy_set_header of its own replaces this whole set instead of adding to + # it, which is why the Vouch-protected location repeats them. + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + proxy_http_version 1.1; + proxy_redirect off; + + # disable buffering uploads to prevent OOM on reverse proxy server and make uploads twice as fast (no pause) + proxy_request_buffering off; + + # set timeout + proxy_read_timeout 600s; + proxy_send_timeout 600s; + send_timeout 600s; + location = /validate { proxy_pass http://127.0.0.1:30021/validate; proxy_set_header Host $http_host; @@ -39,48 +64,48 @@ server { return 302 https://auth.tiredsysadmin.cc/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$auth_resp_err; } + # The web interface, behind Vouch. location / { auth_request /validate; proxy_set_header X-Vouch-User $auth_resp_x_vouch_user; - proxy_pass http://10.200.1.3:32970; - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; - proxy_http_version 1.1; - proxy_redirect off; - - # disable buffering uploads to prevent OOM on reverse proxy server and make uploads twice as fast (no pause) - proxy_request_buffering off; - - # set timeout - proxy_read_timeout 600s; - proxy_send_timeout 600s; - send_timeout 600s; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; + proxy_pass http://keeporg; } + + # Desktop and Android clients, which authenticate to KeepOrg itself with a + # bearer token. Sending them to a Vouch login page would break sync. location /api { - proxy_pass http://10.200.1.3:32970; + proxy_pass http://keeporg; + } - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; + # Paths that have to work for somebody who has no Vouch account, or no + # account at all. KeepOrg authenticates each of them itself. + # + # /healthz uptime and container checks, unauthenticated by design + # /invite/ the invited person is signing up; an account is what they + # have come here to create + # /oidc/ the identity provider redirects back with a single-use + # authorization code, which a second login round trip spends + # /device a client device being approved from a browser + location = /healthz { + proxy_pass http://keeporg; + } - proxy_http_version 1.1; - proxy_redirect off; + location /invite/ { + proxy_pass http://keeporg; + } - # disable buffering uploads to prevent OOM on reverse proxy server and make uploads twice as fast (no pause) - proxy_request_buffering off; + location /oidc/ { + proxy_pass http://keeporg; + } - # set timeout - proxy_read_timeout 600s; - proxy_send_timeout 600s; - send_timeout 600s; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; + location = /device { + proxy_pass http://keeporg; } }