Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 11719|Respuesta: 1

[Web] Un ejemplo ilustra la regla de reescritura en Nginx

[Copiar enlace]
Publicado en 5/12/2014 22:45:25 | | |
Uno. Coincidencia de expresión regular, donde:
* ~ es la coincidencia sensible a mayúsculas y minúsculas
* ~* es una coincidencia insensible a mayúsculas minúsculas
* !~ y !~* son desajustes sensibles a mayúsculas y minúsculas y insensibles, respectivamente
Dos. Coincidencia de archivo y directorio, donde:
* -f y !-f se utilizan para determinar si existe un archivo
* -d y !-d se utilizan para determinar si existe un directorio
* -e y !-e se utilizan para determinar si existe un archivo o directorio
* -x y !-x se utilizan para determinar si un archivo es ejecutable o no
3. El último parámetro de la instrucción de reescritura es la marca de bandera, que se marca con:
1.last es equivalente a la marca [L] en apache, que significa reescritura.
2. Pausa Una vez completada la coincidencia de esta regla, la coincidencia se cancelará y las reglas posteriores dejarán de coincidir.
3.redirect devuelve 302 redirección temporal, y la dirección del navegador mostrará la dirección URL tras el salto.
4.Permanent return 301 permanent redirection, la dirección del navegador mostrará la dirección URL tras el salto.


Usa last and break para implementar reescrituras de URI, y la barra de direcciones del navegador permanece sin cambios. Y hay una ligera diferencia entre ambos, usar el comando alias debe marcarse con último; Cuando usas proxy_pass directivas, necesitas usar la etiqueta de ruptura. Después de ejecutar la última etiqueta en esta regla de reescritura, estará en el servidor{......} El tag reinicia la solicitud, mientras que el break tag termina el combate una vez completado el partido por reglas.
Por ejemplo: si redirigimos una URL como /photo/123456 a /path/to/photo/12/1234/123456.png
reescribir "/foto/([0-9]{2})([0-9]{2})([0-9]{2})"/camino/a/foto/$1/$1$2/$1$2$3.png ;


Cuatro. Regla NginxRewrite


1. orden de ruptura
Entorno de uso: servidor, ubicación, si;
La directiva completa el conjunto de reglas actual y ya no gestiona la directiva de reescritura.


2. Si directiva
Entorno de uso: servidor, ubicación
Esta instrucción se utiliza para comprobar si se cumple una condición y, de ser así, ejecutar la sentencia dentro de los corchetes. El comando If no soporta anidamiento, ni soporta múltiples condiciones && y || Tratamiento.


3. Comando de retorno
sintaxis: returncode ;
Entorno de uso: servidor, ubicación, si;
Esta instrucción se utiliza para terminar la ejecución de la regla y devolver un código de estado al cliente.
Ejemplo: Si la URL visitada termina en ".sh" o ".bash", se devuelve un código de estado 403
Ubicación ~ .*\. (sh|golpe)?$
{
regreso 403;
}


4. Comando de reescritura
Sintaxis: bandera de reemplazo de rewriteegex
Entorno de uso: servidor, ubicación, si
Esta directiva redirige el URI según la expresión o modifica la cadena. Las instrucciones se ejecutan en el orden del archivo de configuración. Ten en cuenta que reescribir expresiones solo es válido para caminos relativos. Si quieres emparejar nombres de host, deberías usar las sentencias if, por ejemplo a continuación:
if( $host ~* www\.(. *) )
{
fija $host_sin_www $1;
reescritura ^(.*)$ http://$host_without_www$1permanent;
}


5. Comando Set
Sintaxis: valor de setvariable; Por defecto: ninguno; Entorno de uso: servidor, ubicación, si;
Esta directiva se utiliza para definir una variable y asignarle un valor. El valor de una variable puede ser texto, variable o unión de variables de texto.
Ejemplo: set$varname "hola mundo";


