nginx 找不到自签证书 No such file or directory

记一次因为粗心而耗费大把时间的错误。

前段时间因为需要,得给 nginx 配置一个自签证书,使用 OpenSSL 生成自签证书并配置好 nginx 后,无法重启 nginx,提示有错误,运行 nginx -t,错误提示如下:

nginx: [emerg] BIO_new_file("/etc/nginx/ssl/self.cert") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/ssl/self.cert','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed

看到这错误提示我就觉得莫名其妙,因为证书文件明明就在那儿放着,怎么能说没有此文件呢??

我勒个去,真是服了,搜索了一天,也没有找到解决办法,都开始怀疑人生了,各种权限试遍了,放到不同的目录也还是不行,最后用 namei 命令检查时,一切看起来都是正常的,就是到最后一个文件时莫名就不存在了。WHY?

$ namei -mov /etc/nginx/ssl/self.cert
f: /etc/nginx/ssl/self.cert
drwxr-xr-x root root /
drwxr-xr-x root root etc
drwxr-xr-x root root nginx
drw------- root root ssl
                     self.cert - No such file or directory
$

就在要绝望的时候,我发现问题了,不是 nginx 的问题,也不是权限的问题,而是我太粗心了,把文件扩展名写错了,本来应该是 .crt,我却写成了 .cert!呵呵呵呵!!

怪不得 ls 命令和各种其他命令都没有任何问题,因为命令我都是按 tab 键自动补全的,而在 default.conf 配置文件里,我把扩展名写错了。

唉!纳闷了一整天的时间,到了晚上才发现!想不到自己竟然能如此的粗心。而且,这次找到错误的过程也真是太曲折,为什么?