栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

nginx + php-fpm碰到File not found

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

nginx + php-fpm碰到File not found

在尝试非root起nginx和php-fpm遇到的问题和解决方法

nginx方面,以系统中的coosh用户启动为背景

# 源码安装的nginx,目录/application/nginx-1.8.1

useradd coosh

su - coosh

# 以下为nginx.conf配置文件的内容,注意该文件是放在coosh的家目录下

# 由于该配置文件不是在nginx安装目录中,所以里面的目录路径要全换成绝对路径

cat >nginx.conf <

worker_processes  1;

error_log /home/coosh/error.log;

pid       /home/coosh/nginx.pid;

events {

    worker_connections  1024;

}

http {

    include       /application/nginx-1.8.1/conf/mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    gzip on;

    gzip_types text/css text/xml text/plain application/javascript;

    gzip_min_length 1k;

    gzip_comp_level 5;

    gzip_vary on;

    server {

        listen          8080;

        access_log      off;

        # 我的网站目录是在家目录下的website目录中

        root    /home/coosh/website;

        location / {

                root    /home/coosh/website;

                index   index.php;

        }

        location ~ .php$ {

                #由于9000端口已经被另一个php-fpm占用了,所以另起了一个9001

                fastcgi_pass   127.0.0.1:9001;

                fastcgi_index  index.php;

                #这里的$document_root取值是server块里的root

                fastcgi_param  script_FILENAME  $document_root$fastcgi_script_name;

                include        /application/nginx-1.8.1/conf/fastcgi.conf;

        }

    }

}

EOF

#测试一下该配置文件

/application/nginx/sbin/nginx -c /home/coosh/nginx.conf -t

#通常会提示没有权限访问/application/nginx-1.8.1/logs/error.log,这确实很奇怪,因为在配置文件里命名是配了error_log参数,但仍提示这个路径,解决的方法是用root给这个文件配上所有人可读写。

logout

chmod 666 /application/nginx-1.8.1/logs/error.log

# 回到coosh用户下

su - coosh

/application/nginx/sbin/nginx -c /home/coosh/nginx.conf -t

# 如无意外,会提示OK和successful


php-fpm方面碰到的问题

由于系统里的php-fpm默认是以www用户或者php-fpm.conf里配置的user去运行,

所以,php-fpm是不具备直接访问其他用户家目录的权限,也是导致File not found的主因

如果配置成root权限执行,固然能访问得到所有的目录,但又会带来安全的风险。

因此,最佳的做法,是以coosh的身份去运行php-fpm

su - coosh

#把php-fpm.conf复制到coosh的家目录

cp /application/php/etc/php-fpm.conf .

把该文件里的user和group都该为coosh

[coosh@Lab2 ~]$ grep coosh php-fpm.conf 

user = coosh

group = coosh

[coosh@Lab2 ~]$ grep 9001 php-fpm.conf 

listen = 127.0.0.1:9001

检查一下配置文件

[coosh@Lab2 ~]$ /application/php/sbin/php-fpm -y ./php-fpm.conf -t    

通常又会提示没有权限访问/application/php/var/log/php-fpm.log

所以,切换会root,修改一下文件的权限

[root@Lab2 ~]# chmod 666 /application/php/var/log/php-fpm.log

切换回coosh,再次检查

[coosh@Lab2 ~]$ /application/php/sbin/php-fpm -y ./php-fpm.conf -t      

[29-Jun-2016 17:30:17] NOTICE: configuration file ./php-fpm.conf test is successful

可以尝试执行php-fpm

/application/php/sbin/php-fpm -y ./php-fpm.conf



总结,在遇到问题时,要多使用strace,可以很快捷的定位问题,再者,不要过分相信百度到的答案

当然,参考别人的经验是必须的,但需要自己形成排错的方法,两者相结合,才是王道。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/227677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号