Docker 용기 의 Nginx 프로필 이 시스템 / 용기 의 환경 변 수 를 어떻게 읽 는 지 에 대해 논 합 니 다.

필요 배경: 클 러 스 터 에서 모든 서버 는 자신의 Nginx 를 가지 고 있 습 니 다. 퍼 가기 요청 은 이 컴퓨터 의 응용 프로그램 에 있 습 니 다. 응용 과 Nginx 는 Docker 를 통 해 배 치 됩 니 다. 그 에 따 른 문 제 는 응용 이 상태 가 없 으 며 하나의 미 러 를 통 해 모든 기계 에서 실 행 될 수 있 습 니 다. Nginx 는 이 컴퓨터 의 응용 프로그램 으로 전송 해 야 합 니 다.모든 서버 의 Nginx 설정 파일 에 이 컴퓨터 의 내부 네트워크 IP, 즉 미 러 가 통 하지 않 을 것 같 습 니 다. 여기 서 제 가 생각 하 는 방법 은 Nginx Docker 용 기 를 시작 할 때 – env 인 자 를 통 해 사용자 정의 환경 변 수 를 용기 에 전달 하 는 것 입 니 다. 예 를 들 어 변 수 는 HOST 입 니 다.IP, $ 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

좋은 웹페이지 즐겨찾기