Configuración de reenvío de nginx
Secuencia sin prioridad:
(ubicación = ) gt; (ubicación ruta completa) gt; (ubicación ^~ ruta) gt (ubicación ~, ~* secuencia regular) gt; (ruta inicial de la parte de ubicación) gt; ( / )
El resultado coincidente anterior
De acuerdo con el método de escritura de ubicación anterior, se establece el siguiente ejemplo de coincidencia:
Por lo tanto, en el uso real, personalmente creo que hay al menos tres definiciones de reglas coincidentes, de la siguiente manera:
La función de reescritura es utilizar las variables globales proporcionadas por nginx o las variables establecidas por usted mismo. combinado con expresiones regulares y banderas para implementar reescritura de URL y redirecciones. la reescritura solo se puede colocar en el servidor {}, ubicación {}, if{}, y solo puede funcionar en la cadena después del nombre de dominio, excepto los parámetros pasados, como /a/we/index.php?id=1amp; =str solo se reescribe para /a/we/index.php. Reemplazo de expresiones regulares de reescritura de sintaxis [flag];
Si los nombres de dominio relativos o las cadenas de parámetros funcionan, puede usar la coincidencia de variables globales o usar el proxy inverso proxy_pass.
Muestra que las funciones de reescritura y ubicación son algo similares, y ambas pueden lograr saltos. La principal diferencia es que la reescritura cambia la ruta para obtener recursos dentro del mismo nombre de dominio, mientras que la ubicación controla el acceso o. invierte un tipo de ruta Proxy, puede pasar proxy_pass a otras máquinas. En muchos casos, la reescritura también se escribirá en la ubicación y su orden de ejecución es:
Si se reescribe el URI en uno de los pasos, 1-3 se ejecutará nuevamente en un bucle hasta que el URI real Si se encuentra el archivo; el bucle excede 10 veces, se devolverá un error 500 de error interno del servidor.
Debido a que 301 y 302 no pueden simplemente devolver códigos de estado, también deben tener URL redirigidas. Es por eso que el comando return no puede devolver 301 y 302. La diferencia entre último y descanso aquí es un poco difícil de entender:
if instrucción de juicio
La sintaxis es if(condition){...} para juzgar la condición dada.
Si es verdadero, se ejecutará el comando de reescritura entre llaves. La condición if (condición) puede ser cualquiera de las siguientes:
-f y !-f se utilizan para determinar si el archivo existe
-d y !-d se usan para determinar si existe un directorio
-e y !-e se usan para determinar si existe un archivo o directorio
- x y !-x se utilizan para determinar si existe un archivo o directorio
Si el archivo es ejecutable
Por ejemplo:
Las siguientes son variables globales que se puede utilizar para juicio if
Ejemplo: http://localhost:88/test1/test2 /test.php
$host: localhost
$server_port : 88
$request_uri: http://localhost:88/test1/test2/test php
$document_uri: /test1/test2/test.php
$document_root: /var/www/html
$request_filename: /var/www/ html/test1/test2/test.php
El contenido que coincide entre paréntesis () se puede hacer referencia más adelante mediante $1, y $2 representa el contenido del segundo (). Lo que resulta confuso en las expresiones regulares es \ escapar de los caracteres especiales.
Ejemplo 1:
Para una solicitud en el formato /images/ef/uh7b3/test.png, reescríbala en /data?file=test.png, para que coincida con el ubicación / datos, primero verifique si el archivo /data/images/test.png existe. Si existe, responda normalmente. Si no existe, reescriba tryfiles en la nueva ubicación image404 y devuelva directamente el código de estado 404.
Ejemplo 2:
Para una solicitud de archivo en el formato /images/bla_500x400.jpg, reescríbalo en /resizer/bla.jpg?width=500amp height=400; dirección, y continuaré intentando hacer coincidir la ubicación.