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