Назад | Перейти на главную страницу

При доступе к файлам PHP nginx выдает ошибку 404

Хорошо, извините за предыдущие, недавние вопросы, которые я задавал о nginx, это просто меня обманывает.

Я включил PHP с помощью fastcgi_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 работает с 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.

В противном случае опубликуйте вывод журнала ошибок домена и журнала доступа.