Назад | Перейти на главную страницу

Пытаться не использовать if в NginX, но как?

Я читал это если является злом и не должен использоваться в конфигурации 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.