Linux下搭建nginx+php环境的file not found问题反省

先总结下这个问题出现的提示

  1. 访问php页面显示file not found
  2. 查看error.log日志文件提示"Primary script unknown" while reading response header from upstream"

描述下我操作的环境背景..

  1. 初学Linux,尝试搭建LNMP环境
  2. 直接用root用户操作(因为都是学习,我也就懒得创用户了,但这也是导致我这次问题特别的原因)
  3. 因为是root用户,我直接把nginx的安装目录装在了root目录下

百度的情况:

  • 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-fpmps -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;#引用外部文件
        }
    }
}#话说当前目录这里不用加./的

你可能感兴趣的:(Linux下搭建nginx+php环境的file not found问题反省)