nginx: [alert] could not open error log file: open() “/usr/local/nginx/logs/error.log“ failed 问题解决

目录

错误现象:

 问题分析:

解决方式:

方式一:重新编译

方式二:使用参数-p(推荐)

方式三:将nginx bin文件拷贝到默认prefix里运行


错误现象:

我在容器内运行nginx,运行方式是:

/app-service/cloudland/nginx/sbin/nginx -c /app-service/cloudland/nginx/conf/nginx.conf

报了上述的错误,全面的错误如下

nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2021/08/19 14:22:51 [emerg] 8956#0: mkdir() "/usr/local/nginx/client_body_temp" failed (2: No such file or directory)

 问题分析:

我在编译机器上编译nginx,编译出的nginx编译参数是:

然后拷贝到容器或者其他的运行机器上运行报上述错误,

chek了一下nginx.conf也没有发现问题,我nginx日志相关的配置

是个绝对路径, 日志文件也存在,奇怪报了上述错误,

最后发现是nginx编译是prefix的路径与运行的路径不一致,使用了默认的/usr/local,而不是我存放nginx bin文件的运行路径,即/app-service/cloudland/nginx,而导致了上述错误,

解决方式:

方式一:重新编译

重新编译nginx,编译时指定你以后要运行nginx bin文件的路径,我这里是--prefix=/app-service/cloudland/nginx,然后在运行下面的命令即可,这种方式比较麻烦,还要重新编译nginx

/app-service/cloudland/nginx/sbin/nginx -c /app-service/cloudland/nginx/conf/nginx.conf

方式二:使用参数-p(推荐)

运行nginx时候,加上-p参数重新指定prefix路径,就可以了

/app-service/cloudland/nginx/sbin/nginx -p /app-service/cloudland/nginx -c /app-service/cloudland/nginx/conf/nginx.conf

方式三:将nginx bin文件拷贝到默认prefix里运行

即按默认方式,将nginx bin文件拷贝到/usr/local/nginx/sbin下运行