nginx-proxy für mehrere Andockfenster für Knoten

9

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 zugreifen
  

node.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.

docker-compose.yml

%Vor%

./ node-proxy / Dockerfile

%Vor%

./app1/app1.js

%Vor%

./ app1 / Dockerfile

%Vor%

./ app2 / app2.js

%Vor%

./ app2 / Dockerfile

%Vor%

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üft

  

docker 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

    
Abhi Adr 16.08.2017, 11:24
quelle

2 Antworten

0

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.

%Vor%

Aktualisiert:

Ich habe festgestellt, dass Nginx config upstream Direktive für mehrere Hostnamen hat. Sie sollten die node-app1 wie:

kräuseln können %Vor%

Sie können auch die letzte Zeile in etc/hosts file in Ihrem node-proxy -Container ändern als:

%Vor%

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.

    
James Yang 27.08.2017, 06:07
quelle
3

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:

%Vor%

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

ab
  

Express-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)

    
Mathias 20.08.2017 14:45
quelle