Nginx + Php5-fpm 无法渲染 php 文件

Nginx + Php5-fpm 无法渲染 php 文件

我花了几个小时弄清楚如何安装 Nginx + Ruby Enterprise Edition + PHP5-fpm 和 MYSQL,最后全部安装好了,一切似乎都启动正常了。

但由于某种原因,php 文件未被处理。

.html 文件工作正常,但当我尝试查看 .php 文件时,它似乎不存在,尽管它确实存在。有趣的是,当我尝试查看不存在的 .html 文件时,我会收到一条不错的 Nginx 404 消息,但当我查看 .php 文件时,它甚至没有给我这条消息。

因此,以我的新手理解,看起来要么是配置有问题,要么是 Nginx 和 PHP-fpm 无法相互通信。

我已经查看了许多其他 nginx 配置文件示例,并且我确信这方面没有问题。好吧……无论如何,以下是 conf 文件的相关部分:

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;

任何帮助是极大的赞赏。

编辑:以下是从测试 php 文件返回的标头”http://eman.id.au/test.php“:

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

答案1

我相信我今天遇到了完全相同的问题,nginx 确实将请求发送到 php-fpm(如标题所示)但你得到 404,即使文件存在并且根本没有(PHP /语法)错误,并且任何日志(ngins 或 php-fpm)中都没有显示任何错误。

您没有包含完整的 nginx 配置,但可能您没有在“服务器”部分中定义选项“root”(正确吗?)?您需要确保它指向正确的位置,并且它位于“服务器”部分内,而不是“位置”部分内 - 例如:

server {
    root /var/www/eman;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
        include fastcgi_params;
    }
}

答案2

如果你看一下标题http://eman.id.au/test.php响应为,则您会看到X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1。如果请求未传递给 PHP,则不会显示此信息。此外,如果 PHP 找不到传递给它的文件路径,它将回显错误No input file specified.

由于您的网站确实输出了 powered by 标头,并且没有错误,No input file specified.最可能的原因是您的 PHP 脚本中存在错误,并且已关闭显示错误。这会导致出现空白页,并在错误日志中出现条目,因此请查看那里,看看它是否没有填满。

答案3

一些想法:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

这需要额外的斜线吗

   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;

NGINX 也有一些奇怪的缓存功能,所以当你在浏览器中尝试 URL 时,在末尾添加 ?random=12391 以强制刷新。我曾为一个配置困惑了 30 分钟,结果发现它一直都在运行,但我被缓存绊倒了。

您可能还想更好地逃离您的位置(虽然这不会导致您遇到的问题)更好的做法是:

location ~ .php$

location ~ \.php$

.php$ 将匹配诸如 yourpagephp 之类的请求,而不仅仅是 yourpage.php

相关内容