DSM 6 Reverse Proxy

DerLord

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
113
Punkte für Reaktionen
0
Punkte
22
Wie du willst ;-) Nur bei mir lüppen beide Varianten auch zum NAS hin einwandfrei...

Wenn du alle Punkte vorher beachtet und kontrolliert hast, dann kann ich mir nur noch vorstellen, dass du irgendwo noch eine Macke in der config hast.


/edit:
Ich nehme alles zurück und behaupte das Gegenteil ;-)
Bekomme es imo auch bei mir nicht (mehr?) hin. Hätte schwören können... Aber kann mich auch hier irren, da ich selbst mit Subdomains arbeite und alles andere nur unter "Jugend forscht" zu verbuchen ist.
 
Zuletzt bearbeitet:

XerXes777

Benutzer
Mitglied seit
29. Jan 2016
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
www.domain.de wird auf https umgeleitet.
domain.de wird nicht auf https umgeleitet.
Beide Adressen sollen auf meinem Web Station gehen.
Benutzte den Code:
HTML:
        # -------------------------------------------------------------------------------------------------------
        # HTTPS Redirect
        # -------------------------------------------------------------------------------------------------------
        server {
            listen         80;
            server_name 	  *.domain.de;
            return         301 https://$http_host$request_uri;
        }

Habe auch schon zusätlich noch folgende Zeilen mit reingeschrieben:
HTML:
        # -------------------------------------------------------------------------------------------------------
        # HTTPS Redirect Web Station
        # -------------------------------------------------------------------------------------------------------
        server {
            listen         80;
            server_name 	  domain.de;
            return         301 https://$http_host$request_uri;
        }

Hat aber nix gebracht.
 

DerLord

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
113
Punkte für Reaktionen
0
Punkte
22
ersteres sollte funktionieren. Falls nicht mal den Browsercache komplett leeren.
Du benötigst dann aber auch einen Server-Block mit entsprechendem listen auf 443 ssl und server_name = www.domain.de
 

XerXes777

Benutzer
Mitglied seit
29. Jan 2016
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
Bei meinem Domainanbieter. Habe ich bei domain.de ein A-record zu meiner statischen IP gemacht.
Dann habe ich eine subdomain erstellt mit www.domain.de. (also das www ist quasi meine subdomain).
Und dort habe ich wieder meine statische IP als A-record gesertzt.
möchte beide adressen www.domain.de und domain.de auf https umleiten. was bis jetzt nur bei www.domain.de geht.
Und das diese adressen auf meine Web Station führen, was auch aktuel so ist.

Das löschen des Browsercach hat nix gebracht.
 

XerXes777

Benutzer
Mitglied seit
29. Jan 2016
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
kann meine beiträge nicht ändern.

meine aktuelle config ist:
HTML:
        # -------------------------------------------------------------------------------------------------------
        # HTTPS Redirect
        # -------------------------------------------------------------------------------------------------------
        server {
            listen         80;
            server_name 	  *.domain.de;
            return         301 https://$http_host$request_uri;
        }
        # -------------------------------------------------------------------------------------------------------
        # HTTPS Redirect
        # -------------------------------------------------------------------------------------------------------
        #
        # -------------------------------------------------------------------------------------------------------
        # NAS Server HTTP
        # -------------------------------------------------------------------------------------------------------
        server {
        listen 80;
        listen [::]:80;

        server_name home.domain.de;

        location / {
            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_intercept_errors  on;
            proxy_http_version      1.1;

            proxy_pass http://localhost:5000;

        }
    }
        # -------------------------------------------------------------------------------------------------------
        # NAS Server HTTP
        # -------------------------------------------------------------------------------------------------------
        #
        # -------------------------------------------------------------------------------------------------------
        # NAS Server HTTPS
        # -------------------------------------------------------------------------------------------------------
        server {
        listen 443;
        listen [::]:443;

        server_name home.domain.de;

        location / {
            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_intercept_errors  on;
            proxy_http_version      1.1;

            proxy_pass https://localhost:5001;

        }
    }
        # -------------------------------------------------------------------------------------------------------
        # NAS Server HTTPS
        # -------------------------------------------------------------------------------------------------------
        #
        # -------------------------------------------------------------------------------------------------------
        # PhotoStation
        # -------------------------------------------------------------------------------------------------------
        server {
        listen 443 ssl;
        listen [::]:443 ssl;

        server_name photo.domain.de;

        root /var/packages/PhotoStation/target/photo;

        add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;	       

        location / {                                                    
            proxy_http_version 		1.1;
            proxy_set_header 		Upgrade 			$http_upgrade;
            proxy_set_header 		Connection 			"upgrade";

            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_read_timeout 300;	

            #auth_basic "Photostation";
            #auth_basic_user_file /etc/nginx/.htpasswd; 			

            rewrite ^/$ http://$http_host/photo;

            proxy_pass http://localhost;                           
        }
	}
        # -------------------------------------------------------------------------------------------------------
        # PhotoStation
        # -------------------------------------------------------------------------------------------------------
 

DerLord

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
113
Punkte für Reaktionen
0
Punkte
22
Du fragst ja bei deinem HTTPS-Redirect per Wildcard nur die Subdomains ab. Die Domäne selbst müsstest du dann mit aufnehmen:

Rich (BBCode):
        # -------------------------------------------------------------------------------------------------------
        # HTTPS Redirect
        # -------------------------------------------------------------------------------------------------------
        server {
            listen         80;
            server_name    *.domain.de
                           domain.de;
            return         301 https://$http_host$request_uri;
        }


Dein Block "NAS Server HTTP" wird vermutlich dein HTTPS Redirect für home.domain.de aushebeln, da explizite Hosts vorrangig behandelt werden.
 

rheckly

Benutzer
Mitglied seit
07. Aug 2011
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo
Zuerst vielen Dank für die wertvollen Informationen hier. Versuche mich gerade vom Apache DSM 5.2 Reverse Proxy in den DSM 6 NGINX einzuarbeiten - wobei ich echt nicht der Spezialist hier bin.
Ich habe einen DSN EIntrag bei mir gemacht, welcher DSM.domain.dlt heisst und auf meine DSM zeigt.
Auf der DSM habe ich nun die WebStation aktiviert und als Backend Server NGINX eingestellt.
DSM ist eine DockerDSM.

Zudem habe ich folgenden Code von Dir übernommen und eine reverse.conf im Verzeichnis usr\local\etc\nginx\sites-enabled\ erstellt - mit folgendem Inhalt:


# -------------------------------------------------------------------------------------------------------
# NAS Server
# -------------------------------------------------------------------------------------------------------
server {
listen 80;
listen [::]:80;

server_name dsm.domain.dlt;

location / {
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_intercept_errors on;
proxy_http_version 1.1;

proxy_pass http://localhost:5000;

}
}

Das Problem ist aber, dass wenn ich http://dsm.domain.dlt ausführe, ich immer auf der Startseite von der Webstation lande. Sprich nicht zum Login Screen weiter geleitet werde.

Muss der Reverse Proxy noch irgendwo aktiviert werden, dass dieser das ausführt? Auch nach dem Neustart der DockerDSM werde ich noch nicht weitergeleitet.

An dieser Stelle eine Frage:
Wie kann ich Änderungen in der reverse.conf übernehmen, ohne dass ich die DSM restarten muss?
Wenn ich z.B. sudo /usr/syno/sbin/synoservicecfg --restart pkgctl-WebStation eingebe, dann bleibt mein putty hängen und es geht nix mehr.

Vielen Dank schon mal an alle, die mir hier weiter helfen können!
GruRo
 

DerLord

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
113
Punkte für Reaktionen
0
Punkte
22
Moinsen,

es reicht, wenn du nginx neustartest: nginx -s reload

Config ist OK und wenn du Portforwarding korrekt eingerichtet hast, sollte es funzen. Starte nginx mal neu und leere deinen Browsercache.
 

nicx

Benutzer
Mitglied seit
18. Jun 2013
Beiträge
174
Punkte für Reaktionen
5
Punkte
18
Hallo zusammen,

