Nginx + Php5-fpm无法呈现php文件


8

我花了好几个小时弄清楚如何安装Nginx + Ruby企业版+ 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

Answers:


10

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

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

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;
    }
}

我不确定,但这可能是问题所在
伊曼纽尔(Emmanuel)

我最终重新构建了VPS,并使用其他教程再次尝试,现在一切正常。:)
Emmanuel

这对我有用,我使用unix套接字作为fastcgi_pass参数
Sean

1

如果您看一下标头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脚本中有错误,并且显示错误已关闭。这将导致空白页和错误日志中的条目,因此请在其中查找并查看是否未填满。


啊,是的!!我正在用Google Chrome浏览器查看页面,这只是给我一个404错误,但是我刚刚在firefox中查看了它,它只是一个空白页面。php脚本中没有错误。实际上,我刚从中取出所有php,它的唯一内容是h1标签
Emmanuel

我已经用test.php文件的http标头更新了我的原始帖子
Emmanuel

您绝对可以确定您的脚本位于/ var / www / eman /中,并且路径和文件可以被PHP进程读取和执行吗?
Martin Fjordvald 2010年

是的,它们的脚本绝对在/ var / www / eman /中,而test.php文件与index.html位于同一目录中,这很好用。我应该检查些什么,以确保它们在PHP流程中可读并可执行?对此我不确定?
伊曼纽尔

好了,您可以通过spawn-fcgi或php-fpm以某种方式生成PHP,用于生成的配置文件或命令应包含该进程的用户,之后,您必须检查该用户的linux权限。
Martin Fjordvald 2010年

0

几个想法:

   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


好的,我已经编辑了conf文件,但没有运气...
Emmanuel 2010年

该URL为:eman.id.au/test.php,eman.id.au本身在index.html上可以正常工作
Emmanuel 2010年

缓存是不正确的,Nginx不会缓存任何您没有明确告知的内容。它不像Apache,但是,更改配置文件需要重新加载配置文件。此外,您的浏览器还将缓存请求,因此这可能会使您感到困惑。
马丁·峡湾
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.