Я читал это если является злом и не должен использоваться в конфигурации NginX. Но как я могу переписать свой код, чтобы не использовать if? Я хочу сделать следующее: NginX должен вызывать Redis вместо php, если есть специальный запрос «foobar.php» И специальный аргумент под названием «magicargument». Когда 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;
}
Если у вас есть контроль над приложением Redis, вы можете проверить magicargument
/ другие аргументы и используйте только простой location
блок в вашей конфигурации nginx без if
заявления.
Кстати. Ваш location
оператор соответствует каждому URL-адресу, который заканчивается на foobar.php
, например http://www.example.com/nonexistingdirectory/foobar.php
. Вы можете быть более конкретными, например location = /foobar.php
обрабатывать только запросы с foobar.php
в корневом URI.