Surveillance Station über den Reverse Proxy SWAG

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Guten Morgen,

ich nutze zurzeit den integrierten NGINX von Synology und möchte auf SWAG wechseln. Bis auf die Verbindung zur Surveillance Station konnte ich alle Services erfolgreich testen. Bei der Surveillance Station bin ich etwas ratlos. Eine passende Proxy-Conf als Sample konnte ich auch nicht finden.

Aktueller Stand:
- SWAG 2.11.0 als Docker-Container über Portainer ausgerollt und mit der UserID 1000 ausgeführt
- Die Loginpage von der Surveillance Station kann aufgerufen werden und die Authentisierung kann durchgeführt werden.
- Nach der Authentisierung erhalte ich für ein paar Sekunden eine weiße Seite angezeigt und dann einen ERR_CONNECTION_TIMED_OUT

Ich habe die Vermutung, dass das nötige Websocket nicht richtig aktiviert/konfiguriert ist?

Die nginx.conf und proxy.conf sind default.

Hat jemand die Surveillance Station über SWAG am laufen? :)

Grüße,
Crash1601


nginx.conf

Code:
## Version 2023/04/13 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/nginx.conf.sample
user abc;

# Set number of worker processes automatically based on number of CPU cores.
include /config/nginx/worker_processes.conf;

# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;

# Configures default error logger.
error_log /config/log/nginx/error.log;

