Synology hinter NGINX Reverse-Proxy

giantroXx

Benutzer
Mitglied seit
17. Sep 2022
Beiträge
13
Punkte für Reaktionen
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!
 

Thorfinn

Benutzer
Sehr erfahren
Mitglied seit
24. Mai 2019
Beiträge
1.733
Punkte für Reaktionen
410
Punkte
103
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.
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.138
Punkte für Reaktionen
724
Punkte
154
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

Thorfinn

Benutzer
Sehr erfahren
Mitglied seit
24. Mai 2019
Beiträge
1.733
Punkte für Reaktionen
410
Punkte
103
Sorry, Ich bin kein Hai was proxy Settings angeht. Ich vermisse "user agent", "browser size" und einiges mehr.
mögen andere übernehmen.
 

crazyx13th

Benutzer
Mitglied seit
06. Sep 2013
Beiträge
15
Punkte für Reaktionen
0
Punkte
1
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
 

crazyx13th

Benutzer
Mitglied seit
06. Sep 2013
Beiträge
15
Punkte für Reaktionen
0
Punkte
1
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!
 

crazyx13th

Benutzer
Mitglied seit
06. Sep 2013
Beiträge
15
Punkte für Reaktionen
0
Punkte
1
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";
     }
}
 

giantroXx

Benutzer
Mitglied seit
17. Sep 2022
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
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!
 


 

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