Nginxの起動に失敗するssl no such fileまたはdirectory


14

ここに私が得ているエラーがあります:

nginx構成の再読み込み:nginx:[emerg] SSL_CTX_use_certificate_chain_file( "/ path / to / cert.pem")が失敗しました(SSL:エラー: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そのためには、手動で。私は一日中この問題に頭を悩ませてきました。誰かがこのエラーを見て解決したことを願っています(そして、ファイルの場所が「そのようなファイルやディレクトリがない」後に一度だけ表示されるという貼り付けのエラーではありません)


3
path/to/cert.pem確かに有効な場所ではありませ
マイケルハンプトン

それが実際のパスではないと仮定するのは正しいことです。しかし、私はそれを簡単に場所の有効な部分にすることができました。しかし、いずれにせよ、これが行われている会社のために、詳細を提供することはできません。ユーザー名を省かなければなりません。
tgoza

回答:


15

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

Nginxは.pem、アクセス許可が開いているために失敗する可能性があります(Nginxがこれを行うことを確認するにはソースが必要です)が、上記のセットアップは正常に機能するはずです。


パスを再確認した/ところ、最初にパスが含まれているため、それを反映するように質問を変更しました。ファイルはにあり、/home/user/subdirsそこにあるすべてのファイルとディレクトリのアクセス権はuser.www-data(username.group name)と775セットによって所有されています。そして、nginxはwww-dataが所有するものにアクセスできると思いますが、私は間違っているかもしれません。
tgoza

常に把握するのに永遠にかかる単純な間違い:)うまくいけば嬉しいです。
ジムW.

どのように正確に見えましたか?私は$root/keys/私の証明書行が次のように見えるように私のものssl_certificate keys/cert.pemを持っています...彼らはwebrootにいる必要がありますか?
ブライトスター

絶対パスを使用することでうまくいきました。
ブライトスター

私はdocker-containerを使用しており、コンテナーを再作成するたびにこの問題に遭遇していました。追加chmod -R 600 /etc/nginx/ssl私のエントリポイントでは、問題のおかげで解決
ディミトリKopriwa

3

誰かがこのトピックに出くわした場合に備えて、私の問題に対する答えを残します。

Dockerコンテナ内でnginxを実行していますが、秘密鍵ファイルにアクセスしようとすると同じエラーが発生します。数時間頭を悩ませた後、私のドッカーのnginxにはデータを含むマウントボリュームがないことに気付きました。

マウントボリュームを追加する唯一のオプションは、-vオプションhttps://docs.docker.com/engine/tutorials/dockervolumes/を使用してコンテナを削除および再作成することです

docker run -d -P --name docker-nginx -v /etc/ssl/certs:/etc/ssl/certs nginx

些細なことは見にくい場合があります。この助けを願っています。


2

可能なシナリオ:

構成中の仮想ホストに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ファイルを「/etc/nginx/conf.d」内に保存するとします。

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;
    }

}

-1

同じ問題がありました。私は変更しなければならなかったの/ etc / nginxの/サイト対応/デフォルト&default.saveファイル私のサイト名を自動的に追加した.COMせずにセットアッププロセスの間、それの後MYインスタンス内の問題でした。短くするために、これらの2行を/ etc / nginx / sites-enabled / defaultで変更する必要がありました。このファイルはファイルシステムにショートカットアイコンで表示されますが、ファイルを右クリックして[編集/内部エディター]オプションで編集することができました。

HTTPS-ローカルNode.jsへのプロキシリクエストap#HTTPS-ローカルNode.jsアプリへのプロキシリクエスト:server {listen 443; server_name switchmagic.com;

    ssl on;
    # Use certificate and key provided by Let's Encrypt:
    ssl_certificate /etc/letsencrypt/live/switchmagic.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/switchmagic.com/privkey.pem;

ファイルを調べて、ファイルを追加するために使用した命名規則である.comを、エラーを投げていたファイルディレクトリ内のswitchmagic参照に追加すると、すべてがうまくいきました!多くの開発者が同じ質問をしているのを見つけたので、私が見つけた答えは主にルート権限に関するものだったので、私は解決策をそこに投げ出したいと思ったが、私の場合はルート権限は問題ではなかった。開発者向けのロック。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.