Docker 용기 의 Nginx 프로필 이 시스템 / 용기 의 환경 변 수 를 어떻게 읽 는 지 에 대해 논 합 니 다.
$ ifconfig eth0|grep inet|awk '{print $2}'
를 통 해 본 기내 망 IP 할당 을 HOST 에 가 져 옵 니 다.IP, 그러면 용기 에 있 는 ngix. conf 는 어떻게 해야만 이 환경 변 수 를 읽 을 수 있 습 니까?그래서 제 가 몇 가지 방법 을 봤 는데 그 중 에 참고 할 수 있 는 방법 이 있어 요 -https://segmentfault.com/q/1010000006124117 Nginx 의 공식 미 러 를 보면 다음 말 을 찾 을 수 있 습 니 다.
Using environment variables in nginx configuration Out-of-the-box, nginx doesn’t support environment variables inside most configuration blocks. But envsubst may be used as a workaround if you need to generate your nginx configuration dynamically before nginx starts.
Here is an example using docker-compose.yml:
web: image: nginx volumes: - ./mysite.template:/etc/nginx/conf.d/mysite.template ports: - “8080:80” environment: - NGINX_HOST=foobar.com - NGINX_PORT=80 command: /bin/bash -c “envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && nginx -g ‘daemon off;’”
The mysite.template file may then contain variable references like this:
listen ${NGINX_PORT};
Nginx 는 docker copose 로 시작 하 는 방법 을 공식 적 으로 제공 합 니 다. 시작 할 때 두 개의 환경 변 수 를 용기 에 전송 하고 my site. template 파일 을 마 운 트 했 습 니 다. 이 파일 은 default. conf 파일 을 복사 하 는 것 입 니 다. 이 파일 에서 교 체 된 값 을 변수 로 표시 해 야 합 니 다. 예 를 들 어 정통 nginx. conf
proxy_pass http:// ip:
.그러면 my site. template 에 서 는 proxy_pass http://${NGINX_HOST}:${NGINX_PORT}
이 라 고 표시 합 니 다. envsubst 명령 과 출력 입력 을 통 해 방향 을 바 꿉 니 다. nginx 용기 가 시작 되면 해당 default. comf 의 두 값 은 용기 에 있 는 환경 변수 로 대 체 됩 니 다. 실제로 이것 은 부족 합 니 다. 명령 envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf
을 실행 할 때 my site. template 파일 의 모든 테이프 $
를 가 져 옵 니 다.문자 의 문 자 는 변수 로 읽 은 다음 에 해당 하 는 환경 변 수 를 찾 아 교체 한 다음 에 마지막 결 과 를 default. conf 에 출력 합 니 다. 그러나 nginx 자체 에 많은 사용자 정의 변수 가 있 습 니 다. 예 를 들 어 $host
등 은 모두 $remote_addr
명령 에 의 해 교체 되 고 환경 변수 에는 이러한 값 이 없 으 며 실제 적 으로 이러한 값 이 빈 값 으로 대 체 됩 니 다.최종 nginx. conf 가 합 법 적 이지 않 아 시작 할 수 없 기 때문에 우리 가 필요 로 하 는 두 개의 변 수 를 지정 해 야 합 니 다. 위의 마지막 줄 의 명령 을 envsubst
로 수정 하면 됩 니 다. 미 러 를 만 들 때 이 를 추가 하려 면 nginx 의 Dockfile 을 수정 하 십시오. 예 를 들 어 다음 과 같은 내용 을 추가 하 십시오.COPY mysite.template /etc/nginx
CMD envsubst ‘$HOST_IP’ < /etc/nginx/mysite.template > /etc/nginx/nginx.conf && nginx -g ‘daemon off;’
미 러 를 만 든 후 해당 docker run 명령 은
envsubst '$NGINX_HOST $NGINX_PORT' < /etc/nginx/mysite.template > /etc/nginx/default.conf
입 니 다. 이 를 통 해 모든 파일 이 환경 변 수 를 읽 어야 한 다 는 것 을 알 수 있 습 니 다.내 가 상기 방법 을 사용 해 야 할 때 사실은 또 하나의 이유 가 있다. 우리 의 응용 용기 이름 은 버 전 번호 가 있 는 것 이다. 즉, 용기 이름 이 고정 되 어 있 지 않다 는 것 이다. 만약 에 응용 용기 이름 이 고정 되 어 있다 면 nginx. conf 에서 리 트 윗 응용 프로그램 은 지정 한 용기 이름 을 통 해 시작 할 때 nginx link 에 해당 하 는 용 기 를 사용 하면 된다. 이렇게 우여곡절 하지 않 아 도 된다.
참고 내용:https://serverfault.com/questions/577370/how-can-i-use-environment-variables-in-nginx-conf https://github.com/docker-library/docs/tree/master/nginx#using-environment-variables-in-nginx-configuration
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker 용기 의 Nginx 프로필 이 시스템 / 용기 의 환경 변 수 를 어떻게 읽 는 지 에 대해 논 합 니 다.Nginx 는 이 컴퓨터 의 응용 프로그램 으로 전송 해 야 합 니 다.모든 서버 의 Nginx 설정 파일 에 이 컴퓨터 의 내부 네트워크 IP, 즉 미 러 가 통 하지 않 을 것 같 습 니 다. 여기 서 제 가 생...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.