다운 타임없이 Nginx 설정 재로드


122

nginx를 리버스 프록시로 사용합니다. 내가 사용하여 구성을 업데이트 할 때마다

sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
sudo "kill -s HUP `cat /var/run/nginx.pid`"

짧은 가동 중지 시간이 발생합니다. 어떻게 피할 수 있습니까?


1
이것들은 커맨드 라인 명령입니까? 아무도 sudo 명령 전체를 따옴표로 묶는 것을 본 적이 없습니다. 필요하지 않을 수도 있습니다.
brianmearns

4
일반적인 의견 : 표준 / 권장되는 방법은 사이트 구성에 대한 소프트 / 기호 링크를 sites-enabled복사하지 않고 작성하는 것입니다. 특정 문제와 관련이 없지만 조사해 볼 수 있습니다.
brianmearns

1
가동 중지 시간이 발생하지 않아야합니다. kill HUPnginx에서 정상적으로 다시로드하는 방법입니다.
Jonathan Vanasco

답변:


181

실행 service nginx reload또는/etc/init.d/nginx reload

다운 타임없이 구성을 핫 리로드합니다. 보류중인 요청이있는 경우 죽기 전에 해당 연결을 처리하는 느린 nginx 프로세스가 있으므로 구성을 다시로드하는 매우 우아한 방법입니다.

때때로 당신은 앞에 추가하고 싶을 수도 있습니다 sudo


10
두 가지 모두 질문에 나와있는 것과 정확히 일치해야합니다 SIGHUP. nginx 마스터 프로세스로 전송 하십시오. 차이가 없어야합니다. nginx.org/en/docs/control.html
Gnarfoz

CentOS에서 명령을 실행할 때 "Usage /etc/init.d/nginx (start..stop ... restart..reload)"..라고 계속 표시됩니다. 이것이 바로 내가 사용한 방법입니다. /init.d/nginx 파일에서 kill -HUP cat $PIDFILE|| echo -n "재로드 할 수 없음"
매시업

1
당신은 차이가 사이에 무엇을 알 수 있습니까 service nginx reloadnginx -s reload? 전자를 실행하면 다음 Reloading nginx configuration: nginx.과 같은 출력이 표시 되지만 변경 사항은 업데이트되지 않습니다. 후자를 실행하면 출력이 나타나지 않지만 변경 사항이 반영됩니다.
Ryan Quinn

log_not_found지시문 을 추가 한 후 이것을 시도했지만 실제로 작동하려면 다시 시작해야한다는 것을 알았습니다. 리로드가 모든 지시문에서 작동하지 않는 것 같습니다.
mydoghasworms 2016 년

81

운영 /usr/sbin/nginx -s reload

자세한 명령 줄 옵션 은 http://wiki.nginx.org/CommandLine 을 참조 하십시오 .


마지막으로 Debian Jessie에서 작동하는 명령입니다.
danger89

1
이것이 더 좋은 방법입니다. 구성에 오류가있는 경우 서버가 다운 되지 않기 때문에 (이 경우 오류 만 표시)
Mir-Ismaili

nginx 기본 pid가 기본 위치에 없으면 '-p'가 필요합니다. 즉 :`/ opt / gitlab / embedded / sbin / nginx -s reload -p / var / opt / gitlab / nginx`
qxo

9

아니오, 귀하는 정확하지 않습니다. 귀하는 귀하가 설명하는 절차에 따라 다운 타임에 직면하지 않아야합니다. (Nginx는 가동 중지 시간없이 구성을 즉시 다시로드 할 수있을뿐만 아니라 가동 중지 시간 없이도 즉시 실행 파일을 업그레이드 할 수 있습니다.)

http://nginx.org/docs/control.html#reconfiguration에 따라 HUPnginx에 신호를 보내면 신호가 정상적으로 다시 시작되는지 확인하고 구성 파일이 올바르지 않으면 전체 절차가 취소됩니다. HUP신호 를 보내기 전에 nginx를 그대로 두십시오 . 가동 중지 시간이 발생하지 않아야합니다.

nginx가 구성 파일을 다시 읽으려면 마스터 프로세스로 HUP 신호를 보내야합니다. 마스터 프로세스는 먼저 구문 유효성을 검사 한 다음 새 구성을 적용합니다. 즉, 로그 파일과 새 청취 소켓을 엽니 다. 실패하면 변경 사항을 롤백하고 이전 구성으로 계속 작업합니다.


2

일반적으로 서비스의 구성 파일을 다시로드하면 실행중인 서비스에 영향을 미치지 않아야합니다. 그러나 이것은 SIGHUP신호 처리 방법에 따라 다릅니다 .

재로드 중에 특정 서비스에 다운 타임이 발생하는 경우,로드 밸런서를 사용하여 여러 서버에서 동일한 서비스를 실행하여이를 피할 수 있습니다. 이 경우 한 번에 하나의 서버를 꺼내서 다시로드 / 다시 시작할 수 있습니다. 그런 다음 확인 후 다시 추가 할 수 있습니다.


이 질문에 직접 대답하지는 않지만, 일반적으로 다운 타임을 피하기 위해 OP가 따라야 할 현명한 시나리오입니다.
Andrew M.

1
nginx가 다른 신호를 처리하는 방법에 대한 세부 사항 : nginx.org/en/docs/control.html
Gnarfoz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.