# Includes files with directives to load dynamic modules.
include /etc/nginx/modules/*.conf;

# Include files with config snippets into the root context.
include /etc/nginx/conf.d/*.conf;

events {
    # The maximum number of simultaneous connections that can be opened by
    # a worker process.
    worker_connections 1024;
}

http {
    # Includes mapping of file name extensions to MIME types of responses
    # and defines the default type.
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Name servers used to resolve names of upstream servers into addresses.
    # It's also needed when using tcpsocket and udpsocket in Lua modules.
    #resolver 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001;
    include /config/nginx/resolver.conf;

    # Don't tell nginx version to the clients. Default is 'on'.
    server_tokens off;

    # Specifies the maximum accepted body size of a client request, as
    # indicated by the request header Content-Length. If the stated content
    # length is greater than this size, then the client receives the HTTP
    # error code 413. Set to 0 to disable. Default is '1m'.
    client_max_body_size 0;

    # Sendfile copies data between one FD and other from within the kernel,
    # which is more efficient than read() + write(). Default is off.
    sendfile on;

    # Causes nginx to attempt to send its HTTP response head in one packet,
    # instead of using partial frames. Default is 'off'.
    tcp_nopush on;

    # all ssl related config moved to ssl.conf
    # included in server blocks where listen 443 is defined

    # Enable gzipping of responses.
    #gzip on;

    # Set the Vary HTTP header as defined in the RFC 2616. Default is 'off'.
    gzip_vary on;

    # Helper variable for proxying websockets.
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    # Sets the path, format, and configuration for a buffered log write.
    access_log /config/log/nginx/access.log;

    # Includes virtual hosts configs.
    include /etc/nginx/http.d/*.conf;
    include /config/nginx/site-confs/*.conf;
    
    # Includes Geoblocking config
    # include /config/nginx/dbip.conf;
    include /config/nginx/maxmind.conf;   
}

daemon off;
pid /run/nginx.pid;


proxy.conf

Code:
## Version 2023/02/09 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/proxy.conf.sample

# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

# Proxy Connection Settings
proxy_buffers 32 4k;
proxy_connect_timeout 240;
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 1024;
proxy_http_version 1.1;
proxy_read_timeout 240;
proxy_redirect http:// $scheme://;
proxy_send_timeout 240;

# Proxy Cache and Cookie Settings
proxy_cache_bypass $cookie_session;
#proxy_cookie_path / "/; Secure"; # enable at your own risk, may break certain apps
proxy_no_cache $cookie_session;

# Proxy Header Settings
proxy_set_header Connection $connection_upgrade;
proxy_set_header Early-Data $ssl_early_data;
proxy_set_header Host $host;
proxy_set_header Proxy "";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Method $request_method;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_set_header X-Original-Method $request_method;
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
proxy_set_header X-Real-IP $remote_addr;

proxy-conf für die Surveillance Station

Code:
## Version 2023/05/31

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name surv.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;
    if ($lan-ip = yes) { set $geo-whitelist yes; } #Check for a LAN IP
    if ($geo-whitelist = no) { return 404; } #Check the country filter                                                                     

    location / {

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
    
        set $upstream_app 192.168.178.60;
        set $upstream_port 9902;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }
}
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
14.048
Punkte für Reaktionen
6.059
Punkte
569
Wieso Port 9902, hast du den geändert in der SS?
Edit: Und wieso http, ich verwende https, HSTS und Websocket, allerdings im Proxy des DSM
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
14.048
Punkte für Reaktionen
6.059
Punkte
569
  • Like
Reaktionen: Crash1601

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Wieso Port 9902, hast du den geändert in der SS?
Edit: Und wieso http, ich verwende https, HSTS und Websocket, allerdings im Proxy des DSM
Unter Login Portal => Applications => Surveillance Station habe ich die Ports für HTTP und HTTPs geändert.
HTTPS, HSTS und Websocket: So habe ich es aktuell über den "Synology Nginx" Service.

Mein Gedanke ist, dass ich intern mit HTTP verbinde, damit weniger Rechenleistung notwendig ist. Das dürfte, aus meiner Sicht, kein Problem sein, solange intern alles vertrauenswürdig ist und bleibt :)
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.503
Punkte für Reaktionen
1.093
Punkte
194
Ergänz mal folgendes:

Code:
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header Connection $connection_upgrade;

SWAG danach einmal restarten
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Das habe ich gemacht, aber leider keine Veränderung.
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Ich bin einen Schritt weiter gekommen, habe aber noch keine Lösung. Die Surveillance Station scheint nicht über einen einzigen Port zu laufen, sondern mindestens zwei. Im lokalen Netz über die DSCam funktioniert die Verbindung über SWAG. Über den Browser erhalte ich im lokalen Netz die Meldung "ERR_CONNECTION_REFUSED".

Beim Aufrufen ist mir aufgefallen, dass nach der Authentisierung mein Port verworfen wird. Mein Portforwarding sieht für sämtlich Dienste so aus: Client => DockerHost 32501:443 => Upstream Server. Die Variante macht bei allen anderen Diensten kein Problem. Bei Surveillance sieht der Aufruf so aus:

Code:
https://surv.<domain>.de:32501/#/signin
https://surv.<domain>.de/webman/3rdparty/SurveillanceStation/login.cgi
https://surv.<domain>.de/webman/3rdparty/SurveillanceStation/login.cgi?SynoToken=x2tJ8MuVfJMq.
https://surv.<domain>.de/webman/3rdparty/SurveillanceStation/

Wenn ich ab Zeile zwei meinen Port manuell hinzufüge in der Adressleiste und aktualisiere, das Ganze bei Zeile 3 und 4 wiederhole, bin ich auf der Surveillance Station.

Der offensichtliche Unterschied ist, dass die Surveillance Station eine thirdparty App zu sein scheint und der Rest den ich nutze nicht.
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.401
Punkte
564
Hast du der Surveillance Station in der Systemsteuerung im Anmeldeportal auch die Domain mitgegeben? Wenn ja, dann mach das mal raus.
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Für die Surveillance Station ist unter Customized Domain, nichts eintragen :)
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Ich kann mich dunkel daran erinnern, dass ich dieses Problem schon mal hatte, mit dem Synology NGINX Service. Und ich meine, dass Problem war das fehlende Websocket, welches sich seit, meine DSM 7, einfach per Klick hinzufügen lässt. ( proxy_set_header Upgrade $http_upgrade; und proxy_set_header Connection $connection_upgrade; ) *grübel* Und dieses Problem bestand auch nur mit der Surveillance Station.
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Ich habe die Verbindung mit durchgehendem Port 443 getestet. Damit funktioniert es, überrascht aber auch nicht. Mit dem Reverse Proxy "NginX Proxy Manager" tritt das gleiche Problem, wie mit SWAG, auf. Bei allen anderen Services der Synology wird, zumindest in der Adresszeile nicht erkennbar, nicht in einen Subfolder ( /webman/..) gesprungen.
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
Leg doch mal eine Domain für in den Einstellungen für die Surveillance Station an und such dir dann die conf Datei mit SSH raus und guck was die da eintragen. SWAG und der Synology Reverse Proxy sind doch beide Nginx. Das heißt du kannst es 1 zu 1 übernehmen. Bis auf die Synology Sachen und Pfade
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Gute Idee, das werde ich machen - danke. Btw: Über die DSCam App funktioniert die Verbindung über das Internet und SWAG ohne Probleme.
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Die direkte Config für die Surveillance Station habe ich auf die schnelle nicht gefunden, aber die Proxy.conf von Synology hat mir weitergeholfen. Ich habe einfach mal die default Config von SWAG auskommentiert und das Set von Synology eingefügt und damit funktioniert es reproduzierbar :)

Code:
    location / {

        #include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        proxy_set_header X-Forwarded-By $server_addr;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_http_version 1.1;
  
        set $upstream_app 192.168.178.60;
        set $upstream_port 9902;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }


Edit: Ich hatte angenommen, dass es hier mal eine Möglichkeit gab das Thema als gelöst zu markieren, aber das scheint nicht oder nicht mehr so zu sein.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: ctrlaltdelete

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
Diese Header kannst du bei SWAG auch als default immer mitschicken. Das hatte ich damals bei mir so konfiguriert. Da musste ich nicht mehr drauf achten.
 

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Das habe ich gerade versucht, scheint aber zumindest bei mir nicht zu funktionieren. Könnte es sein, dass in der originalen proxy.conf ein Parameter enthalten ist, den die Surveillance Station stört?

Wenn ich die Synology proxy.conf so einbinde, funktionierts auch wieder.

Code:
#include /config/nginx/proxy.conf;
include /config/nginx/syno_proxy.conf;
include /config/nginx/resolver.conf;

Welche Version der SWAG proxy.conf nutzt du?
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
854
Punkte
154
Ich nutze kein SWAG mehr. Ich habe aber auch nie die Surveillance Station benutzt.
Meine proxy.conf sah so aus:
Code:
## Version 2023/02/09 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/proxy.conf.sample

# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

# Proxy Connection Settings
proxy_buffers 32 4k;
proxy_connect_timeout 240;
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 1024;
proxy_http_version 1.1;
proxy_read_timeout 240;
proxy_redirect http:// $scheme://;
proxy_send_timeout 240;

proxy_max_temp_file_size 0; #http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size


# Proxy Cache and Cookie Settings
proxy_cache_bypass $cookie_session;
#proxy_cookie_path / "/; Secure"; # enable at your own risk, may break certain apps
proxy_no_cache $cookie_session;

# Proxy Header Settings
proxy_set_header Connection $connection_upgrade;
proxy_set_header Early-Data $ssl_early_data;
proxy_set_header Host $host;
proxy_set_header Proxy "";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Method $request_method;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_set_header X-Original-Method $request_method;
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
proxy_set_header X-Real-IP $remote_addr;
 
  • Like
Reaktionen: Crash1601

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Ich nutze kein SWAG mehr. Ich habe aber auch nie die Surveillance Station benutzt.

Achso, ok. Die proxy.conf von dir unterscheidet sich um diesen Parameter gegenüber der originalen.

Code:
proxy_max_temp_file_size 0;

Ich habe noch ein bisschen weiter getestet. Ich kann den ganzen Headerblock von Synology ans Ende der orignalen proxy.conf setzen und der Seitenlogin funktioniert. Sobald ich die Parameter aber auskommentiere (jeweils die doppelten Parameter), gibts wieder das Problem. Die Dopplungen dürften kein Problem sein, die Surveillance Station erhält alles was sie braucht und funktioniert :)

Ich lade die zweite Conf zusätzlich und so passt das erstmal für mich.

Code:
    location / {

        include /config/nginx/proxy.conf;
        include /config/nginx/proxy_synology.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app 192.168.178.60;
        set $upstream_port 9902;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }

Danke für Eure Unterstützung!
 
  • Like
Reaktionen: ctrlaltdelete

Crash1601

Benutzer
Mitglied seit
27. Jan 2009
Beiträge
360
Punkte für Reaktionen
14
Punkte
24
Ich habe nun meinen ersten reboot des SWAG Containers, nach der o.g. Änderungen, hinter mir und musste nun doch noch weiter austesten. Die Info ergänzend, damit der Nächste, der auf das Problem stößt, eine Lösung hat.

Nach dem Reboot mit der o.g. Config hatte ich Meldungen dieser Art im Log und Nginx ist nicht gestartet:

Code:
nginx: [emerg] "proxy_http_version" directive is duplicate in /config/nginx/proxy_synology.conf:9

Der im Falle von der Surveillance Station problematische Parameter in der originalen proxy.conf von SWAG ist dieser und muss auskommentiert werden:

Code:
proxy_set_header Host $host;

Zusätzlich werden aber noch diese Parameter benötigt, damit das Portproblem nicht zuschlägt:

Code:
proxy_set_header X-Forwarded-By $server_addr;
proxy_set_header Host $http_host;

Die Lösung für mich bzgl. der Surveillance Station ist nun eine einzige Proxy Datei als Mischung aus SWAG und Synology:

Code:
## Version 2023/02/09 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/proxy.conf.sample

# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

# Proxy Connection Settings
proxy_buffers 32 4k;
proxy_connect_timeout 240;
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 1024;
proxy_http_version 1.1;
proxy_read_timeout 240;
proxy_redirect http:// $scheme://;
proxy_send_timeout 240;

# Custom                                                                                                         
proxy_max_temp_file_size 0; #http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size

# Proxy Cache and Cookie Settings
proxy_cache_bypass $cookie_session;
#proxy_cookie_path / "/; Secure"; # enable at your own risk, may break certain apps
proxy_no_cache $cookie_session;

# Proxy Header Settings
proxy_set_header Connection $connection_upgrade;
proxy_set_header Early-Data $ssl_early_data;
#proxy_set_header Host $host;
proxy_set_header Proxy "";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Method $request_method;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Uri $request_uri;
proxy_set_header X-Original-Method $request_method;
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
proxy_set_header X-Real-IP $remote_addr;

## 2024/06/14 - Parameter der Synology proxy.conf
proxy_set_header X-Forwarded-By $server_addr;
proxy_set_header Host $http_host;

Das Thema ist dann nun (hoffentlich) endgültig geklärt :)
 
  • Haha
Reaktionen: ctrlaltdelete


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat