[ StackOverflow için çok fazla sysadmin benzeri olduğu düşünüldüğü için, çapraz yayınlanmış ve https://stackoverflow.com/questions/21933955 adresinden yazılmıştır.]
Başka bir liman işçisi konteynerine bağlanan Nginx çalışan bir liman işçisi var. İkinci kabın ana bilgisayar adı ve IP adresi, Nginx kabına başlangıçta ortam değişkenleri olarak yüklenir, ancak ondan önce bilinmez (dinamiktir). nginx.conf
Bu değerleri kullanmamı istiyorum - örneğin
upstream gunicorn {
server $APP_HOST_NAME:$APP_HOST_PORT;
}
Ortam değişkenlerini başlangıçta Nginx yapılandırmasına nasıl alabilirim?
1 EDIT
Aşağıda önerilen cevaptan sonra tüm dosya budur:
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;
}
}
Nginx yeniden yükleniyor sonra hataları:
$ nginx -s reload
nginx: [emerg] unknown directive "env" in /etc/nginx/sites-enabled/default:1
EDIT 2: daha fazla detay
Mevcut ortam değişkenleri
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
Kök 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;
Site nginx yapılandırması:
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;
Nginx yapılandırmasını yeniden yükle:
root@87ede56e0b11:/# nginx -s reload
nginx: [emerg] directive "server" is not terminated by ";" in /etc/nginx/sites-enabled/default:3
app_web_1
yeni bir IP adresi alırsa , nginx kabınızı da yeniden başlatmanız gerekir. Docker, güncellenmiş bir sürümle yeniden başlatır, /etc/hosts
böylece nginx config dosyalarını değiştirmenize gerek kalmaz.
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
ileserver app_web_1:5000;