我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

{n,m} :重复 n 至 m 次

[]:定义匹配的字符范围

[c] :匹配单个字符 c

[az]:匹配任意小写字母az

[az]:匹配任意小写字母az

[a-zA-Z0-9] :匹配所有大写和小写字母或数字

():表达式的起始和终止位置

|:或运算符

从功能上看,它们好像有些类似,都可以实现跳转。主要区别在于,它改变了同一域名内获取资源的路径,但针对一类路径进行访问控制或者反向代理,还可以传递到其他机器。

:重写访问的域名或者域名的URL路径地址

:对访问路径进行访问控制或者代理转发

2.1. 大致可以分为三类

完全匹配:= / {…}

常规匹配:/{…}

正则表达式匹配:~/{…}

2.2 常见匹配规则

=:对普通字符进行精确匹配,即完全匹配。

^~:表示普通字符匹配,使用前缀匹配,匹配成功则不再进行其他匹配。

~:区分大小写匹配。

~* :不区分大小写的匹配。

!~:区分大小写的匹配否定。

!~* :不区分大小写的匹配。

2.3. 优先级:

第一个完全匹配 =

其次,前缀匹配^~

第二个是正则匹配或*按文件顺序

然后匹配前缀匹配,不做任何修改

最后交给/通用匹配

2.4 示例

(1)= / {}

= 表示精确匹配 /。主机名后面不能跟任何字符串。例如访问 / 和 /data,/ 会匹配,但 /data 不会匹配。例如 = /abc 只会匹配 /abc,而不会匹配 /abc/ 或 /abcd。如果 /abc 是 /abc,则会匹配 /abc、/abcd/ 和 /abc/。

(2)/{}

因为所有地址都以 / 开头,所以此规则将匹配所有请求。例如,如果您访问 / 和 /data,则 / 将匹配,并且 /data 也将匹配。但是,如果它后面跟着正则表达式,则将首先匹配最长的字符串(最长匹配)。

(3) // {}

匹配任何以//开头的地址。匹配后继续搜索其他地址。

仅当没有其他正则表达式匹配时才会使用这个。

(4) //abc { }

匹配任意以//abc开头的地址,匹配后继续查找其他地址。

仅当没有其他正则表达式匹配时才会使用这个。

(5)^~ // {}

匹配以 // 开头的任何地址。匹配后,停止搜索正则表达式并使用此表达式

(6)~* \ . (gif|jpg|jpeg)${}

匹配所有以 gif、jpg 或 jpeg 结尾的请求

但是,所有在//下请求的图片都会被^~//处理,因为^~的优先级更高,所以无法达到这个正则表达式。

(7) //abc {}

最长的字符匹配 //abc,优先级最低。如果继续搜索其他字符,会发现 ^ 和

(8)〜//abc {}

匹配以 //abc 开头的字符,优先级第二高。只有删除 ^~ // 后才会使用这个:

(9) //abc/1.html {}

匹配文件//abc/1.html。与正则表达式~//abc/1.html相比,该正则表达式的优先级更高。

优先事项摘要:

( = 完整路径) > ( ^~ 路径) > ( ~ ,~* 常规序列) > ( 部分起始路径) > ( /)

匹配

首先看优先级: => ^~ > , * > > /

优先级相同:正则表达式按照上下顺序,顶部优先;通用表达式按照长度优先,最长匹配优先

精确,前缀,正则,通用都不匹配,最后看通用匹配

2.5. 在实际的网站使用中,至少有三种匹配的规则定义

第一条强制性规定

直接匹配网站根,通过域名访问网站首页比较频繁,使用这个可以加快处理速度,比如官网。

可以是静态主页,也可以直接转发到后端应用服务器

