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: