突然、「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(証明書が1つしかないと仮定)。

Nginxは、「'ssl_certificate'が定義されていません」エラーに対してもう少し軽減できます。serverこれらのブロックを元に戻すと、エラーが神秘的に消える可能性があると考えられます。ただし、正確性のためには、server証明書を必要とする各ブロックに対して証明書を定義するか、httpすべてのサーバーのブロック範囲内で証明書を定義する必要があります。

おすすめ記事