在尝试非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,修改一下文件的权限
[iyunv@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
spacer.jpg (43 Bytes, 下载次数: 4)
2016-6-30 09:16 上传
总结,在遇到问题时,要多使用strace,可以很快捷的定位问题,再者,不要过分相信百度到的答案
当然,参考别人的经验是必须的,但需要自己形成排错的方法,两者相结合,才是王道。