nginx download de arquivos PHP em vez de executar

1

Estou tentando conseguir o seguinte. Eu tenho site principal no diretório raiz do domínio. Está funcionando bem. Ou seja, arquivos PHP são executados. Depois de algum tempo eu adicionei o diretório "auth" com autenticação HTTP básica. Em seguida, carreguei o programa PHP no diretório "auth", mas os arquivos PHP estão sendo baixados em vez de serem executados.

  • domain.name/test.php - > executando
  • domain.name/sub/file.php - > executando
  • domain.name/auth/protected.php - > download em vez de executar

Aqui está conf disponível nos sites

server {
    charset utf-8;

    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.php index.html index.htm index.nginx-debian.html;
    server_name xxx.com;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        # try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php?$args;
    }

    location ^~ /auth {
        auth_basic "Restricted Content";
        auth_basic_user_file /var/www/html/auth/.htpasswd;
    }

    location ^~ /protected {
        deny all;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

    location ~ /\.(ht|git|svn) {
        deny all;
    }
}

Atualmente, estou seguindo a solução, mas acredito que não seja o caminho certo.

    location ^~ /auth {
        auth_basic "Restricted Content";
        auth_basic_user_file /var/www/html/auth/.htpasswd;
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;

            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
    }

A solução a seguir não funciona

        location ^~ /auth {
                auth_basic "Restricted Content";
                auth_basic_user_file /var/www/html/auth/.htpasswd;
                try_files $uri @php-fpm;
        }

        location @php-fpm {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
    
por Andrey Andreevsky 03.05.2016 / 16:32

1 resposta

4

Tive o mesmo problema!

Encontrei a resposta aqui, link

Porque estamos adicionando ^ ~ estamos deixando para trás algumas outras configurações (não tenho certeza porque precisamos adicionar isso, mas foi a única maneira de fazê-lo realmente chamar a autenticação :()

include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web11.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;

Eu tentei várias combinações para ver o que era / não necessário e cada linha é necessária. Eu queria entender melhor essas coisas.

ATUALIZAÇÃO: 27 de julho de 2016:

Então fiz algumas leituras e finalmente entendi por que temos esse problema.

Em resumo, quando instalamos o FastCGI e o php-fpm, ele cria uma diretiva nos arquivos do servidor nginx (que depende da instalação do servidor).

Então, no meu eu tenho o seguinte ...

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
    #
    #       # With php7.0-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
    #       # With php7.0-fpm:
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;

Como você perceberá, essas diretivas estão no local e não nas configurações globais. Como queremos proteger uma pasta específica, essas diretivas não são herdadas. Portanto, precisamos declará-lo novamente.

Se quiséssemos seguir o princípio DRY ("Don't Repeat Yourself"), então declararíamos o PHP-fpm e o FastCGI nas configurações globais. Podemos fazer isso movendo-o para baixo (por exemplo, mas ele precisa estar fora da diretiva location). Aqui está um exemplo.

root /var/www/html;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;

Espero que isso ajude. Percebi o que precede lendo link

Isenção de responsabilidade: Não sou profissional, por isso, se você perceber que os erros são legais, é só me avisar e esperamos atualizar.

    
por 24.07.2016 / 11:26

Tags