Ubicación y reescritura de Nginx

1. Expresiones regulares comunes de Nginx

Inserte la descripción de la imagen aquí

Dos, ubicación

1. La ubicación se puede dividir aproximadamente en tres categorías

Concordancia exacta: ubicación = / {} Concordancia
general: ubicación / {}
Concordancia normal: ubicación ~ / {}

2. Reglas de coincidencia de uso común para la ubicación:

=: Realiza una coincidencia exacta de caracteres ordinarios, es decir, una coincidencia completa.
^ ~: Indica que los caracteres comunes coinciden. Utilice la coincidencia de prefijos. Si la coincidencia tiene éxito, no se compararán otras ubicaciones.
~: Coincidencia sensible a mayúsculas y minúsculas.
~ *: Coincidencia que no distingue entre mayúsculas y minúsculas.
! ~: Negación de coincidencia sensible a mayúsculas y minúsculas.
! ~ *: Negación de coincidencia que no distingue entre mayúsculas y minúsculas.

3. Prioridad de ubicación:

Primero, una coincidencia exacta =
Segunda coincidencia de prefijo ^ ~
seguido por el archivo secuencial de coincidencia positiva o *
luego coincidencia de prefijo coincidente sin ninguna modificación
y finalmente a / coincidencias genéricas

4. Descripción del ejemplo de ubicación:

Inserte la descripción de la imagen aquí

5. En el uso real del sitio web, existen al menos tres definiciones de reglas coincidentes

La primera regla requerida
coincide directamente con la raíz del sitio web. Es más frecuente visitar la página de inicio del sitio web a través del nombre de dominio. Su uso acelerará el procesamiento, como el sitio web oficial.
Esto se reenvía directamente al servidor de aplicaciones back-end o puede ser una página de inicio estática.

location = / {
    proxy_pass http://tomcat_server/;
}

La segunda regla obligatoria
maneja las solicitudes de archivos estáticos, que es la fortaleza de nginx como servidor http.
Hay dos modos de configuración, coincidencia de directorio o coincidencia de sufijo, elija uno de ellos o utilícelos juntos

location ^~ /static/ {
    root /webroot/static/;
}

location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

La tercera regla es una
regla general, como reenviar solicitudes dinámicas con sufijos .php y .jsp al servidor de aplicaciones back-end.
Las solicitudes de archivos no estáticos son solicitudes dinámicas por defecto.

location / {
    proxy_pass http://tomcat_server;
}

Tres, reescribe

La función de reescritura es utilizar variables globales proporcionadas por nginx o variables establecidas por usted mismo, combinadas con expresiones regulares y etiquetas para lograr la reescritura y la redirección de URL.
Por ejemplo: después de cambiar el nombre de dominio, el nombre de dominio antiguo debe poder transferirse al nuevo nombre de dominio, una determinada página web debe ser redirigida a una nueva página después de un cambio, la cadena antirrobo del sitio web, etc. necesidades.

La reescritura solo se puede colocar en el servidor {}, ubicación {}, si {}, y por defecto solo puede funcionar en la cadena después del nombre de dominio, excepto por los parámetros pasados.
Por ejemplo: http://www.lic.com/a/we/index.php?id=1&u=str solo reescribe /a/we/index.php.

1. Reescribir la implementación del salto

Nginx: admite la reescritura de URL a través del módulo ngx_http_rewrite_module, admite si se juzga la condición, pero no admite otro
salto: salta de una ubicación a otra ubicación, el bucle se puede ejecutar hasta 10 veces, después de exceder, nginx devolverá un error de 500
soporte de PCRE : Perl Compatible con la coincidencia de reglas gramaticales de expresiones regulares
Reescribir la instrucción del conjunto del módulo: crear nuevas variables y asignarles valores

2. Reescribir el orden de ejecución

1. Ejecute la instrucción de reescritura en el bloque del servidor
2. Ejecute la coincidencia de ubicación
3. Ejecute la instrucción de reescritura en la ubicación seleccionada

3. Reescribe el formato de sintaxis

Reescritura de sintaxis;
expresión regular: indica el
reemplazo regular de la regla de coincidencia : indica el contenido después de la
bandera de salto : indica la etiqueta de la bandera admitida por reescritura

4. Descripción de la bandera

último: después de que esta regla coincida, continúe haciendo coincidir la nueva regla de URI de ubicación hacia abajo, generalmente utilizada en el servidor y if.
break: esta regla terminará cuando se complete la coincidencia y ya no coincidirá con las reglas posteriores. Generalmente se usa en la ubicación.
redireccionamiento: vuelva a un redireccionamiento temporal 302, la dirección del navegador mostrará la dirección URL redirigida.
permanente: Regrese a la redirección permanente 301, y la dirección URL después de la redirección se mostrará en la barra de direcciones del navegador.

