Kami memiliki beberapa aplikasi rel di bawah domain umum di Docker, dan kami menggunakan nginx untuk mengarahkan permintaan ke aplikasi tertentu.
our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
Config terlihat seperti ini:
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...
}
Jika salah satu dari aplikasi ini tidak dimulai maka nginx gagal dan berhenti:
host not found in upstream "bar:3000" in /etc/nginx/conf.d/nginx.conf:6
Kami tidak membutuhkan semuanya untuk aktif tetapi nginx gagal jika tidak. Bagaimana cara membuat nginx mengabaikan upstream yang gagal?
resolver
( nginx.org/en/docs/http/ngx_http_core_module.html#resolver ) akan berhasil dalam kasus Anda?
proxy.sh
skrip yang membaca variabel lingkungan dan secara dinamis menambahkan upstream
entri untuk masing-masing variabel , lalu memulai Nginx. Ini bekerja dengan baik karena ketika kita menjalankan penampung proxy kita, kita dapat meneruskan upstream yang dibutuhkan pada waktu proses. Anda dapat melakukan sesuatu yang serupa untuk mengaktifkan / menonaktifkan hulu tertentu saat peluncuran (atau seperti penyiapan saya, tambahkan saja yang diperlukan saat runtime)
upstream
blok tidak menyelesaikan, saat runtime, maka Nginx akan keluar dengan kesalahan di atas ...