2015-07-10 21 views
7

Mam następujący docker-compose.yml:nginx reverse proxy niepowodzeniem z Linked Docker Kontenery

node1: 
    build: ./node 
    links: 
     - redis 
    ports: 
     - "8080" 
node2: 
    build: ./node 
    links: 
     - redis 
    ports: 
     - "8080" 
service1: 
    build: ./service 
    links: 
     - redis 
    ports: 
     - "8383" 
redis: 
    image: redis 
    ports: 
     - "6379" 
nginx: 
    build: ./nginx 
    links: 
     - node1:node1 
     - node2:node2 
     - service1:service1 
    ports: 
     - "80:80" 

Po wykonaniu tego i działa docker ps otrzymuję następujący:

080d9d7dc2e0  dockerworkflow_nginx:latest  "nginx -g 'daemon of 5 minutes ago  Up 5 minutes  0.0.0.0:80->80/tcp, 443/tcp dockerworkflow_nginx_1 
8c25bfdb9d00  dockerworkflow_node1:latest  "nodemon /src/index. 6 minutes ago  Up 6 minutes  0.0.0.0:33023->8080/tcp  dockerworkflow_node1_1 
4ae817be2a63  dockerworkflow_service1:latest "nodemon /src/index. 6 minutes ago  Up 6 minutes  0.0.0.0:33022->8383/tcp  dockerworkflow_service1_1 
91ff238fe3f6  dockerworkflow_node2:latest  "nodemon /src/index. 6 minutes ago  Up 6 minutes  0.0.0.0:33021->8080/tcp  dockerworkflow_node2_1 
fe0c7e02c860  redis:latest      "/entrypoint.sh redi 6 minutes ago  Up 6 minutes  0.0.0.0:33020->6379/tcp  dockerworkflow_redis_1 

Wszystko wydaje się być dobre do tej pory.

nginx.conf używam wygląda następująco:

worker_processes 4; 
events { worker_connections 1024; } 

http {  
    server { 
      listen 80; 

      location/{ 
      proxy_pass http://node1; 
      } 

      location /a/ { 
      proxy_pass http://node2; 
      } 

      location /b/ { 
      proxy_pass http://service1; 
      } 
    } 
} 

Wszystko to powinno być naprawdę robi jest następujący:

Jeśli wejdę http://{host-ip}/ następnie pojemnik node1 jest przekazywany na żądanie.

Po wprowadzeniu http://{host-ip}/a/ kontener node2 przekazuje żądanie.

Po wprowadzeniu http://{host-ip}/b/ kontener service1 przekazuje żądanie.

W tej chwili dostaję 502 Bad Gateway, jeśli spróbuję czegokolwiek.

Odpowiedz

6

udało mi się wymyślić rozwiązanie i okazało się, że coś głupiego, że nie pojawił się w żadnej dzienników i było mi trudno natknąć.

Poniżej znajduje się zaktualizowany plik nginx.conf.

worker_processes 4; 
events { worker_connections 1024; } 

http {  

    upstream node_app { 
     server node1:8080; 
    } 

    upstream service_app { 
     server service1:8383; 
    } 

     server { 
       listen 80; 

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

      location /a/ { 
       proxy_pass http://node_app/; 
       include /etc/nginx/proxy_params; 
      } 

      location /b/ { 
       proxy_pass http://service_app/; 
       include /etc/nginx/proxy_params; 
      } 
     } 
} 

Nie jestem pewien, czy to jest konieczne w tym momencie, ale spływu / na koniec dyrektywy proxy_pass wydają rade na koniec dnia.

+0

Z ciekawości, czy blok podrzędny {} zrobił coś, aby rozwiązać twój problem? A może to było po prostu końcowe/to naprawiło? – csgeek

+0

bez radości dla mnie. co znajduje się w twoim pliku proxy_params? – Adam

-2

Myślę, że powinieneś określić porty w każdym proxy_pass.

worker_processes 4; 
events { worker_connections 1024; } 

http {  
    server { 
      listen 80; 

      location/{ 
      proxy_pass http://node1:8080; 
      } 

      location /a/ { 
      proxy_pass http://node2:8080; 
      } 

      location /b/ { 
      proxy_pass http://service1:8383; 
      } 
    } 
} 
+0

To nie zadziałało, – TheJediCowboy

+0

@TheJediCowboy jakikolwiek dziennik błędów? może możesz spróbować odsłonić swój port usługi hostowi i sprawdzić, czy aplikacja internetowa działa. – Freeznet

+0

brak błędów. Mogę wewnętrznie atakować punkty końcowe, więc wiem, że aplikacja działa. – TheJediCowboy

Powiązane problemy