Estoy tratando de lograr algo como esto:
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
}
¿Cómo lo hacemos en nginx? ¿O hay una mejor manera de manejarlo?
Respuesta1
Primero, recuerda quesi es maloy evite poner nada excepto rewrite
o return
dentro if
; Se sugiere una solución alternativa para usar error_page
y return
cambiar la ubicación utilizada para procesar la solicitud.
Comoya respondido aquí, la forma de reutilizar la configuración de ubicación en nginx es moverla a un archivo separado y include
ese archivo en sus location
bloques.
La combinación de estas soluciones da como resultado:
/etc/nginx/validation_code.conf
# a lot of validation code here
configuración 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;
}
También puede considerar utilizar una ubicación con nombre para su código de validación en lugar de crear un archivo separado; sin embargo, necesitarás algunos trucos para cambiar a esa ubicación con nombre, por ejemplo, otro error_page
/ return
par o algo como
try_files /nonexistent @validation