centos php-fpm file not found.,关于php-fpm启动之后出现 file not found 情况的原因分析

这两天遇到个特别诡异的问题,系统 centOS7,有两种方式可以启动 php-fpm:

1 /usr/sbin/php-fpm 直接启动 (我的可执行文件在这个路径)

2 通过 service 启动,即 systemctl start php-fpm

然而会出现一个诡异的现象,通过方式 1 启动的进程没有任何问题,而通过 service 启动的 php-fpm 进程在加载 php 文件时却会出现 file not found 的错误,访问静态文件正常。

网上搜索了很多原因,却都是千篇一律,都是说什么路径没配置好,nginx 配置文件的 root 选项应该放在 location 外或给把 $documentroot 换成真实路径什么的,虽然能解决一些普通的原因,却解决不了这个。如果路径不对的话不可能说通过方式 1 能正常访问的,这个大家应该都能明白。

好了,进入正题,如果你也像为一样遇到了这个问题,那么你很幸运,不需要像我一样踩这么多坑了。

经过一番折腾,排除所有原因,最终发现问题:selinux 权限问题所致!

怎么样,坑吧 ^^, 差点崩溃。

以我的网站目录为例:/home/www/web.

php-fpm 在访问 web 目录下 的 index.php 文件时,被 selinux 拦截,访问被阻止,所以出现一开始说的 file not found 的情况。

至于为什么会出现,个人感觉应该是因为通过 service 方式启动时,selinux 会有一个检测的过程,没有被通过,所以导致这个结果。

而为什么没被通过?则是跟 / home/www/web/index.php 文件的属性权限有关,通过 ll -Z 命令可以看到:

[root@vikie-pc web]# ll -Z

-rwxrwxr-x. www www unconfined_u:object_r:httpd_user_content_t:s0 index.php

可以看到 object_r:httpd_user_content_t,叫作安全性文本

接下来就会有两个解决办法:

第一种:关闭 selinux!——简单粗暴,给力有效。然而,会降低系统的安全性,所以就有了第二种方法。

第二种:将 httpd_user_content_t 添加至 selinux 安全上下文,可通过执行如下命令:

[root@vikie-pc www]# semanage fcontext -a -t httpd_user_content_t '/data/www/index.php'//增加index.php的selinux安全上下文设置

[root@vikie-pc www]# restorecon -v '/data/www/index.php'//恢复默认安全上下文

restorecon reset /data/www/index.php context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_user_content_t:s0

[root@vikie-pc www]# grep php-fpm /var/log/audit/audit.log | audit2allow -M mypol//将php-fpm添加至selinux拦截白名单

[root@vikie-pc www]# semodule -i mypol.pp//相当于刷新使立即生效。

到此,问题解决!

Sharezer , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于php-fpm启动之后出现 file not found 情况的原因分析!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值