[ข้ามโพสต์และแก้ไขจากhttps://stackoverflow.com/questions/21933955เนื่องจากถูกพิจารณาว่าเป็นระบบที่เหมือนกันกับ StackOverflow]
ฉันมีตัวเทียบท่าที่ใช้ Nginx ซึ่งเชื่อมโยงไปยังคอนเทนเนอร์ตัวเทียบท่าอื่น ชื่อโฮสต์และที่อยู่ IP ของคอนเทนเนอร์ที่สองถูกโหลดลงในคอนเทนเนอร์ Nginx เป็นตัวแปรสภาพแวดล้อมเมื่อเริ่มต้น แต่ไม่ทราบมาก่อน (มันเป็นแบบไดนามิก) ฉันต้องการให้ฉันnginx.conf
ใช้ค่าเหล่านี้ - เช่น
upstream gunicorn {
server $APP_HOST_NAME:$APP_HOST_PORT;
}
ฉันจะรับตัวแปรสภาพแวดล้อมในการกำหนดค่า Nginx เมื่อเริ่มต้นได้อย่างไร
แก้ไข 1
นี่คือไฟล์ทั้งหมดหลังจากคำตอบที่แนะนำด้านล่าง:
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 ซ้ำแล้วเกิดข้อผิดพลาด:
$ nginx -s reload
nginx: [emerg] unknown directive "env" in /etc/nginx/sites-enabled/default:1
แก้ไข 2: รายละเอียดเพิ่มเติม
ตัวแปรสภาพแวดล้อมปัจจุบัน
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
รูท 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;
การกำหนดค่าไซต์ nginx:
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 ซ้ำ:
root@87ede56e0b11:/# nginx -s reload
nginx: [emerg] directive "server" is not terminated by ";" in /etc/nginx/sites-enabled/default:3
app_web_1
ก็จะได้รับที่อยู่ IP ใหม่ดังนั้นคุณต้องรีสตาร์ทคอนเทนเนอร์ nginx ของคุณด้วย นักเทียบท่าจะรีสตาร์ทพร้อมการอัปเดต/etc/hosts
ดังนั้นคุณไม่จำเป็นต้องแก้ไขไฟล์กำหนดค่า nginx
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
ด้วยserver app_web_1:5000;