6.Uninitialized_variable_warn instrucciones
Sintaxis: uninitialized_variable_warnon|off
Entorno de uso: http, servidor, ubicación, si
Este comando se utiliza para activar y desactivar el mensaje de advertencia para variables no inicializadas, y el valor por defecto es Activado.




Cinco. Ejemplo de redacción de reglas de Nginx Rewrite
1. Cuando el archivo y directorio accedidos no existan, redirígete a un determinado archivo php
if( !-e $request_nombre de archivo )
{
reescribir ^/(.*)$ index.php último;
}


2. Intercambio de directorios /123456/xxxx ====> /xxxx?id=123456
reescribir ^/(\d+)/(.+)/ /$2?id=$1 último;


3. Si el cliente usa el navegador IE, redirige al directorio /ie
if( $http_user_agent ~ MSIE)
{
reescritura ^(.*)$ /ie/$1 interrupción;
}


4. Desactivar el acceso a múltiples directorios
ubicación ~ ^/(cron|plantillas)/
{
negarlo todo;
pausa;
}


5. Desactivar el acceso a archivos que comienzan por /data
Ubicación ~ ^/datos
{
negarlo todo;
}


6. Prohibir el acceso a archivos con nombres de sufijo .sh, .flv, .mp3
Ubicación ~ .*\. (sh|flv|mp3)$
{
regreso 403;
}


7. Establecer el tiempo de caché del navegador para ciertos tipos de archivos
Ubicación ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
expira en 30 días;
}
Ubicación ~ .*\. (js|css)$
{
expira 1h;
}


8. Establecer tiempos de caducidad para favicon.ico y robots.txt;
Aquí, la favicon.ico es de 99 días, la robots.txt de 7 días, y el registro de errores 404 no se registra
ubicación ~(favicon.ico) {
log_not_found fuera;
expira en 99d;
pausa;
}
ubicación ~(robots.txt) {
log_not_found fuera;
expira 7d;
pausa;
}


9. Establecer la hora de caducidad de un determinado documento; Esto es de 600 segundos y los registros de acceso no se registran
ubicación ^~ /html/scripts/loadhead_1.js {
access_log fuera;
root /opt/lampp/htdocs/web;
expira 600;
pausa;
}


10. Archivos anti-hotlink y tiempos de caducidad establecidos
Return412 aquí es un código de estado HTTP personalizado, que por defecto es 403, lo cual es conveniente para encontrar la solicitud de enlace directo correcta
"reescribir ^/; "Muestra una imagen de un anti-hotlink
"access_log fuera;" No se registran registros de acceso, lo que reduce el estrés
"Caduca 3D" 3 días de caché del navegador para todos los archivos


ubicación ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers ninguno bloqueado *.xx.com*.xx.net localhost 208.97.167.194;
si ($invalid_referer) {
reescritura ^/;
retorno 412;
pausa;
}
access_log fuera;
root /opt/lampp/htdocs/web;
expira en 3d;
pausa;
}


11. Permitir el acceso a IP fija al sitio web solo con contraseña


rootear /opt/htdocs/www;
permitir 208.97.167.194;
permitir 222.33.1.2;
permitir 231.152.49.4;
negarlo todo;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12Convierte archivos en directorios multinivel en un solo archivo para mejorar los efectos SEO
/job-123-456-789.html 指向/job/123/456/789.html


reescritura^/trabajo-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html último;


13. Redirigir cuando no existan archivos y directorios:


if (!-e $request_nombre_archivo) {
proxy_pass http://127.0.0.1;
}


