У Docker у нас є кілька додатків рейлів під загальним доменом, і ми використовуємо nginx для направлення запитів на певні додатки.
our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
Конфігурація виглядає так:
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...
}
Якщо одне з цих додатків не запускається, тоді nginx виходить з ладу і зупиняється:
host not found in upstream "bar:3000" in /etc/nginx/conf.d/nginx.conf:6
Нам не потрібно, щоб вони були налаштовані, але nginx виходить з ладу. Як зробити так, щоб nginx ігнорував невдалі upstreams?
resolver
( nginx.org/en/docs/http/ngx_http_core_module.html#resolver ) у вашому випадку?
proxy.sh
сценарій, який читає змінні середовища та динамічно додає upstream
записи для кожної, а потім запускає Nginx. Це чудово спрацьовує з тим, що коли ми запускаємо наш проксі-контейнер, ми можемо переходити в потрібні upstreams під час виконання. Ви можете зробити щось подібне, щоб увімкнути / вимкнути певні потоки під час запуску (або, наприклад, до моєї установки просто додати ті, які потрібні під час виконання)
upstream
блоку не вирішиться під час виконання, тоді Nginx вийде із вказаною вище помилкою ...