보안 인증서를 갱신하면 Nginx를 다시 시작해야 합니까?

보안 인증서를 갱신하면 Nginx를 다시 시작해야 합니까?

그래서 다음 서버 정의를 사용하여 SSL 지원 nginx 서버를 설정하고 있습니다.

server {
    listen :80;
    listen [::]:80;
    server_name example.org;
    root /foo/bar;

    ssl on;
    ssl_certificate /path/to/public/certificate;
    ssl_certificate_key /path/to/private/key;

    ...
}

알겠습니다(오타가 있으면 양해해 주세요).

어쨌든, 제가 궁금한 것은 인증서를 업데이트하면 nginx를 다시 시작하지 않고 인증서를 설치할 수 있는 방법이 있습니까?

예를 들어 현재 인증서를 가리키기 위해 /path/to/public/certificate및 심볼릭 링크를 사용하는 경우 새(업데이트된) 인증서를 가리키도록 변경했다면 여전히 재부팅해야 합니까? 다른 옵션이 있나요?/path/to/private/keynginx

답변1

필요할 것이예요새로고침갱신된 인증서에 올바른 만료 날짜가 표시되도록 Nginx(둘 사이의 차이점에 대한 설명은 아래 지침 및 기타 설명을 참조하세요)새로고침그리고재시작nginx).

Nginx를 다시 로드한 후 간단한 캐시 지우기 및 찾아보기를 통해 SSL 인증서의 업데이트된 만료 날짜를 볼 수 있습니다.

또는 cli를 선호하는 경우 언제든지 이전의 안정적인 OpenSSL 명령을 사용할 수 있습니다.

echo | openssl s_client -connect your.domain.com:443 | openssl x509 -noout -dates

그러면 인증서의 현재 날짜가 표시됩니다.

귀하의 경우 포트는 443이 아닌 80이 됩니다(OP는 나중에 문제의 포트 80이 실제로 443이어야 한다고 지적했지만 Nginx는 현재 포트가 아닌 한 HTTP 또는 HTTPS에 대해 제공하는 모든 포트를 수신합니다.) 다른 프로세스에서 사용됨).

nginx -s reload예상대로 작동하지 않는 경우가 많습니다 . 많은 시스템(Debian 등)에서는 /etc/init.d/nginx reload.

이 답변을 업데이트하고 명확하게 편집하려면 다음을 수행하십시오.

최신 시스템에서는 또는 를 systemd실행할 수도 있습니다 .systemctl reload nginxservice nginx reload

이들 모두reload방식이 다릅니다restart실제로 그들은 다음을 보냈습니다.SIGHUPNginx에게 기존 연결을 종료하지 않고 구성을 다시 로드하도록 지시하는 신호입니다(이는 전체 재부팅 시 발생하며 거의 확실하게 사용자에게 영향을 미칩니다).

어떤 이유로 Nginx가 인증서를 다시 로드하지 않는 경우 restart그렇게 할 수 있지만 reload.

도착하다재시작Nginx, 그냥 실행 하거나 systemctl restart nginxNginx가 없는 시스템에서 실행하세요 .systemdnginx -s stop && nginx -s start

어떤 이유로든 다른 모든 방법이 실패하면 Nginx PID를 종료하면 언제든지 직접 사용할 수 있습니다 nginx -c /path/to/nginx.conf.

답변2

SIGHUPnginx는 업데이트된 구성을 수신한 후 다시 로드합니다.로그 파일 열기 및 SSL 인증서 읽기 시 확인을 클릭한 다음 이전 구성에 따라 작업자 프로세스를 정상적으로 종료합니다.

nginx가 일부 SSL 인증서를 읽을 수 없는 경우 이전 구성으로 계속 실행하겠습니다. 즉, 구성 파일에 어떤 작업을 수행하더라도 계속해서 요청을 실행하고 처리합니다. 손상되더라도 귀하의 웹사이트는 계속 열려 있습니다.

따라서 nginx가 업데이트된 인증서를 확인하도록 하려면 nginx를 다시 시작할 필요가 없으며 서버가 몇 초 이상 오프라인 상태가 될 위험이 없습니다. 이것으로 충분합니다:

sudo service nginx reload

현재 기본적으로 systemd를 사용하는 대부분의 배포판에서는 다음을 사용하여 nginx를 다시 로드할 수도 있습니다.

sudo systemctl reload nginx

관련 정보