%3F.png)
Ich versuche derzeit, mich mit Nginx vertraut zu machen und brauche etwas Anleitung. Das ist ziemlich neu für mich, also entschuldigen Sie, wenn dies bereits beantwortet wurde (ich habe zuerst gesucht!).
Szenario: Ich habe einen Seafile-Server (cloud.example.com) und einen Zammand-Server (support.example.com), beide auf Ubuntu-VMs (1 VM für jede), die ich mit Certbot SSL-gesichert habe. Ich kann beide natürlich SSL-gesichert ausführen, aber da beide Port 443 verwenden, habe ich jetzt ein Problem, wenn ich Ngnix nicht richtig verwende.
Meine erste Frage lautet: Kann ich eine weitere VM nur für Ngnix haben, die die URL-Anfragen an andere VMs weiterleitet, oder brauche ich sowohl Seafile als auch Zammand auf demselben Server, um Ngnix/SSL für beide zu verwenden? (Ich habe beides derzeit zum Testen auf einer VM installiert).
WENN ich von einem einzelnen Server aus arbeite (sowohl Seafile als auch Zammand installiert – obwohl ich beide auf ihrer eigenen VM bevorzugen würde), gehe ich davon aus, dass ich nur mein „/etc/nginx/sites-available/default“ bearbeiten und dort Routing-Pfade hinzufügen muss? Derzeit habe ich 3 „sites-available“ – Seafile, Zammand und Standard. Ich sehe, dass es „sites-active“ gibt, das derzeit „seafile“ ist. Sowohl cloud.example.com als auch support.example.com leiten also beide zu seafile (cloud.example.com) weiter.
Oder sehe ich das völlig falsch? Jeder konstruktive Rat ist willkommen! Entschuldigen Sie, wenn ich das nicht ganz klar beschrieben habe.
Antwort1
Am besten erstellen Sie eine dritte VM und richten nginx dort ein. Sie können es auch auf einer der vorhandenen VMs einrichten.
Danach müssen Sie nginx so konfigurieren, dass mehrere „Server“-Einträge verwendet werden, einer für jede Domäne, die Sie bedienen, und der auf ein anderes Backend weiterleitet.
Im Internet finden Sie zahlreiche Anleitungen dazu.
Antwort2
Sie haben also zwei separate und unabhängige Server, richtig? Wenn das zutrifft, müssen Sie etwas wie eine SNI-Prüfung verwenden, um zu bestimmen, an welchen Host die Verbindung weitergeleitet werden soll. Dies kann ab nginx 1.11.5 und . erfolgen, ohne die SSL-Verbindung zu beenden ngx_stream_ssl_preread_module
.
Sie müssen die ProxyPass-Direktive so konfigurieren, dass sie die Daten an das Remote-System hinter dem Proxy senden kann. Anschließend müssen Sie sicherstellen, dass der Nginx-Host mit dem Internet verbunden ist, damit alle Abfragen zuerst über ihn laufen.
Durch die Verwendung von SNI-Überprüfung und TCP-Stream-Proxys verarbeitet der Remote-Server alle seine SSL-Verbindungen direkt, nginx leitet lediglich den Datenverkehr von dem einen IP-Endpunkt per Proxy weiter.
Ich würde das hier auch mal checken:https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/
Spezielle Behandlung der SNI-Prüfung bei Verwendung von TCP-Stream-Proxys:http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.htmlSNI wird während des TLS-Handshakes einbezogen, bevor der Handshake tatsächlich verarbeitet wird. Auf diese Weise kann nginx den Datenverkehr an den richtigen Endpunkt senden und diesem Endpunkt ermöglichen, den TLS-Handshake tatsächlich durchzuführen.