ich habe ein Problem mit dem Reverse Proxy :( Ich möchte diesen nutzen um meine Webdav-Zugriffe über Port 443 zu ermöglichen, der Reverse Proxy leitet dann um auf localhost:5006. Die Default Config sieht so aus:

Rich (BBCode):
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name webdav.domain.de;

    ssl_certificate /usr/syno/etc/certificate/ReverseProxy/c017799b-d3d0-4a85-8007-7b13b2cc705e/fullchain.pem;

    ssl_certificate_key /usr/syno/etc/certificate/ReverseProxy/c017799b-d3d0-4a85-8007-7b13b2cc705e/privkey.pem;

    location / {
        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_intercept_errors  on;
        proxy_http_version      1.1;

        proxy_pass https://localhost:5006;

    }
}

soweit so gut, ich kann mit verschiedenen webdav Clients zugreifen. Funktioniert. Nun aber habe ich genau eine Clientapplikation, die Probleme macht und mir immer die Fehlermeldung "Error writing Headers" ausgibt. Die Applikation (Banking 4X wen es interessiert) funktioniert wenn ich ohne Proxy direkt auf Port 5006 zugreife, d.h. der Nginx Proxy muss hier irgendwie dazwischenfunken.

Vermutung ist das der Proxy irgendwelche SSL oder Cipher Protokolle blockt, daher habe ich folgende Config versucht, leider aber mit genau dem selben Fehlerbild:

Rich (BBCode):
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name webdav.domain.de;

    ssl_certificate /usr/syno/etc/certificate/ReverseProxy/c017799b-d3d0-4a85-8007-7b13b2cc705e/fullchain.pem;

    ssl_certificate_key /usr/syno/etc/certificate/ReverseProxy/c017799b-d3d0-4a85-8007-7b13b2cc705e/privkey.pem;

    ssl on;
    ssl_protocols  SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:+HIGH:+LOW:+MEDIUM:!aNULL:!eNULL:;
    ssl_prefer_server_ciphers on;

    location / {
        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_intercept_errors  on;
        proxy_http_version      1.1;

        proxy_pass https://localhost:5006;

    }
}

Was könnte ich noch versuchen? Gibt es eine Möglichkeit die genaue Ursache herauszufinden? Ein Errorlog zeigt mir trotz Debug-Level leider überhaupt nichts an.

Bin für jede weiter Hilfe oder Ideen dankbar :)
 

blinddark

Benutzer
Mitglied seit
03. Jan 2013
Beiträge
1.386
Punkte für Reaktionen
34
Punkte
68
Hallo zusammen,

