ここに私が得ているエラーがあります:
Nginx構成の再読み込み:nginx:[emerg] SSL_CTX_use_certificate_chain_file( "/ path/to/cert.pem")failed(SSL:error:02001002:system library:fopen:No such file or directory error:20074002:BIO routines:FILE_CTRL:system libエラー:140DC002:SSLルーチン:SSL_CTX_use_certificate_chain_file:system lib)nginx:構成ファイル/etc/nginx/nginx.confテストが失敗しました
私はファイルがその場所にあることを100%確信していますが、Nginxはそこにはないと考えているようです。 domain.crt
およびintermediate.crt
手動でこの順序で。私はこれについて一日中頭を悩ませてきました。私は誰かがこのエラーを見て解決策を持っていることを願っています(そして、ファイルの場所が一度だけ表示され、「そのようなファイルまたはディレクトリはありません」の後に再び表示されないという貼り付けのエラーではありません)。
Nginxユーザーがディレクトリにアクセスできることを確認しますか?
また、.pem
ファイルの権限を確認します。Nginxがアクセスできない場合は、'no such file or directory'
と表示されます。
権限が正しい場合は、実際のパスを再度確認する場合があります。あなたがそれをどのように貼り付けたか(私はあなたがdirを削除したことを知っています)、問題である可能性のある最初の/
はありません。
[〜#〜]編集[〜#〜]
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がこれを行うことを確認するためのソースが必要)、上記の設定で問題なく機能するためです。
誰かがこのトピックに遭遇した場合に備えて、私は自分の問題に対する私の答えを残しておきます。
Nginxをdockerコンテナー内で実行しましたが、秘密鍵ファイルにアクセスしようとすると同じエラーが発生します。数時間頭を掻いたところ、私の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
時には、ささいなことがわかりにくいことがあります。この助けを願っています。
可能なシナリオ:
構成中の仮想ホスト用の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;
...
}
「/ etc/nginx/conf.d」内にSSLファイルを保存するとします:
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)
何をしなければならないのですか?
Virtualhost構成で使用される追加ファイルの絶対パスを指定します。
このような:
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;
}
}