Nous avons plusieurs applications de rails sous un domaine commun dans Docker et nous utilisons nginx pour diriger les demandes vers des applications spécifiques.
our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
La configuration ressemble à ceci:
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...
}
Si l'une de ces applications n'est pas démarrée, nginx échoue et s'arrête:
host not found in upstream "bar:3000" in /etc/nginx/conf.d/nginx.conf:6
Nous n'avons pas besoin de tous pour être en place, mais nginx échoue autrement. Comment faire en sorte que Nginx ignore les échecs en amont?
resolver
( nginx.org/en/docs/http/ngx_http_core_module.html#resolver ) fonctionnerait-elle dans votre cas?
proxy.sh
script qui lit les variables d'environnement et ajoute dynamiquement des upstream
entrées pour chacune, puis démarre Nginx. Cela fonctionne très bien en ce que lorsque nous exécutons notre conteneur proxy, nous pouvons transmettre les flux amont nécessaires au moment de l'exécution. Vous pouvez faire quelque chose de similaire pour activer / désactiver certains amonts au lancement (ou comme ma configuration, ajoutez simplement ceux nécessaires à l'exécution)
upstream
bloc ne résout pas, au moment de l'exécution, Nginx se fermera avec l'erreur ci-dessus ...