= / {

根html;

索引 index.html index.htm;

第二条强制规则是处理静态文件请求,这是 nginx 作为 HTTP 服务器的强项。

有两种配置模式,目录匹配或后缀匹配,你可以选择其中一种或两种都使用

^~ // {

根 ///;

~* \ . (html|gif|jpg|jpeg|png|css|js|ico)${

根//资源/;

第三条规则是通用规则,例如将.php或者.jsp后缀的动态请求转发到后端应用服务器。

非静态文件请求默认为动态请求

/ {

3. Nginx 概述

功能就是利用nginx提供的全局变量或者自己设置的变量,结合正则表达式和标签来实现URL重写和重定向。例如:

3.1、跳转场景3.2、跳转实现3.3、执行顺序如下:执行块中的指令。执行匹配的指令。执行选中的指令。3.4、语法格式:

rewrite   [flag] ;

regex:正则匹配规则。

:表示跳转后的内容。

flag:支持的标志。

3.5、标志说明

last:匹配完本条规则后,继续向下匹配新的URL规则,一般用在and if中。

break:匹配完成后终止该规则,不再匹配其他规则。一般用在 中。

:返回302临时重定向,浏览器地址将显示跳转后的URL地址。

:返回301永久重定向,浏览器地址栏将显示跳转后的URL地址。

4.Nginx基本操作 4.1.根据域名重定向

现在公司旧域名因为业务需要发生了变更,需要更换新域名,但是旧域名不能废除,需要跳转到新域名,后续参数不变。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.test.com;		#域名修改
	charset utf-8;
	access_log  /var/log/nginx/www.test.com.access.log;		#日志修改
	location / {
	    if ($host = 'www.test.com'){		#$host为rewrite全局变量说好的
	        rewrite ^/(.*)$ http://www.lisi.com/$1 permanent;
	    }
        root   html;
        index  index.html index.htm;
    }
}
echo "192.168.163.10 www.lisi.com www.test.com" >> /etc/hosts
systemctl restart nginx

在这里插入图片描述

浏览器输入模拟访问

会跳转到,查看元素可以看到返回了301,即实现了永久重定向,并且域名后面的参数也跳转正常。

4.2. 根据客户端IP进行访问重定向

今天公司业务新版本上线,要求所有IP访问任何内容都要显示固定维护页面,只有公司IP:192.168.153.230才能正常访问。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.test.com;
	charset utf-8;
	access_log  /var/log/nginx/www.test.com.access.log;
	#设置是否合法的IP标记;设置变量$rewrite,变量值为boole值true
    set $rewrite true;
    #判断是否为合法IP;当客户端IP为192.168.153.230时,将变量值设为false,不进行重写
    if ($remote_addr = "192.168.153.230"){
        set $rewrite false;
    }
	#除了合法IP,其它都是非法IP,进行重写跳转维护页面
	#当变量值为true时,进行重写
    if ($rewrite = true){
        #重写在访问IP后边插入/weihu.html,例如192.168.184.11/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 "

As server maintenance, please visit later, thank you.

" > /var/www/html/weihu.html echo "192.168.153.230 www.test.com" >> /etc/hosts systemctl restart nginx

浏览器访问

4.3.根据旧域名跳转到新域名,并在其后添加目录

现在你需要将此域名下的所有访问重定向到

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  lisi.test.com;
	charset utf-8;
	access_log  /var/log/nginx/lisi.test.com.access.log;
	#添加;这里的$1为位置变量,代表/post
	location /post {
        rewrite (.+) http://www.test.com/lisi$1 permanent;
    }
	location / {
        root   html;
        index  index.html index.htm;
    }
}
mkdir -p /usr/local/nginx/html/lisi/post
echo "this is 1.html" > /usr/local/nginx/html/lisi/post/1.html
echo "192.168.153.230 lisi.test.com www.test.com" >> /etc/hosts
systemctl restart nginx.service
使用浏览器访问
http://lisi.test.com/post/1.html 跳转到 http://www.test.com/lisi/post/1.html

在这里插入图片描述

4.4. 根据参数匹配跳转

现在访问 (100|200)-100 (任意数字).html 跳转到该页面。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.test.com;
	charset utf-8;
	access_log  /var/log/nginx/www.test.com.access.log;
    if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {
        rewrite (.+) http://www.test.com permanent;
    }
    location / {
        root   html;
        index  index.html index.htm;
    }
}
echo "192.168.153.230 www.test.com" >> /etc/hosts
systemctl restart nginx
浏览器访问
http://www.test.com/100-200-100.html 或 
http://www.test.com/100-100-100.html 跳转到http://www.test.com页面。

4.5. 根据目录中所有以php结尾的文件跳转

二维码
扫一扫在手机端查看

本文链接:https://by928.com/2769.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线