2017-03-04 12 views
2

우리는 도커 - 클라우드 서비스를위한 리버스 프록시로서 Nginx를 사용하고 있습니다. 새 서비스가 docker 클라우드에 배포되거나 서비스가 docker-cloud에서 새 URL을 얻는 경우 스크립트가 Nginx의 구성 파일을 업데이트하도록 구현됩니다.Nginx 설정 파일을 제로 다운 시간 컨테이너에 업데이트하십시오.

Nginx와 스크립트는 도커 컨테이너에서 별도로 실행되었습니다. Nginx 설정 파일은 호스트 (ECS)에 마운트됩니다. 스크립트를 사용하여 설정 파일을 업데이트 한 후에 변경 사항을 적용하려면 Nginx를 다시로드해야합니다.

우선, 이것이 Nginx 설정 파일을 업데이트하는 가장 좋은 방법인지 그리고 어떤 중단 시간없이 Nginx를 다시로드하는 가장 좋은 방법인지 알고 싶습니다.

각 업데이트 후에 Nginx 컨테이너를 다시 만들어야합니까? 그렇다면 어떻게?

또는 Nginx를 호스트에서 다시로드하여 설정 파일 (스크립트 사용)의 변경 사항을 모니터링하고 아래 명령을 사용하여 다시로드 하시겠습니까?

docker exec NginxcontainerID | nginx -s reload  

답변

6

나는 각 업데이트 후 Nginx에 컨테이너를 다시할까요? 그렇다면 어떻게?

아니요, 대부분의 경우 nginx 서비스를 다시로드하기 만하면됩니다. 당신은 사용할 수 있습니다

docker exec nginxcontainername/id nginx -s reload 

또는

docker kill -s HUP nginxcontainername/id 

또 다른 옵션을 사용자 정의 이미지를 사용하고 nginx를 설정 체크섬을 확인하고 변경 이제까지 때의 nginx를 다시로드합니다. 예제 스크립트 :

nginx "[email protected]" 
oldcksum=`cksum /etc/nginx/conf.d/default.conf` 

inotifywait -e modify,move,create,delete -mr --timefmt '%d/%m/%y %H:%M' --format '%T' \ 
/etc/nginx/conf.d/ | while read date time; do 

    newcksum=`cksum /etc/nginx/conf.d/default.conf` 
    if [ "$newcksum" != "$oldcksum" ]; then 
     echo "At ${time} on ${date}, config file update detected." 
     oldcksum=$newcksum 
     nginx -s reload 
    fi 

done 

inotifywait 패키지를 설치해야합니다.

+0

답장을 보내 주셔서 감사합니다. 도움이되었습니다. 당신이 고 가용성 Nginx 컨테이너, 장애 조치를위한 아키텍처를 가지고 가장 좋은 방법은 무엇인지 궁금하네요? 나는이 질문에 따라 질문했지만 아직 답장을받지 못했습니다. http://stackoverflow.com/questions/41379428/how-to-set-up-two-nginx-containers-as-a-reverse-proxy-in-an-active-passive-set-u – Matrix