2016-10-24 5 views
0

Mein Gedanke ist dies. Ich brauche vielleicht nicht einmal einen Docker, um das Problem zu lösen. Vielleicht kann ich einfach nginx als Reverse-Proxy laufen lassen, der auf Port 80 läuft, der Standard für Web-Anwendungen, und sie irgendwie zu verschiedenen Anwendungen leiten, die verschiedene Programmier-Stacks verwenden. Mit anderen Worten, ein Java EE Server, ein Node.js Server, eine Django App und einige PHP Apps. In diesem Szenario würde nginx die Anforderungen an die entsprechenden Anwendungen liefern. Ist das möglich?Ist es mit Docker möglich, mehr als eine App auf Port 80 auf demselben Computer auszuführen?

Das zweite Szenario besteht darin, dass an Docker-Images unterschiedliche IP-Adressen angehängt werden, so dass für jede IP-Adresse eine andere Anwendung auf Port 80 ausgeführt werden kann - der Standardport.

Wenn das nicht funktioniert, würde ich wahrscheinlich einen anderen VPS-Server für jede Umgebung benötigen, die ich an Port 80 bedienen möchte. Ich habe sowohl einen Linux-Entwicklungsserver, der Websites mit wenig Verkehr bedienen kann, aber auch VPS-Hosting monatlich. Ich möchte vermeiden, dass für jeden Stack separate vps-Server-Accounts gekauft werden müssen, z. Java EE, Node.js, Python/Django mit Gunicorn und PHP-Apps.

Vielen Dank im Voraus für jede Hilfe/Beratung, Bruce

+1

Apache/Nginx kann auf dem gleichen Port verschiedene Anwendungen bedienen, wenn sie unterschiedliche Adressen haben - dh. 'app1.example.com',' app2.example.com' - es heißt 'virtueller Host'. – furas

+0

Dies ist eine anständige Anleitung, wie Sie verschiedene Pfade über nginx zu verschiedenen Anwendungen leiten können: https://gist.github.com/soheilhy/8b94347ff8336d971ad0 –

+0

Diese Information ist hilfreich. Vielen Dank.Entschuldigung für meine Verspätung - es traten unerwartete Probleme auf. –

Antwort

1

können Sie Ihre beiden Ansätze verwenden vorgeschlagen:

Mit NGINX als Reverse-Proxy-

In diesem Fall den Ansatz wäre Um nur verschiedene server_name-Einträge pro Docker-Instanzen zu konfigurieren, und von dort aus den Reverse-Proxy zur Docker-Instanz, zum Beispiel:

server { 
    listen 80; 

    server_name your-server-name.com; 

    location/{ 
     proxy_pass http://127.0.0.1:8082; 
     include /etc/nginx/proxy_params; 
    } 
} 

Im vorherigen Beispiel wäre 8082 der Port Ihrer Docker-Instanz.

Mapping auf andere IP-

Adressen Wenn Sie wollen, ist es möglich, die Docker-Port an eine bestimmte IP mit dem Parameter -p zu übermitteln. Genau, wenn die Docker Instanz diese Einführung verwenden:

-p IP:host_port:container_port or -p IP::port 

für die externe Schnittstelle für eine Einstellung besonderer Bindung

1

Es hängt ein wenig auf dem Weg Sie Ihren Web-Service werden zu adressieren. Wenn Sie die Möglichkeit haben, separate Subdomains oder sogar URL-Präfixe für sie einzurichten, ist NGINX - wie Sie bereits erraten haben - von Ihnen abgedeckt. Die Konfigurationsoption, nach der Sie suchen, ist proxy_pass - möglicherweise in Verbindung mit dem Einrichten verschiedener Subdomains für die Dienste über die Anweisung server_name.

Also sagen Sie, dass NGINX auf localhost installiert ist, eine Django-App, die auf der gleichen Box auf Port 9000 läuft und ein Java EE-Server auf 192.168.0.1 auf Port 6000, Sie könnten etw tun. wie folgt: https://gist.github.com/dreizehnelf/f92b23dea5245a3c322cdcea4e1cf362

(Sorry, konnte die Konfiguration nicht direkt posten, da alle darin enthaltenen http: // stuff von stackoverflow als Links betrachtet wurden - und ich habe nicht genug Reputationspunkte, um mehr als zwei zu posten.)

+0

Nicht sicher, ob ich eine neue Frage öffnen sollte, aber um zu klären, mein Ziel ist, Web-Server zu haben, die auf dem Standard-Port arbeiten, so dass Benutzer einen Port # nicht eingeben müssen. Einfach zu machen mit LAMP-Stack, wo A ist Apache ... und kein anderer Webserver existiert. Allerdings mit einer Box, die Java EE-Container, Node.js, NGINX mit Gunicorn und apache/php/mysql oder mariadb ausführen möchten. Vielen Dank –

Verwandte Themen