Nginx - PHP への条件付き proxy_pass

Nginx - PHP への条件付き proxy_pass

現時点では静的ファイルに対してのみ機能すると思われる以下の設定がありますが、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;
    }
}

関連情報