背景
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 -Vcd /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
是误导,前人不清楚重装之后改了指向,其实不影响服务的正常启动
来源地址:https://blog.csdn.net/Da_zhenzai/article/details/130392344