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가 실패한 업스트림을 무시하도록 만드는 방법은 무엇입니까?
resolver
( nginx.org/en/docs/http/ngx_http_core_module.html#resolver 귀하의 경우) 작업을?
proxy.sh
환경 변수를 읽고 upstream
각각에 대한 항목을 동적으로 추가 하는 스크립트 를 포함하는 Nginx 이미지를 만든 다음 Nginx를 시작합니다. 이것은 프록시 컨테이너를 실행할 때 런타임에 필요한 업스트림을 전달할 수 있다는 점에서 훌륭하게 작동합니다. 실행시 특정 업스트림을 활성화 / 비활성화하는 것과 유사한 작업을 수행 할 수 있습니다 (또는 내 설정과 마찬가지로 런타임에 필요한 항목 만 추가)
upstream
블록 내의 호스트 가 해결되지 않으면 런타임에 Nginx가 위의 오류와 함께 종료됩니다.