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

관련 정보