好的,抱歉,最近我问了一些关于 nginx 的问题,这让我很困惑。
我已经使用 fastcgi_php 启用了 PHP,并且它工作正常,但是,当我访问 PHP 文件时,例如
(适用于var/www/domain.com/www/info.php
)
其中包括,phpinfo()
如果我访问一个普通文件,nginx 会抛出 404 错误,例如
看起来不错......为什么 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;
}
答案1
首先确保已经安装了 php-cgi apt-get install php5-cgi
。接下来为 fastCGI PHP 创建一个启动脚本。
/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 身份运行,sudo
如果在 Ubuntu 中则使用 root 身份运行)
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 文件是否正确显示。
否则,请发布域错误日志和访问日志的输出。
答案2
你从根本上误解了 PHP 如何与 Nginx 协同工作。你认为 Apache == Nginx 的假设是错误的。Nginx 确实不是将 PHP 嵌入其自身,因此如果你尝试访问 PHP 文件,那么 PHP 会抛出 404 错误,并且不是Nginx。
遗憾的是,您隐藏了您的 PHP 配置,include /etc/nginx/fastcgi_php;
所以我实际上无法告诉您是否正确配置了 Nginx,所以请提供您的完整配置。
同时,您可以通过检查返回的标头并检查是否有 来验证 PHP 是否确实抛出了 404。X-Powered-By: PHP/5.3.8
如果存在,则需要验证您是否通过 SCRIPT_FILENAME fastcgi_param 向 PHP 发送了正确的文件路径。如果该路径正确,则 PHP 无法读取文件,因为权限不正确,这可能是对文件本身的读取访问权限,也可能是对任何父目录的执行访问权限。