User Tools

Site Tools


guia_rapida_de_location_y_modificadores_en_nginx

This is an old revision of the document!


Guía rápida de Nginx locations (Modificadores, prioridad y slash - proxy_pass)

Modificadores

= El bloque se considerará una coincidencia si la URI de la solicitud coincide exactamente con la ubicación indicada. Es lo primero que busca Nginx, no pueden repetirse y tienen prioridad sobre cualquier otra location, usen o no expresiones regulares.

location  = / {  # Solo se usa si coincide al 100%, en este caso "/" únicamente. }
location  = /img/ {  # Solo se usa si coincide al 100%, en este caso "/img/" únicamente. Si la query es /img/algo_más NO se usará. }

^~ No permite expresiones regulares. Actúa como un prefijo, si este location coincide, NO seguirá buscando más, por lo tanto es importante el ORDEN de este tipo de expresiones regulares.

location ^~ /img/ {  # Queries que comiencen con /img/ y deja de buscar, por ejemplo /img/dir1/blabla } 

A partir de estos dos modificadores (= y ~^), la siguientes locations serán seleccionadas según tengan la mayor coincidencia (sin importar el orden).

NOTA: Es el método recomendado cuando no se usan expresiones regulares.

(ninguno): La ubicación se interpreta como una coincidencia de prefijo. Esto significa que la ubicación dada se comparará con el principio del URI de la solicitud para determinar una coincidencia.

location /data {   # Cualquier query que comience por /data/ pero seguirá buscando si otra regex coincide de manera más exacta.}

~ (Modificador de expresión regular) La ubicación se interpretará como una coincidencia de expresión regular que distingue entre mayúsculas y minúsculas.

location ~^/cp { # Distingue entre mayúsculas y minúsculas }

~* (Modificador de expresión regular) La ubicación se interpretará como una coincidencia de expresión regular que no distingue entre mayúsculas y minúsculas.

location ~* .(png|gif|ico|jpg|jpeg)$ { # Queries que terminen con png, gif, ico, jpg o jpeg. Al no ser que la query tenga un /img/ y exista un "location ^~ /img/"  }
location ~*^/cp { # cualquier cosa que empiece con /cp, /CP, /cP o /Cp }
location ~*/cp { # cualquier cosa que tenga /cp, /CP, /cP o /Cp en alguna parte de la URL, no necesariamente al principio. }

NOTA: Si se usan nested locations, la lógica a seguir es la misma, la location que concuerde en mayor medida será la usada.

location ~ ^/((be|ch|de|dk)/)?upload/ {
   proxy_pass  https://AAA;
 
   location ~ ^/((be|ch|de|dk)/)?upload/quick/ { 
      proxy_pass  https://BBB;
   }
}
http://domain.com/de/upload/quick/ ---> https://BBB
http://domain.com/de/upload/ ---> https://AAA

Location sin expresiones regulares y proxy_pass

Ejemplos de comportamiento para location de Nginx que no usan regex, es decir modificador “ninguno” o “^~”. El modificador “=” en esta sección no tiene sentido ya que no permite usarse de manera flexible.

location ^~/cp { proxy_pass  http://192.168.178.25; }
 
http://XXX/cp/aaa ----> http://192.168.178.25/cp/aaaa
http://XXX/cp -------->  http://192.168.178.25/cp
http://XXX/cp/ ------->  http://192.168.178.25/cp/
location ^~/cp { proxy_pass  http://192.168.178.25/;  }
 
http://XXX/cp/aaa ---> http://192.168.178.25//aaa
http://XXX/cp/ ------> http://192.168.178.25//
http://XXX/cp -------> http://192.168.178.25/
location ^~/cp/ { proxy_pass  http://192.168.178.25/;  }
 
http://XXX/cp/aaa ---> http://192.168.178.25/aaa
http://XXX/cp/ ------> http://192.168.178.25/
http://XXX/cp -------> http://XXX/cp/ ----> http://192.168.178.25/
location ^~/cp/ { proxy_pass  http://192.168.178.25; }
 
http://XXX/cp/aaa ---> http://192.168.178.25/cp/aaa
http://XXX/cp/ ------> http://192.168.178.25/cp
http://XXX/cp ------->  http://XXX/cp/ --> http://192.168.178.25/cp

Location con expresiones regulares y proxy_pass

location ~ /c(p|a)/ {  proxy_pass  http://192.168.178.25; }
 
http://XXX/cp/aaa ---> http://192.168.178.25/cp/aaa
http://XXX/cp/ ------> http://192.168.178.25/cp/
http://XXX/cp -------> NOT FOUND
location ~ /c(p|a) {  proxy_pass  http://192.168.178.25; }
location ~ ^/cp/ {  proxy_pass  http://192.168.178.25$1; }
 
http://XXX/cp/aaa ---> http://192.168.178.25/cp/aaa
http://XXX/cp/ ------> http://192.168.178.25/cp/
http://XXX/cp -------> http://192.168.178.25/cp

Si se usan URLs en el proxypass, deben usarse $1, que tendrá el valor de la regex

location ~ ^/c(p|a) {  proxy_pass  http://192.168.178.25/$1/$1; }
location ~ ^/c(p|a)/ {  proxy_pass  http://192.168.178.25/$1/$1; }
 
http://XXX/cp/bbbb ----> http://192.168.178.25/p/p 
http://XXX/ca/bbb ----> http://192.168.178.25/a/a 
location ~ ^/cp/ {  proxy_pass  http://192.168.178.25/$1; }
 
http://XXX/cp/bbbb ----> http://192.168.178.25/
http://XXX/ca/bbb ----> http://192.168.178.25/
location ~ ^/cp/ {  proxy_pass  http://192.168.178.25/$1/hola; }
 
http://XXX/cp/bbbb ----> http://192.168.178.25/hola
http://XXX/ca/bbb ----> http://192.168.178.25/hola
guia_rapida_de_location_y_modificadores_en_nginx.1620513625.txt.gz · Last modified: 2021/05/09 00:40 by busindre