Nginx - proxy_pass condicional para PHP

Nginx - proxy_pass condicional para PHP

Eu tenho a configuração abaixo que parece funcionar apenas para arquivos estáticos no momento, mas é muito gananciosa para arquivos PHP.

Este é um novo servidor frontend para o qual estamos migrando lentamente scripts e conteúdo PHP.

A lógica é: se o arquivo existir localmente (em /var/www/test.com), sirva-o. Caso contrário, envie para o servidor 10.0.1.2 para servir o conteúdo.

Para conteúdo estático, isso funciona bem. (.html, .jpg, .txt etc.).

No entanto, para PHP, esta configuração é muito gananciosa e tentará executar qualquer arquivo .php, mesmo que o arquivo não esteja no sistema de arquivos local.

Existe uma maneira de fazer isso funcionar apenas se o arquivo for encontrado no sistema de arquivos local e, se não, executar a mesma ação do conteúdo estático e enviar para o servidor 10.0.1.2?

server {
    listen 80;

    server_name www.test.com;

    root /var/www/test.com;

    location / {
        try_files $uri @proxy;
    }

    location @proxy {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass https://10.0.1.2;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
}

Responder1

Portanto, try_files não foi permitido como duplicado, mas o seguinte funciona ...

server {
    listen 80;

    server_name www.test.com;

    root /var/www/test.com;

    location / {
        try_files $uri @proxy;
    }

    location @proxy {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass https://10.0.1.2;
    }

    location ~ \.php$ {
        error_page 404 = @proxy;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
}

informação relacionada