Uso de “sub_filter” no bloco “IF” sob configuração nginx

1

Eu tenho o nginx como servidor reverse_proxy para vários aplicativos sendo executados em vários servidores de aplicativos. Eu quero induzir o script / html específico em conteúdo de resposta para definir URLs pré-registradas. Esses URLs podem pertencer a qualquer aplicativo por trás do nginx. Para isso eu estou usando sub_filter para todos os URLs e está funcionando bem. Mas quando eu tento colocar "sub_filter" no bloco "IF" agora está permitindo.

Eu preciso de algo como abaixo.

 resolver 8.8.8.8;
 proxy_pass http://www.example.com;
 proxy_set_header Accept-Encoding *;
 gunzip on;
if ( $induceScript = 1) {

                       sub_filter "</body>" "<div class='induced' <font color=red size=8>Induced Text </font></div></body>";
                       sub_filter_types *;
                       sub_filter_once off;

                    }

A seguinte mensagem de erro é exibida quando eu tento reiniciar o nginx.

nginx: [emerg] "sub_filter" directive is not allowed here in /etc/openresty/openresty.conf

A partir disso, se eu entendi corretamente "IF" directiva não permitindo "sub_fiter" dentro dela. Existe alguma razão específica para isso? Também fornecer maneira correta / alternativa para resolver isso.

    
por Siva Kumar 04.05.2016 / 11:47

1 resposta

0

O Nginx não permite o sub_filter em if in location level de acordo com a documentação que você precisa para "subir" um nível

location /mylocation {
            error_page 418 = @sub_location;
            recursive_error_pages on;
            if ($induceScript = 1) {
            return 418;
            }
         }
location @sub_location {
            sub_filter "</body>" "<div class='induced' <font color=red size=8>Induced Text </font></div></body>";
            sub_filter_types *;
            sub_filter_once off;
            proxy_pass http://www.example.com;
            proxy_set_header Accept-Encoding *;
            #add any other config you need here
         }

Isso faz a verificação de $induceScript = 1 , se for verdade, ele retorna um erro 418 , que é então passado para a localização @sub_location que tem as diretivas sub_filter agora no nível da localização

    
por 04.05.2016 / 12:24

Tags