先总结下这个问题出现的提示
- 访问php页面显示file not found
- 查看error.log日志文件提示"Primary script unknown" while reading response header from upstream"
描述下我操作的环境背景..
- 初学Linux,尝试搭建LNMP环境
- 直接用root用户操作(因为都是学习,我也就懒得创用户了,但这也是导致我这次问题特别的原因)
- 因为是root用户,我直接把nginx的安装目录<b>装在了root目录下</b>
百度的情况:
-
nginx配置文件中配置的php文件指向的目录不对,导致找不到文件
这种情况应该这么做,注意代码中的{{{web目录}}}改成你对应的web目录location ~ .*\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME {{{web目录}}}$fastcgi_script_name; include fastcgi.conf; }
访问web目录的权限不够
那这个你就相应的提高需要的权限吧,-rwxrwxrwx,第一个-是文件类型,然后前三个rwx是所属用户的权限,中间三个是所属用户组的权限,后三个是其他用户组的权限
我的情况:
默认php-fpm的配置文件在你的php安装目录下 路径为xxx/etc/php-fpm.d/www.conf,vim打开可以看到里面有
user = nobody
group = nobody
这个设置,这就是说php-fpm是以nobody用户启动的,查看命令为ps -ef | grep php-fpm
;
再看看nginx进程的用户,是root(我只有root用户)
再看了这篇文章后http://blog.csdn.net/qq_27754983/article/details/68195727 受了启发,但是我是root用户,所以这里
user = nobody
group = nobody
就都改成了
user = root
group = root
然后启动出错,提示说请吧user group改为root以外的用户,然后我纠结了一段时间,又去百度了,结果还真有一定改成root用户开启的方法,就是不推荐
在php安装目录下/sbin/下执行./php-fpm -R
,注意大写R(这是强行以root用户开启进程)
然后再查看ps -ef | grep php-fpm
和ps -ef | grep nginx
,两个的用户是一样的,访问成功了。
总结
一开始我就觉得我这个一定是路径问题,然后就一直改root指向的目录,又是刚学linux,什么移动啊复制啊改名啊,头很大.
后来想起来去看eroor.log,去百度里面的关键字,结果大部分说是权限问题
我就把整个nginx目录和所有网页文件设为了777权限。还是不行。
直到找到了这篇文章http://blog.csdn.net/qq_27754983/article/details/68195727 我才去试着改了php-fpm的用户,最后是成功了。这就说明了的确是权限问题。
但直到我刚刚再去检查一遍权限的时候。/root/这个文件夹的权限是550,就是说其他用户组是根本进不来的。搜嘎。终于通了。
这一个下午过去了,但是感觉更了解了linux,nginx,php-fpm
附上今天研究的一点点点nginx配置的说明
多余的配置我删了,反正我也不懂 , 这些我已经够搭起最基础的php了,
马上就要去召唤师峡谷了,写注释的时候发现还有很多不确定的,就大致看看吧~
user root root;#表示用什么用户运行--大概吧
worker_processes 1;#work的进程数
events {
worker_connections 1024;#一个进程最大连接数
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;#访问超时限制
root html;#吧本来在localtion里面的root参数提取出来,就在所有的location下用$document_root生效
index index.html index.php;#同理
server {
listen 80;#监听的端口
server_name localhost;#主机名
location / {
root html;
index index.php index.html;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#本来是没有的,估计不用加,可以删了,因为php下面配置了
}
location ~ /file/.* {#自己试试的一个路径,吧 /file/xxx.xxx的访问路径定义到别的地方
root /root/www/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;#这个是php-fpm监听的端口,固定的,除非你去改php-fpm的配置文件
fastcgi_index index.php;#应该是默认主页吧
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#这里的$document_root指代最外层的root html;
include fastcgi.conf;#引用外部文件
}
}
}#话说当前目录这里不用加./的