Chúng tôi có một số ứng dụng đường ray trong miền chung trong Docker và chúng tôi sử dụng nginx để chuyển yêu cầu đến các ứng dụng cụ thể.
our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
Cấu hình trông như thế này:
upstream foo {
server foo:3000;
}
upstream bar {
server bar:3000;
}
# and about 10 more...
server {
listen *:80 default_server;
server_name our_dev_server.com;
location /foo {
# this is specific to asset management in rails dev
rewrite ^/foo/assets(/.*)$ /assets/$1 break;
rewrite ^/foo(/.*)$ /foo/$1 break;
proxy_pass http://foo;
}
location /bar {
rewrite ^/bar/assets(/.*)$ /assets/$1 break;
rewrite ^/bar(/.*)$ /bar/$1 break;
proxy_pass http://bar;
}
# and about 10 more...
}
Nếu một trong những ứng dụng này không được khởi động thì nginx không thành công và dừng lại:
host not found in upstream "bar:3000" in /etc/nginx/conf.d/nginx.conf:6
Chúng tôi không cần tất cả chúng đều lên nhưng ngược lại thì nginx thất bại. Làm thế nào để làm cho nginx bỏ qua các lần ngược dòng không thành công?
resolver
( nginx.org/en/docs/http/ngx_http_core_module.html#resolver ) có hiệu quả trong trường hợp của bạn không?
proxy.sh
tập lệnh đọc các biến môi trường và thêm động upstream
các mục nhập cho từng biến, sau đó khởi động Nginx. Điều này hoạt động tuyệt vời ở chỗ khi chúng tôi chạy vùng chứa proxy của mình, chúng tôi có thể chuyển các phần ngược dòng cần thiết trong thời gian chạy. Bạn có thể làm điều gì đó tương tự để bật / tắt upstreams nhất định lúc khởi động (hoặc như thiết lập của tôi chỉ cần thêm những cái cần thiết trong thời gian chạy)
upstream
khối không giải quyết được, trong thời gian chạy, thì Nginx sẽ thoát với lỗi trên ...