मुझे जो त्रुटि मिल रही है वह यहां है:

Reloading nginx configuration: 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 error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib) nginx: configuration file /etc/nginx/nginx.conf test failed

मुझे 100% यकीन है कि फ़ाइल उस स्थान पर है लेकिन Nginx को लगता है कि यह वहां नहीं है। मैंने उस क्रम में domain.crtऔर intermediate.crtमैन्युअल रूप से विलय कर दिया मैं पूरे दिन इस पर अपना सिर खुजलाता रहा। मुझे आशा है कि किसी ने इस त्रुटि को देखा है और एक समाधान है। (और एक साइड नोट यह चिपकाने में कोई त्रुटि नहीं है कि फ़ाइल स्थान केवल एक बार दिखाया जाता है और 'ऐसी कोई फ़ाइल या निर्देशिका नहीं' के बाद फिर से नहीं)।

answer

क्या आप सुनिश्चित हैं कि Nginx उपयोगकर्ता के पास निर्देशिका तक पहुंच है?

.pemफ़ाइल की अनुमतियों की भी जाँच करें , यदि Nginx इसे एक्सेस नहीं कर सकता है, तो यह 'no such file or directory'.

यदि अनुमतियाँ सही हैं, तो आप वास्तविक पथ की फिर से जाँच कर सकते हैं। आपने इसे कैसे चिपकाया (जो मुझे पता है कि आपने डीआईआर हटा दी है) कोई शुरुआत नहीं है /जो समस्या हो सकती है।

संपादित करें

अपने एसएसएल सेटअप को निम्नलिखित संरचना में ले जाने का प्रयास करें (साथ ही 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 ऐसा करता है) लेकिन उपरोक्त सेटअप ठीक काम करना चाहिए।

अगर कोई इस विषय पर आता है तो मैं अपनी समस्या के लिए अपना जवाब छोड़ दूंगा।

मेरे पास डोकर कंटेनर के अंदर nginx रन है, और निजी कुंजी फ़ाइल तक पहुंचने का प्रयास करने में एक ही त्रुटि है। कई घंटों तक अपना सिर खुजलाने के बाद, मुझे इस बात का अहसास हुआ कि मेरे डॉकटर के नगनेक्स में माउंट वॉल्यूम नहीं है जिसमें मेरा डेटा है।

माउंट वॉल्यूम जोड़ने का एकमात्र विकल्प विकल्प के साथ कंटेनर को हटाना और फिर से बनाना है -v: https://docs.docker.com/engine/tutorials/dockervolumes/

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

कभी-कभी, तुच्छ चीजें देखना मुश्किल होता है। उममीद है कि इससे मदद मिलेगी।

एक संभावित परिदृश्य:

कभी-कभी ऐसा हो सकता है कि, वर्चुअलहोस्ट के लिए एसएसएल फाइलों (निजी कुंजी और प्रमाणपत्र) को कॉन्फ़िगर करते समय, जिसे कॉन्फ़िगर किया जा रहा है, यह उस पूर्ण पथ को निर्दिष्ट करना भूल गया जहां ये फाइलें रहती हैं।

उदाहरण के लिए, यदि आप 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 " के अंदर स्टोर करते हैं :

[email protected]:/etc/nginx/conf.d# pwd
/etc/nginx/conf.d
[email protected]:/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)

क्या किया जाना चाहिए?

आपके वर्चुअलहोस्ट कॉन्फ़िगरेशन द्वारा उपयोग की जाने वाली अतिरिक्त फ़ाइलों का पूर्ण पथ निर्दिष्ट करने के लिए।

इस कदर:

[email protected]:/etc/nginx/conf.d# cd
[email protected]:~# 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;
    }

}

से शुरू करने का प्रयास करें /root:

ssl_certificate         /root/path/to/cert.crt;
ssl_certificate_key     /root/path/to/cert.pem;

मैंने इस तरह की समस्या हल की।

हर्ष

मुझे एक ही समस्या का सामना करना पड़ा है।

[लक्षण]
यह "systemctl पुनरारंभ nginx" से शुरू नहीं हो सकता है।
लेकिन कमांड के नीचे nginx शुरू हो सकता है।
"/usr/sbin/nginx"

[couse]
मैंने सीधे प्रदाता से डाउनलोड की गई प्रमाणपत्र फ़ाइल का उपयोग किया है।

[समाधान]
मैंने प्रमाणपत्र पाठ की प्रतिलिपि बनाई है और इसे मैंने जो फ़ाइल बनाई है उस पर चिपकाया है (vim द्वारा)।

मेरी भी यही समस्या थी। मुझे /etc/nginx/sites-enabled/default और default.save फाइलों को बदलना पड़ा , जो सेटअप प्रक्रिया के दौरान .com के बिना मेरी साइट का नाम स्वतः जोड़ दिया गया था, जो मेरे उदाहरण में समस्या थीइसे छोटा रखने के लिए, इन दो पंक्तियों को my /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 जोड़ा, जो नामकरण सम्मेलन है जिसे मैं फ़ाइल जोड़ने के लिए उपयोग करता था, फ़ाइल निर्देशिकाओं में स्विचमैजिक संदर्भों में जो त्रुटियों को फेंक रहे थे, सब ठीक था! मैंने बहुत सारे देवों को एक ही प्रश्न पूछते हुए पाया, इसलिए मैं अपना समाधान वहाँ फेंकना चाहता था ताकि मुझे जो उत्तर मिले, वे ज्यादातर रूट अनुमतियों के बारे में थे, लेकिन मेरे मामले में रूट अनुमतियाँ समस्या नहीं थीं। देवों पर रॉक।