14. Apunta una carpeta en el directorio raíz al directorio de nivel 2
Por ejemplo, /shanghaijob/ apunta a /área/shanghái/
Si cambias last a permanente, entonces la barra de direcciones del navegador será /location/shanghai/
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
El problema con el ejemplo anterior es que no coincide al acceder a /shanghai
reescritura ^/([0-9a-z]+)job$ /área/$1/ último;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
Este vía/Shanghái también es accesible, pero los enlaces relativos en la página no están disponibles,
Si ./list_1.html dirección real es /area/shanghia/list_1.html se convertirá en /list_1.html, lo que la hará inaccesible.
Entonces no puedo añadir saltos automáticos
(-d $request_nombre_archivo) tiene la condición de que debe ser un directorio real, y mi reescritura no lo es, así que no tiene efecto
si (-d $request_nombre_archivo){
reescritura ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
Es fácil de hacer después de saber la razón, déjame saltar manualmente
rewrite ^/([0-9a-z]+)job$ /$1job/permanent;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. Salto de nombre de dominio
Servidor
{
escuchar 80;
server_name jump.linuxidc.com;
índice index.html index.htm index.php;
root /opt/lampp/htdocs/www;
reescritura ^/ http://www.xx.com/;
access_log fuera;
}


16. Torneado multidominio
server_name www.xx.comwww.xx.com;
índice index.html index.htm index.php;
root /opt/lampp/htdocs;
If ($host ~ "linuxidc\.net") {
reescritura ^(.*) http://www.xx.com$1permanent;
}


6. Variables globales de Nginx
arg_PARAMETER #这个变量包含GET请求中, si existe un PARÁMETRO variable.
args #这个变量等于请求行中 parámetros (solicitud GET), por ejemplo, foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. Estos datos son precisos incluso si la conexión se interrumpe.
Campo de content_length #请求头中的Content longitud.
Campo content_type #请求头中的Content-tipo.
cookie_COOKIE #cookie el valor de la variable COOKIE
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
host #请求主机头字段, si no, el nombre del servidor.
Nombre de host #Set al nombre de host de TheMachine devuelto por gethostname
http_HEADER
is_args #如果有args参数, esta variable es igual a "?", de lo contrario igual a "", valor nulo.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作, normalmente GET o POST.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth Nombre de usuario validado por el Módulo Básico.
request_completion #如果请求结束, ponlo en OK. Vacío cuando la petición no está terminada o si no es la última en la cadena de solicitudes.
request_method #GET或POST
request_filename #当前请求的文件路径, generadas por directivas raíz o alias y solicitudes URI.
request_uri #包含请求参数的原始URI, no contiene el nombre de host, por ejemplo, "/foo/bar.php?arg=baz". No se puede modificar.
esquema #HTTP方法 (por ejemplo, http, https).
server_protocol #请求使用的协议, normalmente HTTP/1.0 o HTTP/1.1.
server_addr #服务器地址, este valor puede determinarse después de completar una llamada al sistema.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


Siete. Correspondencia entre las reglas apache y Nginx
El RewriteCond de Apache corresponde al de Nginx si
La Regla de Reescritura de Apache corresponde a la reescritura de Nginx
La [R] de Apache corresponde a la redirección de Nginx
[P] en apache corresponde a la última en Nginx
El [R,L] de Apache corresponde a la redirección de Nginx
El [P,L] de Apache corresponde al último de Nginx
El [PT,L] de Apache corresponde al último de Nginx


Por ejemplo, permite que un nombre de dominio especificado acceda a este sitio y siempre recurre a www.xx.com otros nombres de dominio
  Apache:
RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $
Regla de Reescritura ^/(.*)$ http://www.xx.com[R,L]


  Nginx:
if( $host ~* ^(.*)\.aaa\.com$ )
{
set $allowHost '1';
}
if( $host ~* ^localhost )
{
set $allowHost '1';
}
if( $host ~* ^192\.168\.1\..(. *?) $ )
{
set $allowHost '1';
}
si( $allowHost !~ '1' )
{
reescritura ^/(.*)$ http://www.xx.comredirect ;
}





Anterior:Sina Weibo escanea el código para pagar 1 céntimo y recibir el bono de fin de año hasta el yuan de 2015
Próximo:CMD5 descifra la contraseña del administrador del sistema de Windows
Publicado en 7/12/2014 17:25:05 |
Leer y responder es una virtud
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com