La directiva de ubicación dentro del bloque de servidor NGINX permite enrutar la solicitud a la ubicación correcta dentro del sistema de archivos. La directiva se utiliza para indicarle a NGINX dónde buscar un recurso al incluir archivos y carpetas mientras se compara un bloque de ubicación con una URL. En este tutorial, analizaremos en detalle las directivas de ubicación de NGINX.
Requisito previo
- Ya has instalado NGINX siguiendo nuestro tutorial desde aquí .
Sintaxis de la directiva de ubicación de NGINX
El bloque de ubicación de NGINX se puede colocar dentro de un bloque de servidor o dentro de otro bloque de ubicación con algunas restricciones. La sintaxis para construir un bloque de ubicación es:
location [modifier] [URI] { ... ...}
El modificador en el bloque de ubicación es opcional. Tener un modificador en el bloque de ubicación permitirá que NGINX trate una URL de manera diferente. Algunos de los modificadores más comunes son:
- ninguno : si no hay modificadores presentes en un bloque de ubicación, entonces el URI solicitado se comparará con el comienzo del URI solicitado.
- = : El signo igual se utiliza para hacer coincidir exactamente un bloque de ubicación con una URI solicitada.
- ~ : El signo tilde se utiliza para que una expresión regular que distinga entre mayúsculas y minúsculas coincida con una URI solicitada.
- ~* : La tilde seguida del signo de asterisco se utiliza para que una expresión regular coincida sin distinguir entre mayúsculas y minúsculas con una URI solicitada.
- ^~ : El signo de intercalación seguido del signo tilde se utiliza para realizar la comparación de la expresión no regular más larga con la URI solicitada. Si la URI solicitada coincide con un bloque de ubicación, no se realizará ninguna otra comparación.
Cómo NGINX elige un bloque de ubicación
Una ubicación se puede definir mediante una cadena de prefijo o mediante una expresión regular. Las expresiones regulares que no distinguen entre mayúsculas y minúsculas se especifican con el modificador “ ~* ” precedente y, para una expresión regular que no distingue entre mayúsculas y minúsculas, se utiliza el modificador “ ~ ”. Para encontrar una coincidencia de ubicación para un URI, NGINX primero escanea las ubicaciones que se definen mediante las cadenas de prefijo (sin expresión regular). A continuación, se verifica la ubicación con expresiones regulares en el orden de su declaración en el archivo de configuración. NGINX ejecutará los siguientes pasos para seleccionar un bloque de ubicación contra un URI solicitado.
- NGINX comienza buscando una coincidencia exacta especificada
location = /some/path/y, si se encuentra una coincidencia, este bloque se sirve de inmediato. - Si no existen bloques de ubicación exacta, NGINX procede a hacer coincidir los prefijos no exactos más largos y, si encuentra una coincidencia donde se ha utilizado el modificador ^~, NGINX dejará de buscar y se seleccionará este bloque de ubicación para atender la solicitud.
- Si la ubicación del prefijo más largo coincidente no contiene el modificador ^~, la coincidencia se almacena temporalmente y se continúa con los siguientes pasos.
- NGINX ahora cambia la búsqueda al bloque de ubicación que contiene los modificadores ~ y ~* y selecciona el primer bloque de ubicación que coincide con el URI de la solicitud y se selecciona inmediatamente para atender la solicitud.
- Si en el paso anterior no se encuentran ubicaciones que puedan coincidir con el URI solicitado, se utiliza la ubicación del prefijo almacenado previamente para atender la solicitud.
Ejemplos de bloques de ubicación de NGINX
Enumeremos algunos ejemplos de bloques de ubicación NGINX que utilizan modificadores y URI.
1. Ubicación de NGINX que coincide con todas las solicitudes
En el siguiente ejemplo, el prefijo location / coincidirá con todas las solicitudes, pero se utilizará como último recurso si no se encuentran coincidencias.
location / { ...}
2. NGINX coincide con la URL exacta
NGINX siempre intenta hacer coincidir primero la ubicación del prefijo más específico. Por lo tanto, el signo igual en el siguiente bloque de ubicación fuerza una coincidencia exacta con la ruta solicitada y luego deja de buscar más coincidencias.
location = /images { ...}
El bloque de ubicación anterior coincidirá con la URL https://domain.com/images, pero la URL https://domain.com/images/index.htmlno https://domain.com/images/coincidirá.
3. Bloque de ubicación NGINX para un directorio
El siguiente bloque de ubicación coincidirá con cualquier solicitud que comience con /images/ pero continuará con la búsqueda de un bloque más específico para la URI solicitada. Por lo tanto, se seleccionará el bloque de ubicación si NGINX no encuentra ninguna coincidencia más específica.
location /images/ { ... ...}
4. Ejemplo de expresión regular de ubicación de NGINX
El modificador ^~ en el siguiente bloque de ubicación da como resultado una coincidencia de expresión regular que distingue entre mayúsculas y minúsculas. Por lo tanto, se buscará la URL /images o /images/logo.png, pero la búsqueda se detendrá tan pronto como se encuentre una coincidencia.
location ^~ /images { ... ...}
5. Bloque de ubicación NGINX para tipos de archivos de imagen/css/js
El modificador ~* en el siguiente bloque de ubicación coincide con cualquier solicitud (sin distinguir entre mayúsculas y minúsculas) que termine en png, ico, gif, jpg, jpeg, css o js. Sin embargo, cualquier solicitud a la /images/carpeta será atendida por el bloque de ubicación anterior.
location ~* .(png|ico|gif|jpg|jpeg|css|js)$ { ... ...}
6. Coincidencia de expresiones regulares de ubicación de NGINX que distinguen entre mayúsculas y minúsculas
El modificador ~ en el siguiente bloque de ubicación genera una coincidencia de expresión regular que distingue entre mayúsculas y minúsculas, pero no detiene la búsqueda de una coincidencia mejor.
location ~ /images { ... ...}
7. Ejemplo de coincidencia sin distinción entre mayúsculas y minúsculas en expresiones regulares de ubicación de NGINX
El modificador ~* en el siguiente bloque de ubicación da como resultado una coincidencia de expresión regular que no distingue entre mayúsculas y minúsculas, pero la búsqueda no se detiene aquí para encontrar una mejor coincidencia.
location ~* /images { ... ...}
Resumen
Comprender la directiva de ubicación de NGINX es esencial para rastrear los puntos finales de la URI solicitada en el sistema de archivos. Los modificadores, los pasos para seleccionar el bloque de ubicación y algunos ejemplos que se analizan en este artículo lo ayudarán a comenzar a usar bloques de ubicación en NGINX fácilmente.