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

Nginx 可能會失敗,.pem因為權限太開放(需要原始程式碼來驗證 Nginx 是否執行此操作),但上述設定應該可以正常運作。

答案2

我會留下我的問題的答案,以防有人遇到這個話題。

我在 docker 容器內執行 nginx,並在嘗試存取私鑰檔案時遇到相同的錯誤。撓頭幾個小時後,我意識到我的 docker 的 nginx 沒有包含我的資料的掛載卷。

新增掛載磁碟區的唯一選項是使用下列選項刪除並重新建立容器-vhttps://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)

必須做什麼?

指定虛擬主機配置所使用的附加檔案的絕對路徑。

像這樣:

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)。

相關內容