Problema de arquivo com NGinx e PHP-FPM em servidores separados

1

Eu fiz um pouco de pesquisa sobre a execução de NGinx e PHP com o FastCGI em servidores separados e o configurei com sucesso em máquinas virtuais de teste. Eu me deparei com o problema que esses artigos descrevem ...

... que é que, para que esta configuração funcione, os arquivos PHP precisam estar no mesmo diretório em ambos os servidores, mesmo que as máquinas que executam o operador php-fpm estejam realmente executando os scripts. Eu testei isso sozinho. se eu remover um arquivo 'test.php' na raiz do documento no servidor NGinx, ele lançará um 404 ou 403 mesmo que o arquivo ainda exista na máquina PHP-FPM.

Minha pergunta: não há maneira de contornar isso? Sei que usar um armazenamento central executando o NFS é uma solução, mas gostaria de evitar os problemas de desempenho associados a isso.

Se isso ajudar, aqui estão meus arquivos de configuração:

/etc/nginx/sites-enabled/test-app.conf

upstream test-app {
    server <php-fpm-server-ip>:9001;
}

server {
    listen 80;
    listen [::]:80;

    server_name test.app.com;
    root /var/www/html;
    index index.php index.html index.htm;

    location ~ \.php$ {
        try_files $uri $uri/ =404;
        fastcgi_pass test-app;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}
    
por Scott Crooks 19.12.2015 / 01:35

2 respostas

1

Se você realmente quiser fazer isso, remova-o do nginx em sua localização \ .php:

try_files $uri $uri/ =404;

Isso é o que faz com que ele verifique o sistema de arquivos antes de passar o pedido para o fcgi upstream. Verifique também se o processo fcgi tem o diretório raiz configurado corretamente para que ele não possa ler arquivos rpp aleatórios agora que o nginx não pode fazer a checagem de existência.

    
por 19.12.2015 / 09:58
0

Os arquivos php precisam existir nos servidores 'nginx server' e 'php-fpm' Caso contrário, o nginx retornará a página 404 não encontrada

Você precisa sincronizar todos os arquivos do servidor nginx local (o arquivo deve existir, mas pode ter 0 byte no conteúdo) e o servidor PHP de back-end (os scripts php reais)

Ou você pode compartilhar arquivos entre servidores usando o SSHFS, sendo o NFS outro. Você coloca o script php na pasta local (servidor php-fpm), então você monta esta pasta no servidor nginx. No nginx.conf, document root você aponta para a pasta montada É isso, não há necessidade de sincronizar arquivos

    
por 21.11.2018 / 09:10