Como configurar o nginx para adicionar um parâmetro de consulta somente quando o uri solicitado é / e o parâmetro de consulta específico ainda não existe? [fechadas]

1

Suponha que o parâmetro de consulta no qual estou interessado é arg1=val1 . Eu gostaria que o nginx adicionasse o parâmetro de consulta somente quando o uri solicitado fosse / e o parâmetro de consulta arg1 ainda não existisse. O comportamento esperado é ilustrado abaixo:

solicitado:

/

esperado para ser passado para o back-end:

/?arg1=val1

solicitado:

/?arg2=val2

esperado para ser passado para o back-end:

/?arg1=val1&arg2=val2

solicitado:

/path1

esperado para ser passado ao backend (não adicione o parâmetro se o uri requisitado não for / ):

/path1

solicitado:

/?arg1=valx&arg2=val2

esperado para ser passado para back-end (se o parâmetro já existir, não mude seu valor):

/?arg1=valx&arg2=val2

O que eu tentei em nginx.conf é o seguinte:

location / {
    if ($args !~ ^(.*)(arg1=)(.*)$) {
        rewrite ^(/)$ /?arg1=val1 last;
    }

    ......
}

E isso não funciona como esperado.

Como devo configurar o nginx para alcançar o comportamento esperado?

    
por goodbyeera 03.08.2015 / 05:28

1 resposta

2

Para corresponder apenas a / use =. Experimente

location = / {
    if ($args = "") {
        set $args arg1=val1;
        # or rewrite / /?arg1=val1 last;
    }
    if ($args !~ "arg1=") {
        set $args $args&arg1=val1;
    }
}

Você pode obter uma saída de depuração mostrando como o nginx está lidando com suas diretivas colocando em seu servidor {} block:

error_log /var/log/nginx/error.log debug;
    
por 03.08.2015 / 09:47

Tags