การเริ่มต้น Nginx ล้มเหลว ssl ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


14

นี่คือข้อผิดพลาดที่ฉันได้รับ:

การโหลดการกำหนดค่า nginx ใหม่: nginx: [ฉุกเฉิน] 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ด้วยตนเองตามลำดับนั้น ฉันเกาหัวมาตลอดทั้งวัน ฉันหวังว่าบางคนได้เห็นข้อผิดพลาดนี้และมีวิธีแก้ไขปัญหา (และหมายเหตุด้านข้างไม่ใช่ข้อผิดพลาดในการวางตำแหน่งไฟล์จะแสดงเพียงครั้งเดียวและไม่ใช่อีกครั้งหลังจาก 'ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว')


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

Nginx อาจล้มเหลว.pemเนื่องจากคุณเปิดการอนุญาตแล้ว (ต้องการแหล่งที่มาเพื่อตรวจสอบว่า Nginx ทำเช่นนี้) แต่การตั้งค่าด้านบนควรทำงานได้ดี


ฉันตรวจสอบเส้นทางซ้ำแล้วซ้ำอีกและมันมี/จุดเริ่มต้นอยู่ด้วยดังนั้นฉันจึงเปลี่ยนคำถามเพื่อสะท้อนว่า ไฟล์นี้ตั้งอยู่ที่/home/user/subdirsและสิทธิ์การใช้ไฟล์และไดเรกทอรีทั้งหมดภายในนั้นเป็นของผู้ใช้ www-data (ชื่อผู้ใช้ชื่อกลุ่ม) และ 775 ชุด และฉันคิดว่า nginx สามารถเข้าถึงข้อมูลใด ๆ ที่เป็นของ www-data ได้แม้ว่าฉันจะเข้าใจผิด
tgoza

ความผิดพลาดง่าย ๆ ที่จะทำให้คุณเข้าใจได้ตลอดไป :) ดีใจที่คุณเข้าใจ
Jim W.

มันดูเป็นอย่างไรกันแน่? ฉันมีของฉัน$root/keys/เพื่อให้สายใบรับรองของฉันดูเหมือนssl_certificate keys/cert.pem... พวกเขาจะต้องอยู่ใน webroot?
ดาวสว่างไสว

การใช้เส้นทางที่สมบูรณ์ทำให้เกิดกลอุบาย
ดาวสว่างไสว

ฉันใช้นักเทียบท่า - คอนเทนเนอร์และตีปัญหานี้ทุกครั้งที่ฉันสร้างคอนเทนเนอร์ขึ้นใหม่ การเพิ่มchmod -R 600 /etc/nginx/sslจุดเริ่มต้นของฉันแก้ปัญหาได้ขอบคุณ
Dimitri Kopriwa

3

ฉันจะทิ้งคำตอบไว้สำหรับปัญหาของฉันในกรณีที่มีคนเจอหัวข้อนี้

ฉันมี nginx ทำงานอยู่ใน container 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

บางครั้งสิ่งเล็ก ๆ น้อย ๆ ก็ดูยาก หวังว่าความช่วยเหลือนี้


2

สถานการณ์ที่เป็นไปได้:

บางครั้งอาจเกิดขึ้นได้ว่าเมื่อกำหนดค่าไฟล์ SSL (ไพรเวตคีย์และใบรับรอง) สำหรับ Virtualhost ที่กำลังกำหนดค่ามันถูกลืมเพื่อระบุพา ธ สัมบูรณ์ที่ไฟล์เหล่านี้อยู่

ตัวอย่างเช่นหากคุณปฏิบัติตามเอกสารอย่างเป็นทางการนี้จาก 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หลังจากที่มันในระหว่างขั้นตอนการติดตั้งที่ปัญหาคือในกรณีของฉัน เพื่อให้สั้นสองบรรทัดนี้จำเป็นต้องเปลี่ยนแปลงใน / etc / nginx / sites-enabled / default โปรดทราบว่าไฟล์นี้จะแสดงด้วยไอคอนทางลัดในระบบไฟล์ของฉัน แต่ฉันสามารถคลิกขวาที่ไฟล์และแก้ไขด้วยตัวเลือก "แก้ไข / แก้ไขภายใน"

HTTPS - คำขอพร็อกซีไปที่ Node.js ในพื้นที่ ap # HTTPS - คำขอพร็อกซีไปยังแอป Node.js ในเครื่อง: เซิร์ฟเวอร์ {ฟัง 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 ในไดเรกทอรีไฟล์ที่มีการโยนข้อผิดพลาดทั้งหมดเป็นไปด้วยดี! ฉันพบ Devs จำนวนมากที่ถามคำถามเดียวกันดังนั้นฉันจึงต้องการที่จะแก้ปัญหาของฉันที่นั่นเพราะคำตอบที่ฉันพบส่วนใหญ่เกี่ยวกับการอนุญาตรูท แต่การอนุญาตรูทไม่ใช่ปัญหาในกรณีของฉัน Rock on Devs

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.