Nginx 시작 실패 ssl no such file or directory


14

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

nginx 구성 재로드 : nginx : [emerg] SSL_CTX_use_certificate_chain_file ( "/ path / to / cert.pem") 실패 (SSL : error : 02001002 : system library : fopen : 파일 또는 디렉토리 오류 없음 : 20074002 : BIO 루틴 : FILE_CTRL : system lib error : 140DC002 : SSL 루틴 : SSL_CTX_use_certificate_chain_file : system lib) nginx : 구성 파일 /etc/nginx/nginx.conf 테스트 실패

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


3
path/to/cert.pem확실히 유효한 위치 가 아닙니다 .
Michael Hampton

실제 경로가 아닌 것으로 가정하는 것이 맞습니다. 그러나 나는 그것을 위치의 유효한 부분으로 쉽게 만들 수 있습니다. 그러나이 작업을 수행하는 회사로 인해 구체적인 방법을 제공 할 수 없습니다. 사용자 이름을 생략해야합니다.
tgoza

답변:


15

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 가이 작업을 수행하는지 확인하기 위해 소스가 필요함).하지만 위의 설정은 정상적으로 작동합니다.


나는 경로를 두 번 확인했으며 /처음에는를 포함하므로 질문을 반영하여 변경했습니다. 파일은 /home/user/subdirsuser.www-data (username.group name) 및 775 세트가 소유하고 있으며 파일 및 디렉토리 내의 모든 파일 및 디렉토리 권한이 있습니다. 그리고 나는 nginx가 www-data가 소유 한 모든 것에 액세스 할 수 있다고 생각합니다.
tgoza

항상 알아내는 데 항상 간단한 실수가 있습니다. :) 다행입니다.
Jim W.

정확히 어떻게 보였습니까? 나는 광산이 $root/keys/처럼 내 인증서 라인 외모 때문에 ssl_certificate keys/cert.pem... 그들은 웹 루트에 있어야합니까?
bright-star

절대 경로를 사용하여 트릭을 수행했습니다.
bright-star

도커 컨테이너를 사용하고 있었고 컨테이너를 다시 만들 때 마다이 문제가 발생했습니다. chmod -R 600 /etc/nginx/ssl내 진입 점을 추가 하면 문제 감사를 해결
Dimitri Kopriwa

3

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

도커 컨테이너 내에서 nginx를 실행했으며 개인 키 파일에 액세스하는 동안 동일한 오류가 발생했습니다. 몇 시간 동안 머리를 긁은 후 도커의 nginx에 내 데이터가 들어있는 마운트 볼륨이 없다는 것을 깨달았습니다.

마운트 볼륨을 추가하는 유일한 옵션은 https://docs.docker.com/engine/tutorials/dockervolumes/-v 옵션을 사용하여 컨테이너를 제거하고 다시 만드는 것입니다.

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

" /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)

무엇을해야합니까?

가상 호스트 구성에 사용되는 추가 파일의 절대 경로를 지정합니다.

이처럼 :

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)없이 설치 과정 동안 그 후에 내 인스턴스의 문제 WAS . 요약하자면이 두 줄을 / 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 참조에 추가했을 때 모든 것이 잘되었습니다! 나는 동일한 질문을하는 많은 개발자를 발견했기 때문에 내가 찾은 답변이 대부분 루트 권한에 관한 것이 었으므로 루트 솔루션이 문제가 아니기 때문에 솔루션을 버리고 싶었습니다. Dev on Rock.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.