Mamy kilka aplikacji railsowych pod wspólną domeną w Docker, a my używamy nginx do kierowania żądań do konkretnych aplikacji.Konfiguracja nginx, aby się nie zawieść, jeśli nie znaleziono hosta w poprzedniej wersji
our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
Config wygląda następująco:
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...
}
Jeśli jedna z tych aplikacji nie jest uruchamiany wtedy nginx nie powiedzie się i zatrzymuje:
host not found in upstream "bar:3000" in /etc/nginx/conf.d/nginx.conf:6
Nie musimy ich wszystkich zmajstrować ale nginx nie może inaczej. Jak zmusić nginx do ignorowania niepowodzeń?
Czy łączenie pojemników aplikacji z pojemników nginx lub uruchamiając je oddzielić od siebie? Jeśli host w bloku 'upstream' nie zostanie rozwiązany, w czasie wykonywania, Nginx zakończy działanie z powyższym błędem ... – Justin
Jeśli możesz użyć adresu IP, to uruchomi się dobrze. Czy w twoim przypadku działałoby 'resolver' (http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver)? – Justin
@Justin mamy każdej aplikacji w osobnym pojemniku, nginx też. Połącz je z dokowaniem –