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:30] – 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 9: | Line 23: | ||
< | < | ||
- | < | + | < |
# Query GET /cp/abc | # Query GET /cp/abc | ||
location ~ ^cp/abc{} | location ~ ^cp/abc{} | ||
location ^~ /cp {} | location ^~ /cp {} | ||
location ^~ /cp/abc {} | location ^~ /cp/abc {} | ||
- | location = /cp/abc {} < | + | location = /cp/abc {} < |
**^~** No permite expresiones regulares. Actúa como un prefijo, de haber varias location, la que encaje con el prefijo más largo es la location elegida. Por lo tanto NO es importante el orden de este tipo de expresiones regulares. | **^~** No permite expresiones regulares. Actúa como un prefijo, de haber varias location, la que encaje con el prefijo más largo es la location elegida. Por lo tanto NO es importante el orden de este tipo de expresiones regulares. | ||
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 ^~ /cp/abc {} < |
- | 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 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. | ||
- | **~** (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.1620675015.txt.gz · Last modified: 2021/05/10 21:30 by busindre