私はこのような構成を持っています。長年働いてきました。:
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_certificate
ssl_certificate_key
server
すべてのブロックが同じ証明書を使用するように、これらのステートメントをブロックの外に移動できますserver
(証明書が1つしかないと仮定)。
Nginxは、「'ssl_certificate'が定義されていません」エラーに対してもう少し軽減できます。server
これらのブロックを元に戻すと、エラーが神秘的に消える可能性があると考えられます。ただし、正確性のためには、server
証明書を必要とする各ブロックに対して証明書を定義するか、http
すべてのサーバーのブロック範囲内で証明書を定義する必要があります。