L'avvio di Nginx non riesce in nessun file o directory


14

Ecco l'errore che sto ricevendo:

Ricarica della configurazione nginx: nginx: [emerg] SSL_CTX_use_certificate_chain_file ("/ path / to / cert.pem") non riuscito (SSL: errore: 02001002: libreria di sistema: fopen: nessun errore di file o directory: 20074002: routine BIO: FILE_CTRL: sistema errore lib: 140DC002: routine SSL: SSL_CTX_use_certificate_chain_file: lib di sistema) nginx: file di configurazione /etc/nginx/nginx.conf fallito

Sono sicuro al 100% che il file si trova in quella posizione ma Nginx sembra pensare che non sia lì. Ho unito domain.crte intermediate.crtmanualmente in quell'ordine. Ho grattato la testa su questo per tutto il giorno. Spero che qualcuno abbia visto questo errore e abbia una soluzione (e una nota a margine non è un errore nel incollare che il percorso del file viene mostrato solo una volta e non ancora dopo "nessun file o directory").


3
path/to/cert.pemè certamente non è un percorso valido.
Michael Hampton

È corretto supporre che non sia il percorso effettivo. Tuttavia, potrei facilmente renderlo una parte valida della posizione. Ma in entrambi i casi non sono in grado di fornirti dettagli specifici a causa della società per cui questo viene fatto. Devo lasciare fuori il nome utente.
Tgoza,

Risposte:


15

Sei sicuro che l'utente Nginx abbia accesso alla directory?

Controlla anche le autorizzazioni del .pemfile, se Nginx non può accedervi, può mostrare come 'no such file or directory'.

Se le autorizzazioni sono corrette, è possibile controllare nuovamente il percorso effettivo. Come l'hai incollato (che so che hai rimosso la dir) non c'è inizio/ che potrebbe essere il problema.

MODIFICARE

Prova a spostare la tua configurazione SSL nella seguente struttura (oltre a cambiare nginx.confper riflettere):

sudo mkdir /etc/nginx/ssl
sudo chown -R root:root /etc/nginx/ssl
sudo chmod -R 600 /etc/nginx/ssl

Nginx potrebbe non funzionare .pemperché le autorizzazioni sono troppo aperte (è necessario il codice sorgente per verificare che Nginx lo faccia), ma l'installazione sopra dovrebbe funzionare correttamente.


Ho ricontrollato il percorso e questo contiene /all'inizio quindi ho cambiato la domanda per riflettere quello. Il file si trova in /home/user/subdirse tutti i permessi di file e directory al suo interno sono di proprietà dell'utente. Www.-data (nome utente.gruppo) e 775 set. E penso che nginx abbia accesso a tutto ciò che appartiene ai dati www, anche se potrei sbagliarmi.
Tgoza,

Sempre i semplici errori che impiegano un'eternità a capire :) Sono contento che tu l'abbia risolto.
Jim W.

com'era esattamente? Ho il mio in $root/keys/modo che la mia linea di certificato assomigli a ssl_certificate keys/cert.pem... devono essere nel webroot?
stella luminosa il

L'uso di percorsi assoluti ha funzionato.
stella luminosa il

Stavo usando un contenitore docker e ho riscontrato questo problema ogni volta che ho ricreato il contenitore. aggiungendo chmod -R 600 /etc/nginx/sslnel mio punto di accesso risolvi il problema grazie
Dimitri Kopriwa,

3

Lascerò la mia risposta per il mio problema, nel caso qualcuno incontrasse questo argomento.

Ho nginx eseguito nel contenitore della finestra mobile e ho lo stesso errore nel tentativo di accedere al file della chiave privata. Dopo avermi grattato la testa per diverse ore, mi sono reso conto che il nginx della mia docker non ha il volume di mount che contiene i miei dati.

L'unica opzione per aggiungere il volume di montaggio è rimuovere e ricreare il contenitore con l' -vopzione: https://docs.docker.com/engine/tutorials/dockervolumes/

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

A volte, le cose banali sono difficili da vedere. Spero che questo aiuto.


2

Un possibile scenario:

a volte può capitare che, durante la configurazione dei file SSL (chiave privata e certificato) per il Virtualhost che viene configurato, sia stato dimenticato di specificare il percorso assoluto in cui risiedono questi file.

Ad esempio, se segui questo documento ufficiale di 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;
    ...
}

Supponiamo di archiviare i file SSL all'interno di " /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

Che succede?

Per impostazione predefinita, quando non è specificato il percorso assoluto per un file normale utilizzato da Nginx, Nginx cercherà i file in "/ etc / nginx"

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

Cosa si deve fare?

Per specificare il percorso assoluto dei file aggiuntivi utilizzati dalla configurazione di Virtualhost.

Come questo:

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

Ho avuto lo stesso problema. Ho dovuto cambiare i file / etc / nginx / sites-enabled / default & default.save che sono stati aggiunti automaticamente il nome del mio sito senza il .com dopo di esso durante il processo di installazione, CHE È STATO IL PROBLEMA NELLA MIA ISTANZA . Per farla breve, queste due righe dovevano essere modificate in my / etc / nginx / siti-enabled / default. Si noti che questo file viene visualizzato con un'icona di collegamento nel mio file system ma sono stato in grado di fare clic con il pulsante destro del mouse sul file e modificarlo con l'opzione "Modifica / Editor interno".

HTTPS: richieste proxy su Node.js locale ap # HTTPS: richieste proxy su app Node.js locale: server {ascolta 443; nome_server 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;

Quando ho esaminato i file e ho aggiunto il .com, che è la convenzione di denominazione che ho usato per aggiungere il file, ai riferimenti switchmagic nelle directory dei file che generavano gli errori, tutto andava bene! Ho trovato molti sviluppatori che si ponevano la stessa domanda, quindi volevo lanciare la mia soluzione per aiutarmi dato che le risposte che trovavo riguardavano principalmente i permessi di root, ma i permessi di root non erano il problema nel mio caso. Rock on Devs.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.