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 ;
}
|