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
