Cómo abrir el registro de reescritura de nginx
Este módulo requiere compatibilidad con PCRE. Al compilar nginx, debe especificar el directorio de origen de PCRE y el método de instalación de nginx.
La secuencia de ejecución de las instrucciones de reescritura de nginx es la siguiente:
1. Ejecute las instrucciones de reescritura en el bloque del servidor (el bloque aquí se refiere al área rodeada por {} después del servidor). palabra clave, otros bloques xx son similares)
2. Ejecutar coincidencia de posición
3 Ejecute las instrucciones de reescritura en las instrucciones de reescritura seleccionadas en la posición
If If. uno de los URI se reescribe en un determinado paso, se repetirá de 1 a 3 veces hasta que se encuentre un archivo real
Si el ciclo excede 10 veces, se devolverá un error interno del servidor 500
comando break
Sintaxis: break;
Predeterminado: Ninguno
Alcance: servidor, ubicación, si
Detener la ejecución el host virtual actual Conjunto de instrucciones de reescritura posterior
ejemplo de instrucción de interrupción:
if ($slow) {
limit_rate 10k;
break ;
romper;
if ($slow) {
limit_rate 10k; p>
}
if directiva p>
Sintaxis: if (condición){...}
Predeterminado: Ninguno
Alcance: servidor, ubicación
Juzga las condiciones dadas. Si es verdadero, se ejecutarán las instrucciones de reescritura encerradas entre llaves.
Si la condición puede ser cualquiera de las siguientes:
Nombre de la variable; si la variable es una cadena vacía o una cadena que comienza desde 0, es falsa;
Compare variables y cadenas, use =,! = para comparar variables y cadenas
Es una variable que coincide con la expresión regular ~, ~*, si la expresión regular contiene },;, entonces la expresión completa La fórmula debe estar entre "o '"
Para verificar si el archivo existe, use -f, ! -f Comprueba si el archivo existe
Utiliza -d, ! -d Comprueba si el directorio existe
Utiliza -e, ! -e comprueba si el archivo, directorio o enlace simbólico existe
Utilice -x, ! -x Comprueba si el archivo es ejecutable
if ejemplo de comando
if ($http_user_agent ~ MSIE) {
reescribe ^(. *)$ /msie/ $1 descanso;
}
if ($http_cookie ~* "id=([^;] )(?:;|$)") {
establecer $id $1;
}
if ($request_method = POST) {
devolver 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
devuelve 403;
}
Comando de retorno
Sintaxis: código de retorno;
URL del código de retorno;
URL de retorno;
Valor predeterminado: ninguno
Alcance: servidor, ubicación, si
Detiene el procesamiento y devuelve el código de estado especificado al cliente.
El código de estado no estándar 444 indica que la conexión se cerró y no se enviaron encabezados de respuesta al cliente.
A partir de la versión 0.8.42, return admite responder a redireccionamientos de URL (para 301, 302, 303 y 307) o respuestas de texto (para otros códigos de estado).
Puede contener variables para texto o redirección de URL
Directiva de reescritura
Sintaxis: reescribir reemplazo de expresiones regulares [bandera];
Valor predeterminado: Ninguno
Alcance: servidor, ubicación, si
Si el URI coincide con la expresión regular especificada, el URI se reescribirá como reemplazo.
Las reescrituras se realizarán en el orden en que aparecen en el archivo de configuración.
Si el reemplazo comienza con "http://" o "https://", el procesamiento no continuará y se devolverá una redirección al cliente.
flag puede ser uno de los siguientes parámetros
última parada de procesamiento de conjuntos de directivas de reescritura posteriores y luego busca nuevamente en el conjunto de directivas de reescritura el nuevo URI que se está reescribiendo actualmente.
break detiene el procesamiento de instrucciones reescritas posteriores y ya no las busca, pero puede ejecutar las declaraciones no reescritas restantes en la posición actual y las declaraciones no reescritas fuera de la posición.
redireccionamiento Si el reemplazo no comienza con http:// o https://, devuelva 302 Redireccionamiento temporal
permanente Devuelva 301 Redireccionamiento permanente
Final y complete La URL de redireccionamiento incluye tres partes: esquema de solicitud (http://, https://, etc.), solicitud server_name_in_redirect y port_in_redirect. Para decirlo sin rodeos, son las tres partes del nombre de dominio y el puerto del protocolo http.
ejemplo de reescritura
servidor {
...
reescritura ^(/download/. *)/media/(. * )/...*$ $1/mp3/$2.mp3 último;
reescribir ^(/download/. *)/audio/(. *)\...*$ $1/mp3/$2 .ra último;
return 403;
...
}
Si coloca estas anulaciones como a continuación " /descargar/ " ubicación, debes usar break en lugar de last. Usar last repetirá la coincidencia 10 veces y devolverá un error 500:
ubicación /descargar/ {
reescribir ^(/descargar / . *)/media/(. *)/....*$ $1/mp3/$2.mp3 break;
reescribir ^(/download/. *)/media/(. *) \ ....*)/audio/(. *)\...*$ $1/mp3/$2.ra break;
return 403;
}
Para la URL reescrita (reemplazo), que contiene los parámetros de solicitud de la solicitud original, después de la URL original, si no desea incluir los parámetros de solicitud originales, puede agregar un signo de interrogación en el reemplazo. Por ejemplo, agregamos un parámetro personalizado usuario=$1 y luego en ?, eliminamos el parámetro de solicitud original.
reescribir ^/users/(. *)$ /show?user=$1? last;
Si la expresión regular contiene "}" o ";", entonces toda la expresión expresión La fórmula debe estar entre comillas dobles o comillas simples.
Comando de registro de reescritura
Sintaxis: rewrite_log on|off;
Predeterminado: rewrite_log off;
Alcance: http, servidor, ubicación , if
Activa o desactiva el registro de procesamiento de reescritura a nivel de notificación. Imprima el registro de procesamiento de reescritura en el archivo de registro de errores.
Ejemplo de nginx activando el registro de reescritura
rewrite_log activado;
registros de error_log/aviso xxx.error.log;
1. Activar la reescritura
2. Ajustar el nivel del registro de errores Ajustar el nivel del registro de errores para notar
establecer comando
Sintaxis: establecer valor de variable;
Predeterminado: Ninguno
Alcance: servidor, ubicación, si
Defina una variable y asígnele un valor. El valor puede ser texto, una variable, o un valor mixto de texto y variables.
Directiva uninitialized_variable_warn (advertencia de variable no inicializada)
Sintaxis: uninitialized_variable_warn on | off;
Predeterminado: uninitialized_variable_warn on
Alcance.: http , servidor, ubicación, if
Controla si las variables de inicialización se envían al registro