Nginx 시작이 SSL에 실패합니다. 해당 파일이나 디렉터리가 없습니다.

Nginx 시작이 SSL에 실패합니다. 해당 파일이나 디렉터리가 없습니다.

내가받는 오류는 다음과 같습니다.

nginx 구성 다시 로드: nginx: [emerg] SSL_CTX_use_certificate_chain_file("/path/to/cert.pem") 실패(SSL: 오류:02001002:시스템 라이브러리:fopen:해당 파일 또는 디렉터리 없음 오류:20074002:BIO 루틴:FILE_CTRL:시스템 lib 오류:140DC002:SSL 루틴:SSL_CTX_use_certificate_chain_file:시스템 lib) nginx: 구성 파일 /etc/nginx/nginx.conf 테스트 실패

나는 파일이 그 위치에 있다고 100% 확신하지만 Nginx는 그 파일이 거기에 없다고 생각하는 것 같습니다. 나는 그 순서대로 domain.crt및 수동으로 병합했습니다. intermediate.crt나는 하루 종일 이것 때문에 머리를 긁적였습니다. 누군가 이 오류를 보고 해결책이 있기를 바랍니다. (그리고 참고로 파일 위치가 '해당 파일이나 디렉터리 없음' 뒤에는 한 번만 표시되고 다시 표시되지 않는다는 점은 붙여넣기 시 오류가 아닙니다.)

답변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

누군가가 이 주제를 접할 경우를 대비하여 내 문제에 대한 답변을 남겨 두겠습니다.

도커 컨테이너 내에서 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 파일을 "/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;
    }

}

답변4

나는 같은 문제에 직면했습니다.

[증상]
"systemctl restart nginx"로 시작할 수 없습니다.
그러나 아래 명령은 nginx를 시작할 수 있습니다.
"/usr/sbin/nginx"

[원인]
공급자로부터 다운로드한 인증서 파일을 직접 사용했습니다.

[해결됨]
인증서 텍스트를 복사하여 vim으로 만든 파일에 붙여넣었습니다.

관련 정보