Nginx + alias URI PHP-FPM e vários diretórios php

2

Estou tentando configurar o Nginx para hospedar vários aplicativos baseados em PHP em dois diretórios diferentes no mesmo domínio. O resultado que estou tentando chegar é:

link > aplicativo veiculado de /path/to/website

link > aplicativo veiculado de /path/to/php-app

Aqui está a configuração que tenho.

  • Tudo funciona (sendo recursos PHP e não PHP) quando eu clico no link .
  • No entanto, os scripts PHP não estão funcionando quando eu vou para o link . Eu recebo File Not Found (no entanto, o arquivo está em /path/to/php-app/index.php ).
  • Eu criei um arquivo /path/to/php-app/test.txt (algo que não é PHP) e, quando vou para o link , recebo o arquivo arquivo de texto conforme o esperado.

Alguém por favor pode esclarecer onde eu estou indo errado? Obrigado :)

server {
    listen       80;
    server_name  webserver.local;

    location / {
        root   /path/to/website;
        index  index.php;

        location ~ \.php$ {
            root           /path/to/website;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

    location ^~ /app {
        alias   /path/to/php-app;
        index  index.php;

        location ~ \.php$ {
            root           /path/to/php-app;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}
    
por cpjones44 01.10.2017 / 07:06

1 resposta

4

Seu bloco location ~ \.php$ aninhado não encontrará seus scripts PHP. O $document_root está definido como /path/to/php-app . E $fastcgi_script_name é o mesmo que $uri , que ainda inclui o prefixo /app .

A abordagem correta é usar $request_filename e remover sua falsa declaração root :

location ^~ /app {
    alias   /path/to/php-app;
    index  index.php;

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
    }
}

Sempre inclua fastcgi_params antes de qualquer instrução fastcgi_param para evitar que sejam sobrescritos silenciosamente pelo conteúdo do arquivo de inclusão. Consulte este documento para obter detalhes.

    
por 01.10.2017 / 13:52