Nginx reverse Proxy - Erklärung

Hi Leute,

ich bräuchte mal euren Rat. Irgendwie wird mir nirgends so richtig klar, wie man bzw wann man einen reverse Proxy einsetzen muss. Was ich bisher verstanden habe ist, dass man mithilfe eines reverse Proxys mehrer Websites auf demselben Server hosten kann. Was ich aber nicht verstanden habe ist, ob zusätzlich beispielsweise Nextcloud noch anders gehostet werden muss? Also explizit meine ich wenn ich beispielsweise Nextcloud über Nginx hosten will aber über meine Domain noch andere Websites auf einem anderen Rechner hosten möchte. Dafür würde ich ja den reverse Proxy benötigen. Ich möchte gerne meine Nextcloud auf meinem eigenständigen NAS/Server installieren und dort über Nginx hosten, zusätzlich aber auch ein paar Websites meines Raspis vom Smarthome über die Domain erreichbar machen. Der Herr Rieger hat auf seiner Website dazu ja sehr ausführliche Anleitungen:
Nextcloud Hub mit Nginx
Nextcloud Hub Nginx Proxy

Falls nicht erwünscht, entferne ich gerne die Links wieder.

Ich wäre euch super dankbar, wenn ihr mir da etwas Licht ins Dunkle bringen würdet. Gerne auch Lektüre zum Lesen und Verstehen.

Gruß Phil

nextcloud an sich ist eine php anwendung. die braucht einen webserver und einen php interpreter, damit nextcloud funktioniert. wie man das mit nginx&php-fpm aufsetzt, ist in dem ersten artikel von carsten beschrieben.

in der nextcloud.conf steht: lausche auf ihre.domain.de port 80 und redirecte alles nach port 443 (außer acme-challenge, das sind anfragen vom letsencrypt server zur validierung deiner domain. zu dem zeitpunkt hast du noch kein zertifikate.)

server {
    server_name ihre.domain.de;
    listen 80 default_server;
    listen [::]:80 default_server;
  location ^~ /.well-known/acme-challenge {
    proxy_pass http://127.0.0.1:81;
    proxy_set_header Host $host;
  }
  location / {
    return 301 https://$host$request_uri;
  }
}

alles an ihre.domain.de port 443 ankommt, wird von nextcloud verarbeitet.

server {
    server_name ihre.domain.de;
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    root /var/www/nextcloud/;
...

fragt dein browser nicht https://ihre.domain.de/ sondern https://192.168.178.10/ (die ip adresse deines servers) an, kommt keine antwort. (oder die default page vom nginx).

du kannst jetzt beliebig viele .conf dateien mit

server {
    server_name ihre.domain.de;

statments anlegen. damit kannst du beliebig viele web-seiten auf dem server betreiben.

wenn du alles auf einem linux server in verschiedenen ordner unter /var/www betreiben willst, brauchst du nicht jedesmal einen webserver aufsetzen. einfach neben nextcloud.conf eine joomla.conf, wordpress.conf, etc.pp.conf legen.

wenn sich die zahl der server und dienste aber erhöht, kann es sinnvoll sein, einen reverse proxy vorzuschalten. dann für jeden fqdn den du ansprechen willst, einen eintrag in desen nginx.conf erzeugen:

server {
    server_name ihre.domain.de;
...
    proxy_pass http://192.168.178.11:80;
}
server {
    server_name andere.domain.de;
...
    proxy_pass http://192.168.178.12:80;
}
server {
    server_name ihre.domain.de;
...
    location /subfolder
       proxy_pass http://192.168.178.11:80;
}
server {
    server_name ihre.domain.de;
...
    location /anderefolder
       proxy_pass http://192.168.178.11:81;
}

da du zuhause an deinem router nur eine externe ip adresse hast, musst du diese für alle domains eintragen und port 80&443 auf einen internen nginx weiterleiten. und der verteilt das intern. als reverse proxy. dabei ist dann egal, wo der reverse proxy läuft. raspi oder nas.

eine sache gilt es dann noch zu beachten: nur der reverse proxy spricht ssl und hat letsencrypt zertifikate für die domains. wir setzen dafür voraus, dass dein heimnetz sicher ist. dann dürfte es unproblematisch sein, wenn der reverse proxy unverschlüsselt mit der nextcloud spricht. ansonsten musst du dir für die nextcloud selbstsignierte zertifikate ausstellen.

ok?

1 Like

Erstmal vielen Dank für deine ausführliche Erklärung. Ich denke soweit hab das ich das erstmal verstanden.
Das bedeutet ich müsste meine Nextcloud auf dem Server erstmal nach der ersten Anleitung einrichten aber nicht auf Port 443 redirecten und auch den letsencrypt Part weglassen.
Im reverse Proxy müsste ich dann aber die Konfiguration für Port 443 und letsencrypt vornehmen und dort zum einen meine Nextcloud auf demselben Server und die Einträge für die Dienste auf dem Raspi vornehmen?

wenn du den externen traffic von deinem router zum server schickst, auf dem nextcloud läuft, setzt du den/die reverse proxy nur für die dienste auf dem raspi auf.

du kannst natürlich auch einen reverse proxy vor die nextcloud setzen. das macht man unteranderem, wenn man für alle dienste gleiche security header setzen will. carsten hat dafür alle relevanten einträge in ssl.conf gesammelt. dann muss man nicht dran denken, dass für jeden dienst neu zu definieren.

Wie genau meinst du den ersten Teil?
Am Ende soll auf dem Server Nextlcoud laufen und auf dem Raspi 2 Config Panels aufrufbar sein. Natürlich mit Login ssl verschlüsselt etc. Wo und was sollte dabei deiner Meinung nach in der reverse Proxy?

so, oder?

dann kannst du dir im prinzip aussuchen, ob du für die nextcloud direkt einen server { } eintrag machst, oder den umweg über einen reverse proxy eintrag.

Ja genau so sollte es am Ende aussehen. Dann werd ich das wohl erstmal als einzelnen Server Eintrag versuchen umzusetzen und den Raspi als Reverse Proxy. Sollte das mit dem Raspi nicht klappen, wäre das zwar auch nicht die Welt, aber wäre schon cool. Ich danke schonmal vielmals für deine Mühe. Das hat mir auf jeden Fall sehr viel weitergeholfen. :+1: