発生したエラーは次のとおりです:
nginx 設定を再読み込みしています: nginx: [emerg] SSL_CTX_use_certificate_chain_file("/path/to/cert.pem") が失敗しました (SSL: エラー:02001002:システム ライブラリ:fopen:そのようなファイルまたはディレクトリはありません エラー:20074002:BIO ルーチン:FILE_CTRL:システム ライブラリ エラー:140DC002:SSL ルーチン:SSL_CTX_use_certificate_chain_file:システム ライブラリ) nginx: 設定ファイル /etc/nginx/nginx.conf のテストが失敗しました
ファイルがその場所にあることは 100% 確信していますが、Nginx はそこに存在しないと考えているようです。 とdomain.crt
をintermediate.crt
手動でこの順序でマージしました。この問題について一日中頭を悩ませています。誰かがこのエラーを見て、解決策を持っていることを願っています。(補足ですが、ファイルの場所が 1 回だけ表示され、「そのようなファイルまたはディレクトリはありません」の後に再び表示されないのは、貼り付け時のエラーではありません)。
答え1
Nginx ユーザーがディレクトリにアクセスできるかどうか確認してください。
また、ファイルの権限も確認してください.pem
。Nginx がアクセスできない場合は、 と表示されます'no such file or directory'
。
権限が正しい場合は、実際のパスをもう一度確認してください。貼り付けた方法 (ディレクトリを削除したことはわかっています) に先頭がないため/
、問題が発生する可能性があります。
編集
SSL 設定を次の構造に移動してみてください (また、nginx.conf
を反映するように変更してください)。
sudo mkdir /etc/nginx/ssl
sudo chown -R root:root /etc/nginx/ssl
sudo chmod -R 600 /etc/nginx/ssl
.pem
権限がオープンすぎるためにNginx が失敗する可能性があります(Nginx がこれを実行することを確認するにはソースが必要です) が、上記の設定は正常に動作するはずです。
答え2
誰かがこのトピックに遭遇した場合に備えて、私の問題に対する答えを残しておきます。
Docker コンテナ内で nginx を実行していますが、秘密鍵ファイルにアクセスしようとすると、同じエラーが発生します。数時間頭を悩ませた後、Docker の nginx にデータを含むマウント ボリュームがないことに気が付きました。
マウント ボリュームを追加する唯一のオプションは、次のオプションを使用してコンテナーを削除して再作成することです-v
。
https://docs.docker.com/engine/tutorials/dockervolumes/
docker run -d -P --name docker-nginx -v /etc/ssl/certs:/etc/ssl/certs nginx
時々、些細なことは見えにくいことがあります。これがお役に立てば幸いです。
答え3
考えられるシナリオ:
設定中の仮想ホストの SSL ファイル (秘密鍵と証明書) を設定するときに、これらのファイルが存在する絶対パスを指定するのを忘れてしまうことがあります。
たとえば、Nginx のこの公式ドキュメントに従う場合:http://nginx.org/en/docs/http/configuring_https_servers.html
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate tdmssl.crt;
ssl_certificate_key tdmssl.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
...
}
SSLファイルを「nginx.conf は、「:」
root@ilg40:/etc/nginx/conf.d# pwd
/etc/nginx/conf.d
root@ilg40:/etc/nginx/conf.d# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 24 17:39 ./
drwxr-xr-x 5 root root 4096 Jan 24 21:15 ../
-rw-r--r-- 1 root root 1359 Jan 24 17:39 tdmssl.crt
-rw-r--r-- 1 root root 1675 Jan 24 17:39 tdmssl.key
何が起こるのですか?
デフォルトでは、Nginx が使用する通常のファイルの絶対パスが指定されていない場合、Nginx は "/etc/nginx" でファイルを検索します。
/var/log/nginx/error.log から
2017/01/24 21:05:10 [emerg] 13113#0:
BIO_new_file("/etc/nginx/tdmssl.crt")
failed(SSL:error:02001002:system library:fopen:
No such file or directory:fopen('/etc/nginx/tdmssl.crt','r')
error:2006D080:BIO routines:BIO_new_file:no such file)
何をしなければならないのでしょうか?
仮想ホスト構成で使用される追加ファイルの絶対パスを指定します。
このような:
root@ilg40:/etc/nginx/conf.d# cd
root@ilg40:~# cat /etc/nginx/sites-available/tdm
server {
listen 443 ssl;
server_name tjsdatamanager.redtjs.com;
ssl_certificate /etc/nginx/conf.d/tdmssl.crt;
ssl_certificate_key /etc/nginx/conf.d/tdmssl.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
include proxy_params;
proxy_pass http://unix:/etc/tdm/flask/wsgi.sock;
}
}
答え4
私も同じ問題に遭遇しました。
[症状]
「systemctl restart nginx」では起動できません。
ただし、以下のコマンドで nginx を起動できます。
「/usr/sbin/nginx」
[原因]
プロバイダーからダウンロードした証明書ファイルを直接使用しました。
[解決方法]
証明書のテキストをコピーし、作成したファイルに貼り付けました (vim を使用)。