2015-07-10 15 views
7

Ho il seguente docker-compose.yml:Nginx Reverse Proxy non riuscendo con Linked Docker Contenitori

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" 

Dopo aver eseguito questa e funzionante docker ps ottengo il seguente:

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 

Tutto sembra essere bene finora.

Il nginx.conf sto usando è simile al seguente:

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

Tutto questo in realtà dovrebbe essere fare è la seguente:

Se entro http://{host-ip}/ poi il contenitore node1 viene inoltrato la richiesta.

Se si immette http://{host-ip}/a/, il contenitore node2 inoltra la richiesta.

Se si immette http://{host-ip}/b/, il contenitore service1 inoltra la richiesta.

In questo momento, sto ricevendo 502 Bad Gateway se provo qualcosa.

risposta

6

sono stato in grado di capire la soluzione e si è rivelato essere qualcosa di stupido che non si sono presentati i file di registro ed è stato difficile per me incontrato.

Di seguito è il file aggiornato 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; 
      } 
     } 
} 

Non sono sicuro se l'inclusione è necessario a questo punto, ma il finale / alla fine della direttiva proxy_pass sembrano fare il trucco alla fine della giornata.

+0

Per curiosità, il blocco a monte {} ha fatto qualcosa per risolvere il problema? O era solo un trailing/che l'ha risolto? – csgeek

+0

nessuna gioia per me. cosa c'è nel tuo file proxy_params? – Adam

-2

Penso che dovresti specificare le porte all'interno di ogni 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

Questo non ha funzionato, – TheJediCowboy

+0

@ TheJediCowboy qualsiasi registro errori? forse puoi provare ad esporre la tua porta di servizio al tuo host e verificare se l'applicazione web funziona. – Freeznet

+0

senza errori. Posso colpire internamente gli endpoint, quindi so che l'app funziona. – TheJediCowboy