forecho

把生命浪费在美好的事物上

解决Nginx无法识别PHP问题

2013年07月23日

这两天很蛋疼的在Linux下面配置LNMP环境。参考了比较多的资料,但是发现一个问题,就是安装好环境之后,Nginx无法识别PHP文件,HTML文件是没有问题的。

还要解决配置多个虚拟目录的问题。

后来就各种Google找资料,按照这篇文章的方法配置,还算比较成功。

这个可以成功的配置虚拟目录,但是还是无法识别PHP。

后来找到这篇文章,其中提到:Nginx 本身并没有PHP 解释器,所以,需要借助于 PHP 提供的 fastcgi,所以,需要运行 PHP 的 php-cgi 进程;

1
php-cgi -b 127.0.0.1:9000 # cmd 中运行 php-cgi,监听本地地址,9000端口;

我是比较头晕不知道自己是否安装了这个,但是发现自己Nginx配置目录下还是有fastcgi文件的。 我的9000端口法无监听?试了一下这个方法,无效。 其实这个地方监听是什么,你需要去看/etc/php5/fpm/pool.d/www.conf配置文件写的是什么,这个写成一致即可。 后来把:

1
2
3
4
5
6
7
8
9
10
11
12
13
location ~ \.php($|/) {
    set  $script     $uri;
    set  $path_info  "";
    if ($uri ~ "^(.+\.php)(/.+)") {
      set  $script     $1;
      set  $path_info  $2;
    }
    fastcgi_pass   127.0.0.1:9000;
    include        fastcgi_params;
    fastcgi_param  PATH_INFO                $path_info;
    fastcgi_param  SCRIPT_FILENAME          /usr/local/vhost/demo$script;
    fastcgi_param  SCRIPT_NAME              $script;
}

改成为:

1
2
3
4
5
6
7
location ~ \.php$ {
    root   /usr/local/vhost/demo;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

然后重启Nginx服务,访问你设置的server_name ,成功

补充一些参考文章: