2014-11-08 13 views
9

Obecnie próbuję wybudować własnego serwera WWW/usługi i chciał założyć takie rzeczy:Nginx jako reverse proxy dla Docker vhostów

  • Wordpress za główny „blog”
  • Gitlab dla mojego repozytoria git
  • ownCloud dla mojego przechowywania danych

Używam Döcker uzyskania ładny mały gitlab bieg, który działa perfekcyjnie, mapowanie do portu: 81 na mój serwer WWW z mojej domeny.

Co mnie irytuje nieco jest, że obrazy dokowane są zawsze związane z konkretnym PortNumber i nie są więc bardzo proste do zapamiętania, więc ja bym chciał zrobić coś takiego:

git.mydomain.com for gitlab 
mydomain.com (no subdomain) for my blog 
owncloud.mydomain.com for owncloud 

Jak daleko jak rozumiem, potrzebuję odwrotnego proxy dla tego, do którego zdecydowałem się użyć nginx. Więc wszystko skonfigurować tak:

http { 
include  mime.types; 
default_type application/octet-stream; 

sendfile  on; 

keepalive_timeout 65; 

server { 
    listen  80; 
    server_name mydomain.com; 
    location/{ 
      proxy_pass http://localhost:84; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
server { 
    listen 80; 
    server_name git.mydomain.com; 

    location/{ 
     proxy_pass http://localhost:81; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

ten sposób mam git.mydomain.com i działa bez zarzutu, ale mój wordpress tylko pokazuje mi pustą stronę. Mój DNS jest skonfigurowany tak:

Host Type MX Destination 
*  A  IP 
@  A  IP 
www CNAME @ 

Czy jestem po prostu zbyt głupi lub co tu się dzieje?

+0

Czy korzystasz z każdej usługi we własnym pojemniku? Które z kontenerów może uruchamiać nginx? Pamiętaj, że host lokalny wewnątrz kontenera nie jest sam jako host lokalny poza kontenerem. Połącz kontenery i użyj env, aby znaleźć adresy IP lub użyj publicznego adresu IP hosta. –

+0

To jest, gdy jwilder/nginx-proxy ratuje twoje zdrowie psychiczne i daje ci wszystko, czego potrzebujesz. Kontener proxy nasłuchuje demona Docker i rekonfiguruje się za każdym razem, gdy inny kontener aplikacji internetowej jest uruchamiany na tym samym hoście. – Devvyn

+0

możliwy duplikat [Przypisywanie vhostów do portów Docker] (http://stackoverflow.com/questions/18497564/assigning-vhosts-to-docker-ports) – Devvyn

Odpowiedz

1

Twoja konfiguracja nginx wygląda zdrowo, ale uderzasz w localhost:xx, co jest złe. Powinien być albo gatewayip:xx lub lepszy target_private_ip:80.

Łatwym sposobem radzenia sobie z tym jest uruchomienie kontenerów za pomocą --link i "wstrzyknięcie" adresu IP za pomocą skryptu powłoki: mieć "oryginalną" konfigurację nginx z symbolem zastępczym zamiast adresu IP, a następnie sed -i z wartością ze środowiska.

6

Wiem, że twoje pytanie dotyczy konkretnie konfiguracji serwera proxy Nginx, ale pomyślałem, że warto podać this link, który opisuje sposób konfiguracji kontenera dokowanego Nginx, który automagicznie wdraża konfiguracje do odwrotnego proxy tych kontenerów doków. Innymi słowy, uruchamiasz odwrotny serwer proxy, a następnie inne kontenery, a kontener Nginx będzie kierował ruch do innych na podstawie nazwy hosta.

Zasadniczo przeciągasz kontener proxy i uruchamiasz go za pomocą kilku parametrów ustawionych w komendzie docker run, a następnie wywołujesz inne kontenery, które chcesz przesłać. Gdy masz zainstalowany docker i wyciągnął zdjęcie nginx-proxy, konkretne polecenia użyć do uruchomienia serwera proxy:

docker run -d --name="nginx-proxy" --restart="always" -p 80:80 \ -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy

A teraz proxy jest uruchomiony. Możesz zweryfikować, wskazując przeglądarkę pod swoim adresem, która powinna zwrócić błąd Nginx 502 lub 503. Dostaniesz błędy, ponieważ nic jeszcze nie słucha. Aby uruchomić innych pojemników, to jest bardzo proste, jak to:

docker run -d --name="example.com" --restart="always" \ -e "VIRTUAL_HOST=example.com" w3b1x/mywebcontainer

To -e "VIRTUAL_HOST=example.com" jest potrzebny, aby uzyskać Nginx ruchu routingu proxy do pojemnika masz wyjścia.

Używam tej konkretnej metody, odkąd zacząłem z Dockerem i jest to bardzo przydatne w takich sytuacjach. Łączony artykuł zawiera instrukcje krok po kroku i wszystkie potrzebne informacje. Jeśli potrzebujesz więcej informacji (szczególnie o implementowaniu SSL w tej konfiguracji), możesz sprawdzić, czy dla tego oprogramowania jest the git repository.

+1

Mogę ręczyć za to. Używałem go w produkcji przez kilka miesięcy i dano mi dosłownie lepszą jakość życia ze względu na prostotę, jaką oferuje, w przeciwieństwie do ręcznej rekonfiguracji proxy dla każdego wdrożenia aplikacji. – Devvyn

Powiązane problemy