Docker'da ortak alan adı altında birkaç rails uygulamamız var ve istekleri belirli uygulamalara yönlendirmek için nginx kullanıyoruz.
our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
Config şuna benzer:
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...
}
Bu uygulamalardan biri başlatılmazsa, nginx başarısız olur ve durur:
host not found in upstream "bar:3000" in /etc/nginx/conf.d/nginx.conf:6
Hepsinin yükselmesine ihtiyacımız yok ama nginx aksi halde başarısız olur. Nginx'in başarısız olan yukarı akışları görmezden gelmesini nasıl sağlayabilirim?
resolver
( nginx.org/en/docs/http/ngx_http_core_module.html#resolver senin durumunda) çalışır?
proxy.sh
Ortam değişkenlerini okuyan ve upstream
her biri için dinamik olarak girişler ekleyen ve ardından Nginx'i başlatan bir komut dosyası içeren bir Nginx görüntüsü oluşturduk . Bu, proxy kapsayıcımızı çalıştırdığımızda, çalışma zamanında gerekli üst akışları geçirebileceğimiz için harika çalışıyor. Başlatma sırasında belirli yukarı akışları etkinleştirmek / devre dışı bırakmak için benzer bir şey yapabilirsiniz (veya kurulumum gibi, çalışma zamanında gerekli olanları ekleyin)
upstream
Blok içindeki ana bilgisayar çalışma zamanında çözülmezse, Nginx yukarıdaki hatayla çıkacaktır ...