Ich versuche Nginx Reverse Proxy Multiple Container.
Ich habe 2 Container, die einen Knoten hinzufügen, der auf 8085 und andere auf 8086 hört Ich möchte, dass sie durch
darauf zugreifennode.app1.com
node.app2.com
Also habe ich jwilder / nginx-proxy: next verwendet, welches in den beiden Containern enthalten ist und als revers-Proxy fungiert. also hier ist meine compose.yml-Datei.
Also, wenn ich das tue
%Vor%alle meine Container laufen und laufen
aber wann tun node.app1.com - & gt; es sagt, es ist ein unbekannter Wirt.
Um zu überprüfen, ob die Anfrage an den Proxy gesendet wird, habe ich versucht, Ссылка vom Browser aus aufzurufen, und es heißt 503
Ich habe auch nginx.config im Seitencontainer mit
überprüftdocker exec -it node-proxy_id bash
Katze /etc/nginx/conf.d /
und es ist da, aber ich denke, wenn ich node.app1.com Anfrage nicht zum Proxy kommen. Ich komme nicht dahin, wo ich verpasst habe, kann mir jemand dabei helfen.
Danke für Ihre Zeit
Wenn Sie links
oder depends_on
für die anderen Dienste festlegen, richtet docker-compose standardmäßig den Hostnamen der anderen Dienste als container_name
im gleichen Andocknetzwerk ein.
In Ihrem Fall würde ich vorschlagen, links
hinzuzufügen, wie @Mathias darauf reagiert.
Aktualisiert:
Ich habe festgestellt, dass Nginx config upstream
Direktive für mehrere Hostnamen hat. Sie sollten die node-app1
wie:
Sie können auch die letzte Zeile in etc/hosts
file in Ihrem node-proxy
-Container ändern als:
Dann sollten Sie http://node.app1.com
direkt in Ihrem node-proxy
-Container aufrufen können.
Hier ist ein Tutorial zu Einrichten von nginx virtuellen Hosts auf Ubuntu 16 04
Kommentar I:
Nach meinem Verständnis neigt die nginx-proxy
dazu, eine Proxy-Anforderung an den Back-End-Dienst zu senden, der keinen Hostnamen in /etc/hosts
file registrieren muss. Also feuern wir eine Anfrage mit Host
header ab, was ein virtueller Hostname in Nginx upstream
block ist.
Die nginx-proxy
haben diesen Teil für Sie erledigt, wenn Sie in jeder App-Container-Einstellung die Umgebungsvariable VIRTUAL_HOST
erstellen. Dies bedeutet jedoch nicht, dass wir node.app1.com
direkt in unserem Browser aufrufen können und erwarten, dass die Anfrage per Proxy weitergeleitet wird und mit node-app1
container antwortet.
Zurück zum Anfordern des Weiterleitungsteils, die Anfrage kommt zu localhost
an Port 80/443, was von Nginx gehört wird. Nginx überprüft dann den Host
Header, um in einen bestimmten Standortblock zu gelangen. Aus diesem Grund können Sie Ссылка nicht direkt in Ihrem Browser aufrufen, da dieser Hostname nie wirklich in etc/hosts
registriert ist, also wird es nie sein adressiert von jedem Server, App oder unserem nginx-proxy
.
Wenn wir den Hostnamen per Browser aufrufen möchten, wird die zusätzliche Einstellung für etc/hosts
benötigt.
Das nginx-proxy
-Projekt enthält einige Vorlageneinstellungen, so dass Sie möglicherweise die IP-Adresse von App-Containern und deren VIRTUAL_HOST
-Umgebung abrufen und sie an /etc/hosts
file anhängen können. Aber auf diese Weise wäre dies direkt der Besuch des Knoten-App-Servers anstelle des Proxys von nginx-proxy
.
Ohne Berücksichtigung der Produktionsebene würde ich vorschlagen, App-Domänen in der Datei etc/hosts
in der letzten Zeile anzuhängen, die durch nginx-proxy
festgelegt wird, dann sollte es wie erwartet funktionieren. Andernfalls ist die Arbeit für die dynamische Bindung des Hostnamens von nginx-proxy
templates notwendig.
Sieh dir die Ports deiner App / Dockerfile an:
./ app1 / app1.js
}). listen (8085);
und
./ app1 / Dockerfile
Expose 8086
sie stimmen nicht überein.
Der Teil, den ich vermisste, ist, dass jwilder/nginx-proxy
das Andockfenster reflektiert, um nach Containern zu suchen, die proxietiert werden müssen.
Originaler Beitrag:
Ich vermute, dass Ihr Problem darin besteht, dass der Reverse-Proxy-Container nicht jede App erreichen kann. Entfernen Sie dazu die depends_on
von node-app1 und node-app2 und fügen Sie node-proxy hinzu:
Der Reverse Proxy erfordert, dass beide Apps gestartet werden und nicht umgekehrt. Verwenden Sie auch links
anstelle von depends_on
.
Aus den Dokumenten :
hängt_von
abExpress-Abhängigkeit zwischen Diensten, die zwei Auswirkungen hat:
docker-compose up startet Dienste in Abhängigkeitsreihenfolge. Im folgenden Beispiel werden db und redis vor dem Web gestartet.
docker-compose up SERVICE fügt automatisch SERVICE-Abhängigkeiten hinzu. Im folgenden Beispiel wird docker-compose-up web Außerdem erstellen und starten Sie db und redis.
Links
Container für den verknüpften Dienst sind unter einem Hostnamen erreichbar, der dem Alias oder dem Dienstnamen entspricht, wenn kein Alias angegeben wurde.
Links drückt auch die Abhängigkeit zwischen Diensten auf die gleiche Weise wie depends_on aus, so dass sie die Reihenfolge des Dienststarts festlegen.
Ich bin mir auch nicht sicher, wie Sie zu den IP-Adressen dieser Container in Ihrer Proxy-Konfiguration gelangen. Sie können stattdessen (wie in der Dokumentation angegeben) den Alias- oder Dienstnamen verwenden. (in Ihrem Fall node-app1 und node-app2)
Tags und Links proxy node.js docker docker-compose