¿Cómo puedo tener la misma regla para dos ubicaciones en la configuración de NGINX?
He probado lo siguiente
server {
location /first/location/ | /second/location/ {
..
..
}
}
pero nginx reload arrojó este error:
nginx: [emerg] invalid number of arguments in "location" directive**
nginx
nginx-location
user1661010
fuente
fuente
nginx/1.13.2
proxy_pass
trabajar, vea esta respuesta: stackoverflow.com/a/46625656/1246870Otra opción es repetir las reglas en dos ubicaciones de prefijos utilizando un archivo incluido. Dado que las ubicaciones de los prefijos son independientes de la posición en la configuración, su uso puede ahorrar cierta confusión al agregar otras ubicaciones de expresiones regulares más adelante. Evitar las ubicaciones de expresiones regulares cuando pueda ayudará a que su configuración escale sin problemas.
Aquí hay una muestra de shared.conf:
fuente
shared.conf
ejemplo y ubicación?Tanto la expresión regular como los archivos incluidos son buenos métodos, y los uso con frecuencia. Pero otra alternativa es utilizar una "ubicación con nombre", que es un enfoque útil en muchas situaciones, especialmente en las más complicadas. La página oficial "If is Evil" muestra esencialmente lo siguiente como una buena manera de hacer las cosas:
Hay ventajas y desventajas de estos diversos enfoques. Una gran ventaja de una expresión regular es que puedes capturar partes de la partida y usarlas para modificar la respuesta. Por supuesto, generalmente puede lograr resultados similares con los otros enfoques configurando una variable en el bloque original o utilizando
map
. La desventaja del enfoque de expresiones regulares es que puede volverse difícil de manejar si desea hacer coincidir una variedad de ubicaciones, además la baja precedencia de una expresión regular podría no coincidir con la forma en que desea hacer coincidir las ubicaciones, sin mencionar que aparentemente hay impactos en el rendimiento de expresiones regulares en algunos casos.La principal ventaja de incluir archivos (por lo que puedo decir) es que es un poco más flexible sobre exactamente lo que puede incluir: no tiene que ser un bloque de ubicación completo, por ejemplo. Pero también es subjetivamente un poco más complicado que las ubicaciones con nombre.
También tenga en cuenta que existe una solución relacionada que puede usar en situaciones similares: ubicaciones anidadas. La idea es que comience con una ubicación muy general, aplique alguna configuración común a varias de las posibles coincidencias y luego tenga ubicaciones anidadas separadas para los diferentes tipos de rutas que desea hacer coincidir. Por ejemplo, podría ser útil hacer algo como esto:
fuente
Este es un enfoque corto, pero eficiente y probado:
location ~ (patternOne|patternTwo){ #rules etc. }
Por lo tanto, uno puede tener fácilmente múltiples patrones con una sintaxis de tubería simple que apunta al mismo bloque de ubicación / reglas.
fuente