This is an old revision of the document!
Table of Contents
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 sin URL
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 con expresiones regulares y proxy_pass con URL
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; } 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
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 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/|/ca/) { proxy_pass http://192.168.178.25/dir1/dir2$1; } http://XXX/cp/AAA/BBB/CCC ---> http://192.168.178.25/dir1/dir2/cp/ http://XXX/ca/AAA/BBB/CCC ---> http://192.168.178.25/dir1/dir2/ca/