Ao acessar arquivos PHP, o nginx gera um erro 404

1

Certo, desculpe pelas perguntas recentes e recentes que eu fiz sobre o nginx, isso está apenas fazendo minha opinião.

Eu habilitei o PHP usando o fastcgi_php e ele funciona muito bem, no entanto, quando eu acesso a um arquivo PHP, por exemplo

http://domain.com/info.php

(que se aplica a var/www/domain.com/www/info.php )

O que inclui phpinfo() e nginx gera um erro 404 ... se eu acessar um arquivo normal, por exemplo

http://domain.com/index.html

Parece bem ... por que o nginx não processa os arquivos PHP?

Este é o 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;
}

Eu não tenho ideia do que fazer mais ...

EDITAR:

Meu /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;
}
    
por MacMac 30.09.2011 / 15:24

2 respostas

1

Primeiro, verifique se você instalou o php-cgi apt-get install php5-cgi . Em seguida, crie um script de inicialização para o fastCGI PHP.

Crie o arquivo /etc/init.d/fastcgi-php com o seguinte conteúdo:

#!/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

Finalmente, execute os seguintes comandos (todos como root se no Debian, ou com sudo se no Ubuntu)

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

e

/etc/init.d/nginx reload

Agora verifique se o arquivo info.php é exibido corretamente.

Caso contrário, poste a saída do log de erros e do log de acesso dos domínios.

    
por 30.09.2011 / 18:12
1

Você basicamente não entendeu como o PHP funciona com o Nginx. Sua suposição de que o Apache == Nginx está incorreto. O Nginx não incorpora o PHP dentro de si mesmo, então se você tentar acessar um arquivo PHP, então ele está lançando o 404 e não Nginx.

Infelizmente, você ocultou sua configuração do PHP com include /etc/nginx/fastcgi_php; , então não posso dizer se você configurou corretamente o Nginx, então forneça sua configuração completa.

Enquanto isso, você pode verificar se o PHP está realmente lançando o 404 verificando os cabeçalhos retornados e verificando se você tem X-Powered-By: PHP/5.3.8 . Se isso estiver presente, você precisa verificar se está enviando o caminho de arquivo correto para o PHP por meio do SCRIPT_FILENAME fastcgi_param. Se essa estiver correta, então o PHP não poderá ler o arquivo devido a permissões incorretas, isso pode ser o acesso de leitura no próprio arquivo ou o acesso de execução em qualquer um dos diretórios pai.

    
por 30.09.2011 / 15:53