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;
}
}