Red de conocimiento informático - Programación de la red - ¿Cómo coincide la solicitud con el nombre del servidor configurado en nginx?

¿Cómo coincide la solicitud con el nombre del servidor configurado en nginx?

La directiva server_name en nginx se utiliza principalmente para configurar hosts virtuales basados ​​en nombres. El orden de coincidencia de la directiva server_name después de recibir la solicitud es: 1. Coincidencia precisa de server_name, por ejemplo:

servidor {

escucha 80;

nombre_servidor frady.info www.frady.info;

...

}

2. Cadena que comienza con * comodín:

servidor {

escucha 80;

nombre_servidor *.frady.info;

...

}

3. Cadena que termina con * comodín:

servidor {

escucha 80 ;

nombre_servidor www.*;

...

}

4. Expresión regular coincidente:

servidor. {

escuchar 80;

nombre_servidor ~^(?.+)\.frady\.info$;

..

}

nginx buscará coincidencias con el nombre del servidor en el orden de 1, 2, 3, 4. La búsqueda se detendrá solo si hay una coincidencia, por lo que usamos esto Al usar instrucciones, debe distinguir claramente su orden de coincidencia (similar a la instrucción de ubicación).

Hagamos uno complicado, para que pueda coincidir tanto con nombres de dominio genéricos como con algunos nombres de dominio que comienzan con blog

Ambos son regulares y tienen la misma prioridad. ¿Cuál coincidirá con precisión?

#Matches *.frady.info

server_name ~^(.+)?\.frady\.info$;

# Match blog*.frady.info

~^blog(.+)?\.frady\.info$;

La siguiente es una forma natural de escribir, pero en realidad es incorrecto porque* tendrá prioridad sobre las expresiones regulares, por lo que cualquier cosa escrita en expresiones regulares no coincidirá

#Matches *.frady.info

server_name *.frady.info;

# Match blog*.frady.info

~^blog(.+)?\.frady\.info$;

También puedes escribir algo como este

#Match blog*.frady.info

~*^blog(.+)?\.frady\.info$;

No hay problema al probar con el probador de expresiones regulares. Póngalo en nginx y luego descubrí que se informó un error.

Más tarde me di cuenta de que el nombre de dominio en realidad no distingue entre mayúsculas y minúsculas, por lo que nginx no necesita procesar esto. parte

Descripción oficial:

p>

1.nombre exacto

2.nombre comodín más largo que comienza con un asterisco, por ejemplo, “*.example.org”

3.nombre comodín más largo que termina con un asterisco, por ejemplo, “mail.*”

4.primera expresión regular coincidente (en orden de aparición en un archivo de configuración)