解决Nginx启动报错“nginx: [emerg] unknown directive “ngx_fastdfs_module“ in /xxx/nginx/conf/nginx.conf:43“

背景

centos7操作系统,nginx被人安装过多次,重启服务器,发现nignx未设置开机自启,启动报错nginx: [emerg] unknown directive “ngx_fastdfs_module” in /usr/local/nginx/conf/nginx.conf:43

排查

1、尝试启动,查看报错日志

sudo systemctl start nginx

上述命令如果报nginx.service找不到:Failed to start nginx.service: Unit not found.,则进入nginx的安装目录。不知道自己的nginx服务可以使用命令:nginx -V查看版本号信息所显示的prefix属性,这里我的nginx服务是/opt/nginx。然后进入该安装目录下的sbin目录,重载或者重启nginx服务

nginx -V

cd /opt/nginx/sbin/

./nginx -s reload
或者
./nginx -s restart

在这里插入图片描述
可以看到这里我报错了"nginx: [emerg] unknown directive “ngx_fastdfs_module” in /usr/local/nginx/conf/nginx.conf:43"

原因

这个错误提示意味着在Nginx配置文件中包含了一个未知的指令"ngx_fastdfs_module",导致Nginx无法启动。根据报错提示找到配置文件(这里我的配置文件位置是:/usr/local/nginx/conf/nginx.conf)中发现启动nginx服务的时候确实去加载fastdfs的ngx_fastdfs_module了
在这里插入图片描述

解决

1、确认是否安装了ngx_fastdfs_module模块

nginx -V

在这里插入图片描述
如果ngx_fastdfs_module没有在输出的信息中列出,则需要安装该模块,走以下步骤。
:上面nginx -V排查的时候其实已经看到这里我的输出信息确实列出ngx_fastdfs_module了,但是跑的是/usr/bin/nginx服务。说明跑错服务了,运行/usr/bin/nginx服务就行。

2、编译nginx时将ngx_http_fastdfs_module包含在configure命令中

ngx_http_fastdfs_module是一个nginx扩展模块,用于实现FastDFS的分布式文件存储系统的HTTP协议访问。可以去官方下载:https://github.com/happyfish100/fastdfs-nginx-module/tags,进入Nginx源代码目录,运行以下命令进行configure配置(注:/opt/soft/fastdfs-nginx-module是我的fastdfs-nginx-module安装路径):

cd /opt/soft/nginx-1.14.2
./configure --add-module=/opt/soft/fastdfs-nginx-module/src

由于nginx -V已经知道nginx的版本是1.14.2,所以上述/opt/soft/nginx-1.14.2是我排查这台服务器所查找的nginx源代码目录,全局搜索命令(命令拓展):

sudo find / -type d -name "nginx-1.14.2"

在这里插入图片描述

3、重新加载或启动Nginx服务

sudo systemctl restart nginx

或者

cd /path/nginx/sbin/
./nginx -s reload
或者
./nginx -s restart

/path/nginx/sbin/替换成你的nginx的安装路径就可以了,使用以下命令查看是否启动了:

ps -ef|grep nginx

总结

捣鼓一圈,我算是发现了,nginx被前人安装好几遍,目录眼花缭乱。nginx源代码在/opt/soft/目录下,nginx服务安装在/usr/bin/nginx,prefix属性所指向的nginx目录/opt/nginx是误导,前人不清楚重装之后改了指向,其实不影响服务的正常启动

猜你喜欢

转载自blog.csdn.net/Da_zhenzai/article/details/130392344