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/09 01:47] – [Location con expresiones regulares y proxy_pass con URL] busindre | guia_rapida_de_location_y_modificadores_en_nginx [2021/05/11 00:08] (current) – busindre | ||
---|---|---|---|
Line 3: | Line 3: | ||
==== Modificadores ==== | ==== Modificadores ==== | ||
+ | **Prioridad** | ||
- | **=** 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 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. | ||
< | < | ||
< | < | ||
- | **^~** No permite expresiones regulares. Actúa como un prefijo, si este location | + | <code bash> |
+ | # Query GET /cp/abc | ||
+ | location ~ ^cp/abc{} | ||
+ | location | ||
+ | location ^~ /cp/abc {} | ||
+ | location = /cp/abc {} < | ||
- | <code bash> | + | **^~** No permite expresiones regulares. Actúa como un prefijo, de haber varias location, la que encaje |
- | A partir de estos dos modificadores (= y ~^), la siguientes locations serán seleccionadas según tengan la mayor coincidencia (sin importar el orden). | + | <code bash> |
+ | # Query GET /cp/abc | ||
+ | location ^~ /cp/ab {} | ||
+ | location ~ ^/cp/abc {} # NO será seleccionada porque es una regex y NO tiene prioridad frente al uso de ^~. | ||
+ | location | ||
- | NOTA: Es el método recomendado cuando no se usan expresiones regulares. | + | NOTA: Es el método recomendado |
- | **(ninguno)**: | + | **(ninguno)**: |
- | < | + | No puede haber dos location |
+ | <code bash> | ||
+ | # Query GET /cp/abc | ||
+ | location ~/cp/ab {} < | ||
+ | location / | ||
+ | </ | ||
- | **~** (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. | + | |
+ | 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. SÍ importa el orden ya que el primero en coincidir será el usado. | ||
< | < | ||
- | **~*** (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. | + | **~*** (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. |
- | < | + | < |
< | < | ||
< | < | ||
+ | ==== 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.1620517649.txt.gz · Last modified: 2021/05/09 01:47 by busindre