Хорошо, извините за предыдущие, недавние вопросы, которые я задавал о nginx, это просто меня обманывает.
Я включил PHP с помощью fastcgi_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;
}
Вы в корне неправильно поняли, как 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
. Если он присутствует, вам необходимо убедиться, что вы отправляете PHP правильный путь к файлу через SCRIPT_FILENAME fastcgi_param. Если это верно, то PHP не может прочитать файл из-за неправильных разрешений, это может быть либо доступ для чтения к самому файлу, либо доступ для выполнения в любом из родительских каталогов.
Сначала убедитесь, что вы установили 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
Наконец, выполните следующие команды (все как root, если в Debian, или с sudo
если в Ubuntu)
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.
В противном случае опубликуйте вывод журнала ошибок домена и журнала доступа.