实验环境: centos nginx/1.0.5 php5.3.25

     具体的配置,我就不说了。因为网上都有。虽然,也参考网上的资料,通过yum的方式来进行安装。但是,我还是喜欢各个组件进行安装,至少,可以多动手,而且也会经常出错。而,看到错误的提示,能够解决,也是算是一种进步了。

  我也是一边参考网上的资料,一边编译安装。把组件都配置完成了。而且,nginx和php之间也能够工作。好像工作就结束了似的。而且,网上的资料,在讲到nginx如何配置php上。很多都写了。编辑nginx.conf

        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

把前面的#去掉。然后,修改下/scripts (换成你自己的web目录),然后,重启nginx服务。在对应的web目录下写个php文件。试下访问。就这样。没有了。而且,这个过程,还是通过root用户进行操作。

  虽然,自己不是运维。但是呢,root在实际环境是不可能的。一般都是普通用户。其次,我想通过,访问php在web目录下,生成文件。

php文件内容:

<?php @file_put_contents("test.txt","hello world");?>

访问方式:

  第一、直接在命令行下访问即 php x.php 可以生成。

  第二、通过url方式访问不行。

居然,是什么问题。我困惑了。我想了下,或者是权限问题。这里的权限有几种: 1、登陆系统的用户权限(我是用root登陆的)2、文件目录权限。 3、web访问者的权限

解决过程:

  1) 我建立用户nginx 并且 对文件目录的权限设置成777(虽然不推荐,不过测试嘛)。再通过url方式访问。还是不行。

  2) 修改了nginx的配置文件nginx.conf 让web的用户是nginx。重启nginx。再通过url方式访问。还是不行。

纠结啊。想不出,还是百度吧。但是,如何用关键字搜索呢? 刚开始 ==》 php nginx生成不了文件。一大堆的信息。后来 nginx配置php。然后,看到有篇帖子说php-fpm进程用户权限问题。这时,才想。php-fpm也是个服务,也有用户权限这个东西。【配置环境,都没有说这一步啊。】。后来,看到了一篇hack帖子。说php-fpm的权限配置不当,被hack了。

我才知道去配置php-fpm的用户。

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
;user = nobody
;group = nobody

把user和group都修改成上述配置的用户nginx。重启php-fpm服务。然后,通过url方式访问,ok了。

在问题解决了之后,看了备份的文件如nginx.conf.default以及php-fpm.conf.default。nginx和php-fpm服务的默认用户是nobody。而两者之间的通过端口转发的。即默认情况下,nginx接到php文件的请求后,把其转发给9000端口。而这个端口正是php-fpm的默认端口。由php-fpm来处理。因此,我认为生成文件的权限应该是执行php-fpm这个服务的用户权限来决定。而且刚开始,nobody用户负责处理。这个用户根本没有生成文件的权限。所以,才不会生成文件。后来,修改成nginx用户。就可以了。

因此,我把nginx.conf修改成

#user nginx nginx;
user  nobody;

php-fpm.conf不变。然后,重启服务。再通过url方式访问。真的可以了。

感谢: 不要太过依赖网上的资料。很多的资料分享者,其实验环境跟我们的多少有点出入。其次,遇到问题懂得如何去解决,去验证。