我花了几个小时弄清楚如何安装 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