2014-10-10 23 views
6

Dưới đây là các vấn đề:Nginx Proxy configuration pass Docker

Các máy chủ có nhiều ứng dụng Docker chạy trên các cổng khác nhau cho ví dụ. App1 @ 3001, App2 @ 3002 ... 3100 vv

Bây giờ tôi muốn truy cập các ứng dụng trong định dạng này http://hostname.com/app1, http://hostname.com/app2 ..

Để làm điều này tôi đang chạy nginx trên host để yêu cầu proxy sang đúng cổng dựa trên tiểu 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; 
} 

Nhưng điều này không hoạt động khi trang web phụ thay đổi hoặc nếu trang web chuyển hướng. Ví dụ:

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. 

Có cách nào để thực hiện việc này không? Hoặc là cách duy nhất để làm điều đó là đặt dns là app1.hostname.com và thực hiện định tuyến dựa trên tên?

+0

vấn đề của bạn không liên quan đến Docker hoặc Nginx. Đó là một vấn đề chung của proxy ngược với đường dẫn ứng dụng đã thay đổi: ứng dụng của bạn mong đợi nó đang phục vụ tại '/' trong khi proxy ngược lại phục vụ nó tại '/ app1'. Tôi chắc chắn bạn có thể tìm thấy mô tả sự cố và cách giải quyết dễ dàng. –

+0

Yup Tôi đã hỏi từ lâu rồi. Tôi đã sửa lỗi này bằng cách tạo bản ghi dns cho máy chủ nơi chứa đang chạy và ánh xạ cổng container tới cổng chủ và sau đó thêm cấu hình đơn giản vào nginx map app1.abc.com để lưu trữ: cổng trong proxy pass. Nó đã hoạt động tốt và dễ dàng mở rộng. – NitishMD

Trả lời

1

Bạn có thể làm cho mọi ứng dụng lắng nghe trên một cổng riêng biệt (ví dụ như 3000 và 3001), sau đó cấu hình nginx của bạn như sau (bao gồm nó bên trong khối server {} định nghĩa):

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

Bên server {} khối của bạn, bạn muốn:

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

các quy tắc viết lại ở đây sẽ vượt qua URI đúng vào cổng

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