实验环境: 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方式访问。真的可以了。
感谢: 不要太过依赖网上的资料。很多的资料分享者,其实验环境跟我们的多少有点出入。其次,遇到问题懂得如何去解决,去验证。
浙公网安备 33010602011771号