我读过如果是邪恶的,不应该在 NginX 配置中使用。但是我该如何重写我的代码,以便不使用 if ?我想要做的是:如果有一个特殊请求“foobar.php”和一个名为“magicargument”的特殊参数,NginX 应该调用 Redis 而不是 php。当 redis 失败时,NginX proxy_passes 到 PHP。它可以工作,但只有当我使用 if 时!
这是配置
location ~ foobar.php$ {
default_type application/json;
error_page 404 = @redisfailed;
if ($args = "")
{
return 404;
}
if ($arg_magicargument = false)
{
return 404;
}
set $redis_key $args;
redis_pass 127.0.0.1:6379;
}
location @redisfailed
{
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
答案1
如果您可以控制 redis 应用程序,您可以检查magicargument
/那里的其他参数,并且location
在 nginx 配置中仅使用一个简单的块而不需要if
语句。
顺便说一句。您的location
语句匹配以 结尾的每个 URL foobar.php
,例如http://www.example.com/nonexistingdirectory/foobar.php
。您可能希望更具体,例如location = /foobar.php
仅处理foobar.php
根 URI 中的请求。