2014-10-10 6 views
6

Hier ist das Problem:Nginx Proxy-Pass Konfiguration Docker

Der Host-Rechner hat mehrere Docker-Anwendungen auf verschiedenen Ports für z. App1 @ 3001, App2 @ 3002 ... 3100 etc

Jetzt würde ich die Apps in diesem Format http://hostname.com/app1 zugreifen möchte, http://hostname.com/app2 ..

Um dies zu tun, ich nginx auf dem Host-Proxy-Anfragen renne auf der rechten Seite-Anschluss auf der Unter uri basierend

location = /app1 { 
    proxy_redirect http://hostname:3001/; 
    include /etc/nginx/proxy_params; 
} 

location ^~ /app1 { 
    proxy_redirect http://hostname:3001/app1; 
    include /etc/nginx/proxy_params; 
} 

Aber das funktioniert nicht, wenn die Änderungen des Website Unter uri oder ob die Website umleitet. Zum Beispiel:

If I visit the site at hostname:3001 -> I can see the site 
If I visit the site at http://hostname.com/app1 -> I can see the site 
If the site page is at hostname:3001/static/index.html then when i access it as http://hostname.com/app1 the page changes to http://hostname.com/static/index.html -> I get 404. 

Gibt es eine Möglichkeit, dies zu tun? Oder ist der einzige Weg dies zu tun, die DNS als app1.hostname.com zu setzen und ein namenbasiertes Routing durchzuführen?

+0

Ihr Problem nicht auf Docker oder Nginx verwandt ist. Es ist ein generisches Problem der Reverseproxying mit geändertem Anwendungspfad: Ihre Anwendung erwartet, dass sie bei '/' dient, während Reverseproxy sie bei '/ app1' bedient. Ich bin sicher, dass Sie die Problembeschreibung und Problemumgehungen leicht finden können. –

+0

Yup ich hatte diese lange Zeit zurück gefragt. Ich habe dies behoben, indem ich einen DNS-Eintrag für den Host erstellt habe, auf dem der Container läuft, und den Container-Port dem Host-Port zuordnen und dann eine einfache Konfiguration zu nginx map app1.abc.com hinzufügen: host: port in proxy pass. Es hat gut funktioniert und ist leicht zu skalieren. – NitishMD

Antwort

1

Sie können jede App machen lauscht auf einem separaten Port (zB 3000 und 3001) dann nginx wie folgt konfigurieren (schließen es im Inneren des server {} Definitionsblock):

location /app1 { 
    proxy_pass  http://localhost:3000; 
    proxy_set_header X-Real-IP $remote_addr; 
} 

location /app2 { 
    proxy_pass  http://localhost:3001; 
    proxy_set_header X-Real-IP $remote_addr; 
} 
2

In Ihrem server {} Block Sie wollen:

location /app1 { 
    rewrite ^/app1(.*) /$1 break; 
    proxy_pass http://hostname:3001/; 
    proxy_redirect off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

location /app2 { 
    rewrite ^/app2(.*) /$1 break; 
    proxy_pass http://hostname:3002/; 
    proxy_redirect off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

Die Rewrite-Regel wird hier die richtigen uris zu den Häfen passieren