在尝试非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,可以很快捷的定位问题,再者,不要过分相信百度到的答案
当然,参考别人的经验是必须的,但需要自己形成排错的方法,两者相结合,才是王道。