Cuatro, reescribir el ejemplo

1. Redirigir según el nombre de dominio

Ahora, el antiguo nombre de dominio de la empresa, www.abc.com, necesita cambios comerciales y necesita ser reemplazado por un nuevo nombre de dominio www.def.com, pero el antiguo nombre de dominio no puede ser abolido, necesita ser redirigido al nuevo nombre de dominio. y los siguientes parámetros permanecen sin cambios.

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.abc.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.abc.com.access.log;		#日志修改
	location / {
	#添加域名重定向
        if ($host = 'www.abc.com'){						            #$host为rewrite全局变量,代表请求主机头字段或主机名
			rewrite ^/(.*)$ http://www.def.com/$1 permanent;		#$1为正则匹配的内容,即域名后边的字符串
        }
        root   html;
        index  index.html index.htm;
    }
}

echo "192.168.221.80 www.abc.com www.def.com" >> /etc/hosts

mkdir -p /var/log/nginx
systemctl restart nginx.service

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2. Redireccionamiento de acceso según la IP del cliente

Hoy en día, la nueva versión del negocio de la empresa está en línea, lo que requiere que todas las IP accedan a cualquier contenido para mostrar una página de mantenimiento fija, y solo se puede acceder normalmente a la IP de la empresa: 192.168.221.88.

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.abc.com;
	charset utf-8;
	access_log  /var/log/nginx/www.abc.com.access.log;

	#设置是否合法的IP标记;设置变量$rewrite,变量值为boole值true
    set $rewrite true;
    #判断是否为合法IP;当客户端IP为192.168.221.88时,将变量值设为false,不进行重写
    if ($remote_addr = "192.168.221.88"){
        set $rewrite false;
    }
	#除了合法IP,其它都是非法IP,进行重写跳转维护页面
	#当变量值为true时,进行重写
    if ($rewrite = true){
        #重写在访问IP后边插入/weihu.html,例如192.168.221.80/weihu.html
        rewrite (.+) /weihu.html;
    }
    location = /weihu.html {
        #网页返回/var/www/html/weihu.html的内容
        root /var/www/html;
    }
	location / {
        root   html;
        index  index.html index.htm;
    }
}

mkdir -p /var/www/html/
echo 'weihu!' > /var/www/html/weihu.html
systemctl restart nginx

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

3. Según el nombre de dominio anterior, vaya al nuevo nombre de dominio y agregue un directorio.

Ahora está visitando http://def.abc.com, ahora necesita redirigir todas las visitas bajo este nombre de dominio a http://www.abc.com/def

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  def.abc.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.abc.com-access.log;
	#添加
	location /post {
        rewrite (.+) http://www.abc.com/def$1 permanent;		#这里的$1为位置变量,代表/post
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

mkdir -p /usr/local/nginx/html/def/post
echo 'this is 1.html' > /usr/local/nginx/html/def/post/1.html
 echo "192.168.221.80 def.abc.com www.abc.com" > /etc/hosts
 systemctl restart nginx.service 

访问http://def.abc.com/post/1.html跳转到http://www.abc.com/def/post/1.html

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí

4. Saltar según la coincidencia de parámetros

Ahora visite http://www.abc.com/100-(100|200)-100.html para ir a la página http://www.abc.com.

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.abc.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.abc.com-access.log;
	
	if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
        rewrite (.+) http://www.abc.com permanent;
    }

	location / {
        root   html;
        index  index.html index.htm;
    }
}
echo "192.168.221.80 www.abc.com" >> /etc/hosts
systemctl restart nginx

浏览器访问
http://www.abc.com/100-200-100.html 或 
http://www.abc.com/100-100-100.html 跳转到http://www.abc.com页面

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

5. Salte basándose en todos los archivos que terminan con php en el directorio.

Solicite visitar http://www.abc.com/upload/abc.php para ir a la página de inicio.

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.abc.com;
	charset utf-8;
	access_log  /var/log/nginx/www.abc.com.access.log;
	
location ~* /upload/.*\.php$ {
    rewrite (.+) http://www.abc.com permanent;
}

location / {
    root   html;
    index  index.html index.htm;
}
}

echo "192.168.221.80 www.abc.com" >> /etc/hosts
systemctl restart nginx


访问http://www.abc.com/upload/123.php跳转到http://www.abc.com页面

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/s15212790607/article/details/115349218
Recomendado
Clasificación