Estou tentando conseguir algo assim:
location /location1/{
if ($arg_api_key = a_valid_api_key) {
proxy_pass http://localhost:8080;
}
# else jump to location2
}
location /location2/{
# a lot of validation code here
}
Como fazemos isso no nginx? Ou existe uma maneira melhor de lidar com isso?
Responder1
Primeiro, lembre-se dissose é maue evite colocar qualquer coisa exceto rewrite
ou return
dentro if
; uma solução alternativa sugerida é usar error_page
e return
alterar o local usado para processar a solicitação.
Comojá respondi aqui, a maneira de reutilizar as configurações de localização no nginx é movê-las para um arquivo separado e include
esse arquivo em seus location
blocos.
A combinação dessas soluções resulta em:
/etc/nginx/validation_code.conf
# a lot of validation code here
configuração principal
location /location1/ {
error_page 418 = @proxy;
recursive_error_pages on;
if ($arg_api_key = a_valid_api_key) {
return 418;
}
include /etc/nginx/validation_code.conf;
}
location /location2/ {
include /etc/nginx/validation_code.conf;
}
location @proxy {
proxy_pass http://localhost:8080;
}
Você também pode pensar em usar um local nomeado para seu código de validação em vez de criar um arquivo separado; no entanto, você precisará de alguns truques para mudar para esse local nomeado - por exemplo, outro par error_page
/ return
ou algo parecido
try_files /nonexistent @validation