Synology hinter NGINX Reverse-Proxy

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

giantroXx

Benutzer
Registriert
17. Sep. 2022
Beiträge
13
Reaktionspunkte
0
Punkte
1
Hi zusamnen,

wie im Titel beschreiben, betreibe ich meine DS1621+ hinter einem NGINX reverse proxy.
D.h. ich zeige mit einer Domain per DNS auf meine statische IP V4 und route Port 80 sowie 443 an meinen Raspberry PI4 durch, auf dem ein NGINX Webserver läuft.

Das funktioniert auch alles ganz gut soweit d.h. ich kann unter z.B. https://dsm.meinedomain.de auf DSM zugreifen, habe auch ein LetsEncrypt Zertifikat auf dem Raspberry PI4 installiert - somit geht das auch ganz wunderbar.

Die Photos-App habe ich ebenfalls zum laufen bekommen, Synology-Files hat musste noch Port 433 manuell angehängt bekommen (Sonst wird hardcoded 5001 verwendet).

Was ich aber absolut NICHT zum laufen bekomme ist die MOBILE VERSION von https://dsm.meinedomain.de.
So sieht meine Konfiguration für den Host aus:

Bash:
server {
  listen       80;
  listen       [::]:80;
  server_name  dsm.meinedomain.de;
  return 301 https://$host$request_uri;
}

server {
  listen       443 ssl;
  listen       [::]:443 ssl;
  server_name  dsm.meinedomain.de;

  include snippets/ssl-meinedomain.de.conf;

  location / {
    proxy_pass http://10.0.0.7:5000$request_uri;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }

  #location /scripts {
    #return 301 https://10.0.0.7:5001$request_uri;
  #}
}

server {
  listen       443 ssl;
  listen       [::]:443 ssl;
  server_name  photos.meinedomain.de;

  include snippets/ssl-meinedomain.de.conf;

  location / {
    proxy_pass http://10.0.0.7:5080$request_uri;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

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

  server_name  files.meinedomain.de;

  include snippets/ssl-meinedomain.de.conf;

  location / {
    proxy_pass http://10.0.0.7:7000$request_uri;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

Mein Problem ist jetzt folgendes, die Mobile Website von DSM will mit dieser Konfiguration nicht!
Ich sehe immer nur den Lade-Spinner und sonst nix mehr.


Das Problem besteht darin, dass 2 Files nicht korrekt über den ReverseProxy abgerufen werden können:
Code:
Request URL: https://dsm.meinedomain.de/scripts/sencha-touch-2.4.1/resources/css/cupertino.css?v=42661
Request Method: GET
Status Code: 404 Not Found
Remote Address: xx.xx.xx.xx:443
Referrer Policy: strict-origin-when-cross-origin

Request URL: https://dsm.meinedomain.de/scripts/sencha-touch-2.4.1/touch.js?v=42661
Request Method: GET
Status Code: 404 Not Found
Remote Address: xx.xx.xx.xx:443
Referrer Policy: strict-origin-when-cross-origin

Alle anderen Files funktionieren Problemlos...

Habt Ihr mir einen Tipp, wie ich das richtig zum laufen bekomme? Ich komm nicht drauf, warum das normale DSM läuft, die Mobile Geschichte jedoch nicht.

Danke für eure Hilfe!
 
Der Proxy vorenthält der Synology die Herkunft des Zugriffs. Die Synology denkt, dass der Raspi zugreift (der auch seine Bildschirmgröße nicht mitteilt) und nicht ein Mobilgerät.
Das ist der Sinn eines Proxy.
 
Ich kann dir mal meine Reverse-Proxy-Konfiguration zu Verfügung stellen:
Code:
server {
    server_tokens off;

    listen port ssl;
    listen [::]:port ssl;
    server_name storage.service.mydomain.de;

    location / {
        rewrite ^(/.*)$ $1 break;
        proxy_pass https://ip_des_nas:port/;
        proxy_set_header Host $host;
        proxy_redirect https://$host/ https://$http_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;
        access_log /var/log/nginx/storage.access.log;
        error_log /var/log/nginx/storage.error.log;
        proxy_cache assets_zone;
        add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" always;
        add_header X-Proxy-Cache $upstream_cache_status;
    }
}

Dort sind mir derartige Probleme bisher jedenfalls nicht aufgefallen, gesucht hab' ich aber auch nicht danach...;)
 
  • Like
Reaktionen: giantroXx
Sorry, Ich bin kein Hai was proxy Settings angeht. Ich vermisse "user agent", "browser size" und einiges mehr.
mögen andere übernehmen.
 
Ich habe das gleiche Problem das mein reverse-proxy mit ngnix nicht auf mobile funktioniert
(kann man in den devtools von chrome als "mobile" gut testen)

Ergebnis bis jetzt:
Diese Dateien gibt es auch nicht!
Nur als gzip version

Beispiel: touch.js ("fail", nur als "gzip")

1673794430101.png

Beispiel: vue-router.min.js (alles "gut", gzip UND "normal")

1673794332258.png
 
yeah! hat etwas gedauert mit viel try'n'error

erster erfolg war:
NGINX:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;

und nach weiterem forschen, einfach NUR:
NGINX:
proxy_http_version 1.1;

default ist 1.0...

jetzt muss ich nur noch die WebSocket connection hinbekommen

grüße!
 
hier mein ganzer "schlanker" block
(mein ngnix reverse proxy läuft in einem docker-container)
NGINX:
 server {
      listen                                443;
      listen                           [::]:443;
      server_name           subdomain.domain.de;


      location / {
         set $host_docker_internal 172.17.0.1;
         proxy_pass https://$host_docker_internal:5001;
         proxy_http_version 1.1;

         error_page 502 = @fallback;
      }

      location @fallback {
         default_type text/plain;
         return 500 "https://subdomain.domain.de seems to be offline, please check application";
     }
}
 
yeah! hat etwas gedauert mit viel try'n'error

erster erfolg war:
NGINX:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;

und nach weiterem forschen, einfach NUR:
NGINX:
proxy_http_version 1.1;

default ist 1.0...

jetzt muss ich nur noch die WebSocket connection hinbekommen

grüße!

Wow. Deine Antwort hat mein Problem gelöst. Habe gerade durch zufall nochmal in den alten Thread geschaut. Dass die Lösung so "easy" ist hätte ich nicht gedacht, ich hatte alles ausprobiert nur nicht die http Version :) Danke!
 

Additional post fields

 

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