guia_rapida_de_location_y_modificadores_en_nginx
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
guia_rapida_de_location_y_modificadores_en_nginx [2021/05/10 21:44] – busindre | guia_rapida_de_location_y_modificadores_en_nginx [2021/05/11 00:08] (current) – busindre | ||
---|---|---|---|
Line 3: | Line 3: | ||
==== Modificadores ==== | ==== Modificadores ==== | ||
+ | **Prioridad** | ||
+ | |||
+ | El uso de modificadores y su prioridad en Nginx es algo confuso y esta pequeña guía intenta poder aclarar todos los casos posibles. | ||
+ | |||
+ | Las coincidencias exactas " | ||
+ | |||
+ | Luego están las localizaciones que usan expresiones regulares " | ||
+ | |||
+ | Si no se usa modificador, | ||
+ | |||
+ | - Coincidencia exacta =. | ||
+ | - Coincidencia prefijo con prioridad ^~. | ||
+ | - Expresión regular (sensible a mayúsculas y no sensible a mayúsculas). | ||
+ | - Coincidencia prefijo “Ningún modificador”. | ||
**=** 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. El orden de estas location NO importa. | **=** 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. El orden de estas location NO importa. | ||
Line 20: | Line 34: | ||
<code bash> | <code bash> | ||
# Query GET /cp/abc | # Query GET /cp/abc | ||
- | location ^~ /cp/{} | ||
location ^~ /cp/ab {} | location ^~ /cp/ab {} | ||
- | location ~ ^cp/ | + | location ~ ^/cp/abc {} # NO será seleccionada porque es una regex y NO tiene prioridad frente al uso de ^~. |
location ^~ /cp/abc {} <--- location seleccionada.</ | location ^~ /cp/abc {} <--- location seleccionada.</ | ||
- | NOTA: Es el método recomendado frente a usar " | + | NOTA: Es el método recomendado frente a usar " |
- | **(ninguno)**: | + | **(ninguno)**: |
+ | |||
+ | No puede haber dos location iguales | ||
<code bash> | <code bash> | ||
# Query GET /cp/abc | # Query GET /cp/abc | ||
- | location /cp/{} | + | location |
- | location /cp/ab {} | + | location / |
- | location ~ ^cp/abc{} # NO será seleccionada | + | |
- | location /cp/abc {} <--- Location seleccionada | + | |
- | location ^~/cp/abc {} | + | |
</ | </ | ||
- | A partir de estos tres modificadores (=, ~^ y ninguno), los siguientes modificadores refieren a expresiones regulares, siendo el primero en encajar el seleccionado. Por lo tanto SI importa el orden usado al usar regex. | ||
NOTA: Es preferible usar el método de prefijo ^~ ya que internamente tiene un mejor rendimiento. | NOTA: Es preferible usar el método de prefijo ^~ ya que internamente tiene un mejor rendimiento. | ||
- | **~** (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. | + | **~** (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. |
< | < | ||
- | **~*** (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. Al igual que el anterior modificador case sensitive, | + | **~*** (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. Al igual que el anterior modificador case sensitive, |
< | < | ||
< | < | ||
< | < | ||
+ | ==== Modificadores en nested location ==== | ||
+ | Recordemos la prioridad de los modificadores en Nginx. | ||
- | NOTA: Si se usan nested locations, la lógica a seguir | + | - Coincidencia exacta =. |
+ | - Coincidencia prefijo con prioridad ^~. | ||
+ | - Expresión regular (sensible a mayúsculas y no sensible a mayúsculas): La primera en coincidir | ||
+ | - Coincidencia prefijo " | ||
- | <code bash>location | + | Cuando se anidan locations en nginx, se debe tener en cuenta que si el location |
- | | + | |
- | location ~ ^/((be|ch|de|dk)/)?upload/quick/ { | + | <code bash> |
- | | + | # Query GET /cp/abc |
- | } | + | location ~ /cp { |
+ | ... | ||
+ | | ||
+ | | ||
+ | location ^~/cp/abc {} # Nunca será seleccionada | ||
+ | location ~/cp/abc {} <----- Sí (Debido a que es una regex). | ||
}</ | }</ | ||
- | < | + | En cambio con los modificadores de coincidencia exacta o mediante prefijo se puede combinar como se quiera. Dentro del nested location se usa la prioridad normal anteriormente vista. |
- | http://domain.com/de/upload/ ---> https://AAA</ | + | |
+ | < | ||
+ | location | ||
+ | ... | ||
+ | | ||
+ | location ~/cp/abcd {} # Query GET /cp/abcd | ||
+ | | ||
+ | }</ | ||
==== Location sin expresiones regulares y proxy_pass ==== | ==== Location sin expresiones regulares y proxy_pass ==== |
guia_rapida_de_location_y_modificadores_en_nginx.1620675853.txt.gz · Last modified: 2021/05/10 21:44 by busindre