Tentando não usar 'if' no NginX, mas como?

1

Eu li que if é ruim e não deve ser usado na configuração do NginX. Mas como posso reescrever meu código para não usar o if? O que eu quero fazer é: NginX deve chamar Redis ao invés de php se houver um pedido especial "foobar.php" E um argumento especial chamado "magicargument". Quando redis falhar, o NginX proxy_passes para o PHP. O trabalho é, mas só quando eu uso se for!

Aqui está a configuração

    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;
    }
    
por Lumpy 27.07.2016 / 17:17

1 resposta

0

Se você tiver controle sobre o aplicativo redis, poderá verificar magicargument / outros argumentos lá e usar apenas um bloco location simples em sua configuração nginx sem as declarações if .

BTW. Sua instrução location corresponde a todas as URLs que terminam com foobar.php , por exemplo, http://www.example.com/nonexistingdirectory/foobar.php . Você pode querer ser mais específico, como location = /foobar.php , para processar apenas solicitações com foobar.php no URI raiz.

    
por 27.07.2016 / 18:43