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

相关内容