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

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

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

useradd coosh

su - coosh

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

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

cat >nginx.conf <<EOF

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,可以很快捷的定位问题,再者,不要过分相信百度到的答案

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