2014-10-10 10 views
6

Oto problem:Okno dokowane konfiguracji proxy proxy Nginx

Komputer hosta ma wiele aplikacji dokujĘ ... cych uruchamianych na różnych portach, np. App1 @ 3001, Apl2 @ 3002 ... 3100 itd

Teraz chciałbym uzyskać dostęp do aplikacji w tym formacie http://hostname.com/app1, http://hostname.com/app2 ..

Aby to biegnę nginx na hosta do żądania proxy zrobić do prawego portu opartych na sub-uri

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; 
} 

Ale to nie działa, gdy zmiany sub uri na witryny lub jeśli strona przekierowuje. Na przykład:

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. 

Czy istnieje sposób, aby to zrobić? Czy jest to jedyny sposób, aby ustawić dns jako app1.hostname.com i wykonać routing oparty na nazwie?

+0

Twój problem nie jest związany z Docker lub Nginx. Jest to bardziej ogólny problem odwrotnego proxy ze zmienioną ścieżką aplikacji: Twoja aplikacja oczekuje, że będzie serwować w '/' podczas gdy odwrotny serwer proxy obsługuje go w '/ app1'. Jestem pewien, że łatwo znajdziesz opis problemu i sposoby jego obejścia. –

+0

Tak, tak długo pytałem. Naprawiłem to, tworząc rekordy dns dla hosta, na którym działa kontener, i zamapowałem port kontenera na port hosta, a następnie dodałem prostą konfigurację do nginx map app1.abc.com do hosta: port w proxy pass. To działa dobrze i jest łatwe do skalowania. – NitishMD

Odpowiedz

1

Można dołożyć wszelkich app nasłuchuje na osobnym porcie (np 3000 i 3001), a następnie skonfigurować nginx następująco (umieścić go wewnątrz bloku server {} definition):

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

Wewnątrz bloku server {} chcesz:

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; 
} 

przepisać reguła tutaj przejdzie odpowiednie URI do portów

Powiązane problemy