当访问PHP文件时,nginx会抛出404错误

对了,我刚刚问过关于nginx的最近几个问题,这只是我的头脑。

我已经使用fastcgi_php启用PHP,但是,当我访问一个PHP文件时,它工作得很好,例如

http://domain.com/info.php

(适用于var/www/domain.com/www/info.php

其中包括phpinfo()和nginx抛出404错误…如果我访问一个正常的文件,例如

http://domain.com/index.html

这似乎很好…怎么nginx不会处理PHP文件?

这是etc/nginx/sites-enabled/domain.com

 server { listen 80; server_name domain.com *.domain.com; access_log /var/www/domain.com/logs/nginx_access.log; error_log /var/www/domain.com/logs/nginx_error.log; root /var/www/domain.com/www/; location / { index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } # Enable PHP include /etc/nginx/fastcgi_php; } 

我不知道该怎么做…

编辑:

我的/etc/nginx/fastcgi_php

 location ~ \.php$ { fastcgi_pass unix:/var/run/php-fastcgi/php.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } 

首先确保你已经安装了php-cgi apt-get install php5-cgi 。 接下来为fastCGI PHP创build一个启动脚本。

使用以下内容创build文件/etc/init.d/fastcgi-php

 #!/bin/bash BIND_DIR=/var/run/php-fastcgi BIND="$BIND_DIR/php.sock" USER=www-data PHP_FCGI_CHILDREN=8 PHP_FCGI_MAX_REQUESTS=1000 PHP_CGI=/usr/bin/php-cgi PHP_CGI_NAME=`basename $PHP_CGI` PHP_CGI_ARGS="- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND" RETVAL=0 start() { echo -n "Starting PHP FastCGI: " mkdir $BIND_DIR chown -R $USER $BIND_DIR start-stop-daemon --quiet --start --background --chuid "$USER" --exec /usr/bin/env -- $PHP_CGI_ARGS RETVAL=$? echo "$PHP_CGI_NAME." } stop() { echo -n "Stopping PHP FastCGI: " killall -q -w -u $USER $PHP_CGI RETVAL=$? rm -rf $BIND_DIR echo "$PHP_CGI_NAME." } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: php-fastcgi {start|stop|restart}" exit 1 ;; esac exit $RETVAL 

最后运行以下命令(如果在Debian中,则全为root,如果在Ubuntu中则为sudo

 chmod 755 /etc/init.d/fastcgi-php update-rc.d fastcgi-php defaults /etc/init.d/fastcgi-php start 

 /etc/init.d/nginx reload 

现在检查info.php文件是否正确显示。

否则,请发布域错误日志和访问日志的输出。

您从根本上误解了PHP如何与Nginx合作。 你假设Apache == Nginx是不正确的。 Nginx并没有将PHPembedded到自己的内部,所以如果你尝试访问一个PHP文件,那么PHP就会抛出404而不是 Nginx。

可悲的是你已经隐藏你的PHPconfigurationinclude /etc/nginx/fastcgi_php; 所以我实际上不能告诉你是否正确configuration了Nginx,所以请提供完整的configuration。

同时,您可以通过检查返回的头文件并检查是否有X-Powered-By: PHP/5.3.8来validationPHP实际上正在抛出404。 如果存在,则需要通过SCRIPT_FILENAME fastcgi_paramvalidation是否正在向PHP发送正确的文件path。 如果这是正确的,那么由于不正确的权限,PHP不能读取文件,这可以是对文件本身的读取访问,或者对任何父目录执行访问。