갑자기 "listen...ssl"에 대해 "ssl_certificate" 오류가 정의되지 않았습니다.

갑자기 "listen...ssl"에 대해 "ssl_certificate" 오류가 정의되지 않았습니다.

나는 이런 구성을 가지고있다.수년 동안 일해 왔습니다.:

  server {
      listen 80;
      server_name www.domain.com domain.com;
      return 301 https://domain.com$request_uri;
  }


  # !!!!
  # line 10
  server {
      listen 443 ssl http2;
      server_name www.domain.com;
      return 301 https://domain.com$request_uri;
  }

  server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;

      server_name domain.com;


      ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;

      ssl_prefer_server_ciphers on;
      ssl_session_timeout 180m;
      ssl_session_cache builtin:1000 shared:SSL:10m;
      ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
      add_header Strict-Transport-Security 'max-age=31536000';

      # [.................]
  }

이제 오류로 인해 실패하기 시작합니다.

no "ssl_certificate" is defined for the "listen ... ssl" directive in /etc/nginx/sites-enabled/domain.com:10

nginx는 어떻게 됐나요? 어떻게 고치나요?

답변1

귀하의 블록에 선언이 server없습니다 .ssl_certificatessl_certificate_key

server모든 블록이 동일한 인증서를 사용하도록 이러한 명령문을 블록 외부로 이동할 수 있습니다 server(인증서가 하나만 있다고 가정).

Nginx는 "'ssl_certificate'가 정의되지 않았습니다" 오류에 대해 좀 더 완화할 수 있습니다. server이러한 블록을 되돌리면 오류가 신비롭게 사라질 수 있다고 생각됩니다 . 하지만 정확성을 위해서는 server인증서가 필요한 각 블록마다 인증서를 정의 하거나 http모든 서버의 블록 범위 내에서 인증서를 정의해야 합니다.

관련 정보