Nginx - Условный proxy_pass для PHP

Nginx - Условный proxy_pass для PHP

У меня есть конфигурация ниже, которая на данный момент работает только для статических файлов, но она слишком прожорлива для PHP-файлов.

Это новый фронтенд-сервер, на который мы постепенно переносим PHP-скрипты и контент.

Логика такова: если файл существует локально (в /var/www/test.com), то обслуживаем его. В противном случае отправляем на сервер 10.0.1.2 для обслуживания контента.

Для статического контента это работает нормально. (.html, .jpg, .txt и т.д.).

Однако для PHP эта конфигурация слишком прожорлива и попытается запустить любой файл .php, даже если файл не находится в локальной файловой системе.

Есть ли способ запустить это только в том случае, если файл найден в локальной файловой системе, а если нет, выполнить то же действие, что и со статическим содержимым, и отправить его на сервер 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;
    }
}

решение1

Итак, try_files не был разрешен как дубликат, но следующее работает...

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

Связанный контент