我有下面的配置,目前似乎只适用于静态文件,但对于 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;
}
}