ich habe ein Problem mit dem Reverse Proxy :( Ich möchte diesen nutzen um meine Webdav-Zugriffe über Port 443 zu ermöglichen, der Reverse Proxy leitet dann um auf localhost:5006. Die Default Config sieht so aus:
Hallo, ich habe es nun mal getestet und deine Config nur an meine Domain angepasst.
- Aus dem Heimnetz und anderen Geräten funktioniert es bisher mit Ausnahme der App Banking for x (iPhone und Windows konnten hier getestet werden.)
- nun das Interessante: aus einem Netz, wo der port 5006 definitiv nach außen zu ist, kann ich zwar den Benutzernamen und das Kennwort beim Hinzufügen einer Website zum Speichern von Dokumenten und Bildern eingeben, aber nach dem Drücken von der Eingabetaste springt der Bildschirm wieder auf den Login zurück.

Ich hätte nun zwei Ideen
1. einfach mal localhost mit 127.0.0.1 ersetzen. Hin und wieder reicht das schon.
2. Hast du den Reverseproxy mal über die Systemsteuerung, Anwendungsportal versucht einzurichten?

Viele Grüße Blinddark
 

nicx

Benutzer
Mitglied seit
18. Jun 2013
Beiträge
174
Punkte für Reaktionen
5
Punkte
18
Hi,

sowohl mit der 127.0.0.1 als auch mit meiner lokalen festen IP 192.168.0.10 der Syno funktioniert es nicht über den Reverse Proxy.
Die Einrichtung habe ich bereits über die Systemsteuerung gemacht, das meinte ich in meinem ursprünglichen Eintrag mit "Deafult-Konfig", ich habe diese dann einfach über SSH angepasst bzgl. der Ciphers.

Inzwischen habe ich auch eine Aussage von Subsembly zu dem Verhalten der App erhalten:

Rich (BBCode):
wir verwenden für die Entwicklung die Xamarin-Entwicklungs-Umgebung und verlassen uns auf die darin enthaltene SSL-Unterstützung. Im SSL-Protokoll wird festgelegt, welche Ciphers (also welche Algorithmen zum Aufbau einer Datenverbindung) verwendet werden sollen. Dabei müssen Sender und Empfänger einer Verbindung dieselben Ciphers "verstehen" können.
Wir befürchten, dass Xamarin aktuell immer noch nur die im Forum auf
<https://forums.xamarin.com/discussion/9098/weak-ciphers-with-ssl-tls>
beschriebenen Ciphers unterstützt (auch für iOS/Mac OS). Was die zukünftige Unterstützung anderer Ciphers angeht, so hängt das ausschließlich von Xamarin ab und wir haben darauf leider keinen Einfluss.

Meine Vermutung scheint sich also zu bestätigen... nginx lässt hier wohl einiges einfach nicht zum eigentlich Apache Webserver durch da es ja mit direktem Zugriff ohne Proxy funktioniert.

Daher vielleicht nochmal die Frage: Wie bekomme ich den Nginx Proxy so konfiguriert, dass er mir einfach bzgl. SSL/Ciphers alles an den Webdav-Apache durchlässt?

Gruss
 

blinddark

Benutzer
Mitglied seit
03. Jan 2013
Beiträge
1.386
Punkte für Reaktionen
34
Punkte
68
Kann eventuell folgendes abhilfe schaffen:
zeile 2
listen 443 ssl;
durch
listen 443 ssl http2;
ersetzen

Ich kann es leider momentan nicht testen.
 

blinddark

Benutzer
Mitglied seit
03. Jan 2013
Beiträge
1.386
Punkte für Reaktionen
34
Punkte
68
ich habe eben mal unter http://nginx.org/en/docs/http/ngx_http_proxy_module.html
geschaut. bei proxy_hide_header field; steht als beschreibung "By default, nginx does not pass the header fields “Date”, “Server”, “X-Pad”, and “X-Accel-...” from the response of a proxied server to a client. The proxy_hide_header
directive sets additional fields that will not be passed. If, on the contrary, the passing of fields needs to be permitted, the
proxy_pass_header"

Die Fehlermeldung bezieht sich doch auf den Header oder? Eventuell hilft uns dieser Parameter etwas weiter.
 

nicx

Benutzer
Mitglied seit
18. Jun 2013
Beiträge
174
Punkte für Reaktionen
5
Punkte
18
den parameter hatte ich zum test auch schon eingebaut:

Rich (BBCode):
    location / {
        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_pass_header       http;
        proxy_pass_header       server;
        proxy_pass_header       location;
        proxy_intercept_errors  on;
        proxy_http_version      1.1;

        proxy_pass https://localhost:5006;

    }

leider ebenfalls ohne erfolg...
 

danaryo

Benutzer
Mitglied seit
17. Apr 2013
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Aloha allerseits..

bin vor ein paar Tagen auf dieses Thema gestoßen weil ich gern bei mir unter DSM 6 einen Reverse Proxy einrichten würde. Damit will ich meine offenen Ports etwas eindämmen und zusätzlich einige Dienste, die das nicht selbst können, mit auth und ssl ausstatten.
Habe mich nun durch das gesamte Topic gekämpft und einiges ausprobiert. Auch auf anderen Seiten hab ich mich schon umgeschaut und andere Beispiele adaptiert. Leider nicht mit dem gewünschten Erfolg.
Über Port 80 klappt alles so wie ich es mir vorstelle. Aber sobald ich die Config auf Port 443 übertragen will klappt nix mehr. Kann mir vllt jemand sagen ob mein Code soweit korrekt ist oder ob ich evtl. noch irgendwas anderes übersehe?

Habe DSM Oberfläche und Photostation mal als Beispiel genommen. Andere Dienste sollten ja ziemlich äquivalent zur DMS Oberfläche sein. Wenn diese beiden erstmal laufen würden wäre ich schon froh.

Rich (BBCode):
# -------------------------------------------------------------------------------------------------------
# HTTP
# -------------------------------------------------------------------------------------------------------
server {
listen          80;
listen          [::]:80;
server_name     my.domain.net;

# DSM
# ---------------------------------------------------------------------------------------------------
location / {
proxy_pass http://127.0.0.1:5000/;
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_intercept_errors  on;
proxy_http_version      1.1;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect http://127.0.0.1:5000/ http://$host:$server_port/;
proxy_buffering off;
}

# Photostation
# ---------------------------------------------------------------------------------------------------
location /photo {
root /var/packages/PhotoStation/target/photo;
proxy_http_version      1.1;
proxy_set_header        Upgrade             $http_upgrade;
proxy_set_header        Connection          "upgrade";
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 300;

proxy_pass http://127.0.0.1;
}

}
# -------------------------------------------------------------------------------------------------------
# HTTPS
# -------------------------------------------------------------------------------------------------------
server {
listen 443;
listen [::]:443;

server_name my.domain.net;

add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;

ssl_certificate         /usr/syno/etc/certificate/system/default/fullchain.pem;
ssl_certificate_key     /usr/syno/etc/certificate/system/default/privkey.pem;
ssl on;
ssl_session_cache       builtin:1000        shared:SSL:10m;
ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers             HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;

# DSM
# ---------------------------------------------------------------------------------------------------
location / {
proxy_pass http://127.0.0.1:5000/;
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_intercept_errors  on;
proxy_http_version      1.1;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect http://127.0.0.1:5000/ http://$host:$server_port/;
proxy_buffering off;
}

# Photostation
# ---------------------------------------------------------------------------------------------------
location /photo {
root /var/packages/PhotoStation/target/photo;
proxy_http_version      1.1;
proxy_set_header        Upgrade             $http_upgrade;
proxy_set_header        Connection          "upgrade";
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 300;

proxy_pass http://127.0.0.1;
}

}
 

danaryo

Benutzer
Mitglied seit
17. Apr 2013
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Was bedeutet das >genau<, was klappt nicht (Fehlermeldung) ?

Mit übertragen meine ich so wie im Code oben. Die Configs für Port 80 und 443 unterscheiden sich ja nur am ssl Block. Der Rest ist gleich.
Fehlermeldungen in den Logs gibt es keine. Nach dem Neustart oder Reload des nginx kommen keine neuen Meldungen ins Log. Es sei denn ich produziere absichtlich falsche Aufrufe.
Wenn ich aber https://my.domain.net/ oder https://my.domain.net/photo im Browser (getestet mit Chrome und Edge) aufrufen will kommt nur eine "Seite nicht erreichbar (Timeout)" Meldung vom Browser.

Die Zertifikate liegen dort. Es sind LetsEncrypt Zertifikate die ich in meinen Diensten auch teilweise direkt benutze. Dort laufen sie auch aktuell ohne Probleme.
Der Port ist genau so wie Port 80 auf die DS weitergeleitet.

Ich habe die automatische HTTPS Umleitung in der DSM Konfig ausgeschaltet. Hatte mal irgendwo gelesen, dass das zu Problemen führen könnte. Stimmt das?
Muss ich evtl. noch an irgendwas anderes als Grundvoraussetzung denken was man vllt sonst anders einstellt?

Gruß & Dank
Dan
 

DerLord

Benutzer
Mitglied seit
25. Mrz 2016
Beiträge
113
Punkte für Reaktionen
0
Punkte
22
Hat es einen Grund warum du die SSL-Parameter entfernt hast?
Rich (BBCode):
listen 443 ssl;
listen [::]:443 ssl;

Ansonsten findest du unter Post #54 ein funktionierendes Script, eben genau mit den beiden Anwendungen DSM und Photostation. Wenn das auch nicht funktioniert, dürfte man das Script als Fehlerquelle vielleicht schon ausschließen können.
 


 

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