User Tools

Site Tools


guia_rapida_de_location_y_modificadores_en_nginx

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
guia_rapida_de_location_y_modificadores_en_nginx [2021/05/10 23:33] busindreguia_rapida_de_location_y_modificadores_en_nginx [2021/05/11 00:08] (current) busindre
Line 3: Line 3:
 ==== Modificadores ==== ==== Modificadores ====
  
-Prioridad+**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 "=" tienen siempre prioridad, es decir, da igual donde se definan, que de existir y coincidir con alguna query, la localización será la usada. Después se tienen las localizaciones por prefijo "^~", el cual tiene menos prioridad que la coincidencia exacta pero más que las regex, por lo tanto, da lo mismo donde se definan en el fichero de configuración. De haber varias se usará la que mejor encaje con el prefijo.  
 + 
 +Luego están las localizaciones que usan expresiones regulares "~" y "~*". La primera localización que coincida será elegida, aunque más adelante se encuentre otra más completa y que encaje mejor.  
 + 
 +Si no se usa modificador, se está usando una localización por prefijo similar a ^~, pero no tiene su misma prioridad frente a las regex. Es decir, de haber una regex por delante que coincida, la localización sin prefijo no será evaluada. Estos prefijos sin modificador, de no tener regex por encima pero sí una o varias localizaciones con ^~, pueden ser elegidas si el prefijo coincide de forma más completa que en localizaciones con ^~. Es decir, el no usar modificador hace uso de prefijo y no compite en prioridad con ^~, simplemente se usa siempre el prefijo que coincida en mayor medida.
  
   - Coincidencia exacta =.   - Coincidencia exacta =.
   - Coincidencia prefijo con prioridad ^~.   - Coincidencia prefijo con prioridad ^~.
   - Expresión regular (sensible a mayúsculas y no sensible a mayúsculas).   - Expresión regular (sensible a mayúsculas y no sensible a mayúsculas).
-  - Coincidencia prefijo “Ningún modificador” (No compite con ^~ en cuanto a prioridad si se usa la misma location). +  - 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 35: Line 42:
 **(ninguno)**: Actúa como un prefijo exactamente igual que "^~" y tiene la misma prioridad frente a "^~" pero NO frente a regex. Por lo tanto, SÍ es importante el orden frente a otras location que usen modificador regex. **(ninguno)**: Actúa como un prefijo exactamente igual que "^~" y tiene la misma prioridad frente a "^~" pero NO frente a regex. Por lo tanto, SÍ es importante el orden frente a otras location que usen modificador regex.
  
-Si hay dos location iguales basadas en prefijo, una sin modificador y otra con ^~, la primera será la utilizada. +No puede haber dos location iguales basadas en prefijo, una sin modificador y otra con ^~.
- +
-<code bash> +
-# Query GET /cp/abc +
-location /cp/ab {}   <---- Es seleccionada porque simplemente está por encima de la otra location por prefijo ^~. +
-location ^~/cp/abc{}  +
-</code>+
  
 <code bash> <code bash>
Line 62: Line 63:
 <code>location ~*^/cp { # cualquier cosa que empiece con /cp, /CP, /cP o /Cp }</code> <code>location ~*^/cp { # cualquier cosa que empiece con /cp, /CP, /cP o /Cp }</code>
 <code>location ~*/cp { # cualquier cosa que tenga /cp, /CP, /cP o /Cp en alguna parte de la URL, no necesariamente al principio. }</code> <code>location ~*/cp { # cualquier cosa que tenga /cp, /CP, /cP o /Cp en alguna parte de la URL, no necesariamente al principio. }</code>
- 
 ==== Modificadores en nested location ==== ==== Modificadores en nested location ====
  
Line 69: Line 69:
   - Coincidencia exacta =.   - Coincidencia exacta =.
   - Coincidencia prefijo con prioridad ^~.   - Coincidencia prefijo con prioridad ^~.
-  - Expresión regular (sensible a mayúsculas y no sensible a mayúsculas). +  - Expresión regular (sensible a mayúsculas y no sensible a mayúsculas): La primera en coincidir es la location usada
-  - Coincidencia prefijo "Ningún modificador" (Recordar que dada la misma location, No compite con ^~ en cuanto a prioridad).+  - Coincidencia prefijo "Ningún modificador".
  
 Cuando se anidan locations en nginx, se debe tener en cuenta que si el location raíz es una regex, sus location anidadas deben también usar modificadores de expresiones regulares. Si se anidan coincidencias exactas o de prefijo a una nested location con regex, estas nunca serán elegidas. Cuando se anidan locations en nginx, se debe tener en cuenta que si el location raíz es una regex, sus location anidadas deben también usar modificadores de expresiones regulares. Si se anidan coincidencias exactas o de prefijo a una nested location con regex, estas nunca serán elegidas.
guia_rapida_de_location_y_modificadores_en_nginx.1620682382.txt.gz · Last modified: 2021/05/10 23:33 by busindre