apiVersion: v1 kind: ConfigMap metadata: name: nginx-config namespace: syncthing data: default.conf: | map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name _; # Landing page location = / { root /usr/share/nginx/html; try_files /index.html =404; } # NAS instance location /nas { rewrite ^/nas$ /nas/ permanent; } # NAS API endpoints location ~ ^/nas/(rest|meta)/ { rewrite ^/nas/(.*) /$1 break; proxy_pass http://syncthing-nas:8384; 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; # Handle websockets proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 86400; } location /nas/ { proxy_pass http://syncthing-nas:8384/; # Important: tell syncthing that we're using /nas as base path 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; # Handle websockets proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 86400; # Sub filter to fix asset paths sub_filter 'href="/' 'href="/nas/'; sub_filter 'src="/' 'src="/nas/'; sub_filter 'url(/' 'url(/nas/'; sub_filter '"/meta' '"/nas/meta'; sub_filter '"/rest' '"/nas/rest'; sub_filter '"/vendor' '"/nas/vendor'; sub_filter '"/theme-assets' '"/nas/theme-assets'; sub_filter '"/syncthing' '"/nas/syncthing'; # Add floating back button via JavaScript before last script tag sub_filter '' ''; sub_filter_once off; sub_filter_types text/html text/css application/javascript; } # Master instance location /master { rewrite ^/master$ /master/ permanent; } # Master API endpoints location ~ ^/master/(rest|meta)/ { rewrite ^/master/(.*) /$1 break; proxy_pass http://syncthing-master:8384; 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; # Handle websockets proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 86400; } location /master/ { proxy_pass http://syncthing-master:8384/; 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_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; sub_filter 'href="/' 'href="/master/'; sub_filter 'src="/' 'src="/master/'; sub_filter 'url(/' 'url(/master/'; sub_filter '"/meta' '"/master/meta'; sub_filter '"/rest' '"/master/rest'; sub_filter '"/vendor' '"/master/vendor'; sub_filter '"/theme-assets' '"/master/theme-assets'; sub_filter '"/syncthing' '"/master/syncthing'; # Add floating back button via JavaScript before last script tag sub_filter '' ''; sub_filter_once off; sub_filter_types text/html text/css application/javascript; } # Iris instance location /iris { rewrite ^/iris$ /iris/ permanent; } # Iris API endpoints location ~ ^/iris/(rest|meta)/ { rewrite ^/iris/(.*) /$1 break; proxy_pass http://syncthing-khv:8384; 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; # Handle websockets proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 86400; } location /iris/ { proxy_pass http://syncthing-khv:8384/; 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_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; sub_filter 'href="/' 'href="/iris/'; sub_filter 'src="/' 'src="/iris/'; sub_filter 'url(/' 'url(/iris/'; sub_filter '"/meta' '"/iris/meta'; sub_filter '"/rest' '"/iris/rest'; sub_filter '"/vendor' '"/iris/vendor'; sub_filter '"/theme-assets' '"/iris/theme-assets'; sub_filter '"/syncthing' '"/iris/syncthing'; # Add floating back button via JavaScript before last script tag sub_filter '' ''; sub_filter_once off; sub_filter_types text/html text/css application/javascript; } } index.html: |