[Diposting-silang dan diedit dari https://stackoverflow.com/questions/21933955 karena dianggap terlalu sysadmin untuk StackOverflow.]
Saya memiliki wadah buruh pelabuhan yang menjalankan Nginx, yang menghubungkan ke wadah buruh pelabuhan lainnya. Nama host dan alamat IP wadah kedua dimuat ke wadah Nginx sebagai variabel lingkungan saat startup, tetapi tidak tahu sebelumnya (dinamis). Saya ingin saya nginx.conf
menggunakan nilai-nilai ini - misalnya
upstream gunicorn {
server $APP_HOST_NAME:$APP_HOST_PORT;
}
Bagaimana saya bisa memasukkan variabel lingkungan ke dalam konfigurasi Nginx saat startup?
EDIT 1
Ini adalah seluruh file, setelah jawaban yang disarankan di bawah ini:
env APP_WEB_1_PORT_5000_TCP_ADDR;
# Nginx host configuration for django_app
# Django app is served by Gunicorn, running under port 5000 (via Foreman)
upstream gunicorn {
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
}
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /static/ {
alias /app/static/;
}
location /media/ {
alias /app/media/;
}
location / {
proxy_pass http://gunicorn;
}
}
Muat ulang nginx lalu galat:
$ nginx -s reload
nginx: [emerg] unknown directive "env" in /etc/nginx/sites-enabled/default:1
EDIT 2: lebih detail
Variabel lingkungan saat ini
root@87ede56e0b11:/# env | grep APP_WEB_1
APP_WEB_1_NAME=/furious_turing/app_web_1
APP_WEB_1_PORT=tcp://172.17.0.63:5000
APP_WEB_1_PORT_5000_TCP=tcp://172.17.0.63:5000
APP_WEB_1_PORT_5000_TCP_PROTO=tcp
APP_WEB_1_PORT_5000_TCP_PORT=5000
APP_WEB_1_PORT_5000_TCP_ADDR=172.17.0.63
Rooting nginx.conf:
root@87ede56e0b11:/# head /etc/nginx/nginx.conf
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
env APP_WEB_1_PORT_5000_TCP_ADDR;
Konfigurasi nginx situs:
root@87ede56e0b11:/# head /etc/nginx/sites-available/default
# Django app is served by Gunicorn, running under port 5000 (via Foreman)
upstream gunicorn {
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
}
server {
listen 80;
Muat ulang konfigurasi nginx:
root@87ede56e0b11:/# nginx -s reload
nginx: [emerg] directive "server" is not terminated by ";" in /etc/nginx/sites-enabled/default:3
app_web_1
me- restart itu akan mendapatkan alamat IP baru, jadi Anda perlu me-restart wadah nginx Anda juga. Docker akan memulai ulang dengan yang diperbarui /etc/hosts
sehingga Anda tidak perlu mengubah file konfigurasi nginx.
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
denganserver app_web_1:5000;