2015-07-10 32 views
7

Tôi đã sau docker-compose.yml:nginx Reverse Proxy thất bại với Liên Kết Docker Container

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" 

Sau khi thực hiện điều này và chạy docker ps tôi nhận được như sau:

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 

Tất cả mọi thứ có vẻ là tốt cho đến nay.

Các nginx.conf Tôi đang sử dụng trông giống như sau:

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

Tất cả điều này thực sự nên làm như sau:

Nếu tôi nhập http://{host-ip}/ thì node1 container được chuyển tiếp yêu cầu.

Nếu tôi nhập http://{host-ip}/a/ thì vùng chứa node2 sẽ được chuyển tiếp yêu cầu.

Nếu tôi nhập http://{host-ip}/b/ thì vùng chứa service1 sẽ được chuyển tiếp yêu cầu.

Hiện tại, tôi đang nhận được 502 Bad Gateway nếu tôi thử bất cứ điều gì.

Trả lời

6

Tôi đã có thể tìm ra giải pháp và hóa ra lại là thứ ngu ngốc không hiển thị trong bất kỳ nhật ký nào và rất khó cho tôi gặp phải.

Dưới đây là tệp được cập nhật 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; 
      } 
     } 
} 

Không chắc chắn nếu có là cần thiết vào thời điểm này, nhưng trailing / ở phần cuối của chỉ thị proxy_pass dường như làm các trick vào cuối ngày.

+0

Ngoài sự tò mò, khối {} phía trên có làm gì để giải quyết vấn đề của bạn không? Hoặc là nó chỉ có một dấu/cố định nó? – csgeek

+0

không có niềm vui cho tôi. có gì trong tệp proxy_params của bạn? – Adam

-2

Tôi nghĩ bạn nên chỉ định các cổng trong mỗi 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

Điều này không hoạt động, – TheJediCowboy

+0

@ TheJediCowboy bất kỳ nhật ký lỗi nào? có thể bạn có thể cố gắng để lộ cổng dịch vụ của bạn đến máy chủ của bạn và kiểm tra xem ứng dụng web có hoạt động hay không. – Freeznet

+0

không có lỗi. Tôi có thể nhấn các thiết bị đầu cuối nội bộ, vì vậy tôi biết ứng dụng hoạt động. – TheJediCowboy

Các vấn đề liên quan