nginx 学习-location规则

Nginx的信号

1)、TERM、INT 快速关闭
2)、QUIT从容关闭
3)、HUP平滑重启,重新加载配置文件
4)、USR1 重新打开日志文件
5)、USR2 平滑升级可执行程序
KILL 9 强制终止,直接杀

虚拟主机

虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。

利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能。

配置方式

  1. 基于域名的虚拟主机
  2. 基于ip的虚拟主机
  3. 基于端口的虚拟主机

基于域名的虚拟主机

server {
#监听端口 80
listen 80;
#监听域名abc.com;
server_name abc.com;
location / {
# 相对路径,相对nginx根目录。也可写成绝对路径
root abc;
# 默认跳转到index.html页面
index index.html;
}
}

基于端口的虚拟主机配置

server {
listen 2022;
server_name abc.com;
location / {
root /home;
index index.html;
}
}

基于IP地址虚拟主机配置

server {
listen 80;
server_name 192.168.197.142;
location / {
root ip;
index index.html;
}
} 

 

Location规则

Location规则

符号

含义

=

= 开头表示精确匹配

^~

^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)

~

~ 开头表示区分大小写的正则匹配

~*

~* 开头表示不区分大小写的正则匹配

!~和!~*

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则

/

用户所使用的代理(一般为浏览器)

$http_x_forwarded_for

可以记录客户端IP,通过代理服务器来记录客户端的ip地址

$http_referer

可以记录用户是从哪个链接访问过来的

 

 

 

location和rewrite进阶
nginx运行阶段:  rewrite 阶段、access 阶段以及 content 阶段
不按代码顺序执行,是按阶段执行,顺序如下:
先执行命中的所有rewrite层指令(下面的set),再执行access,再执行content(下面的echo)


语法:
location  = / {
        set $a 32;
        echo $a;

        set $a 64;
        echo $a;
}

server {

listen       80;
server_name  test.enjoy.com;

location  = / {
	set $a 32;
	echo $a;

	set $a 64;
	echo $a;
}

}

负载均衡location规则:

upstream nginx {



                #ip_hash;
                server 192.168.46.133:8081 weight=2;
                server 192.168.46.133:8082 weight=1;
         }

server {
        listen       80;
        server_name  www.enjoy.com;

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

        location /rout {
                rewrite ^/rout/(.*)  /static/$1.html break;
                root   html/;
            index  index.html index.htm;
        }
        location /examples {
                proxy_pass http://192.168.46.133:8081;
        }
        location /examples1 {
                proxy_pass http://nginx;
        }
}

 

 

#location指令优先级验证:
#	=精准匹配,最优,匹配就直接返回
#	^~,空 为一般匹配,收集所有匹配,取最长匹配执行(此时不返回,还会执行下面的正则匹配)
#	~,~* 为正则匹配,按顺序依次匹配,命中即返回(可能会覆盖普通匹配)

server {

listen       80;
server_name  location.enjoy.com;

#精准匹配测试
#第1,2条虽然匹配,但第三条是精准匹配,出第三条结果
#测试路径/equal/a/b/c
location ~ /equal/* {#被命中,但被下面的推断:location = /equal/a/b/c
	return 400;
}
location /equal/a/b {#被命中,但被下面的推断:location = /equal/a/b/c
        return 401;
}
location = /equal/a/b/c {#被命中,直接执行,不等待
        return 402;
}

#普通匹配测试
#第1,2条虽然匹配,第三条匹配更长,出第三条结果
#测试路径/match/a/b/c
location /match/a {#被命中,但不是最长
	return 412;
}
location /match/a/b {#被命中,但不是最长
        return 413;
}
location /match/a/b/c {#被命中,且最长
        return 414;
}
location /match/a/b/c/d {#不命中
        return 415;
}

#正则匹配覆盖普通匹配测试
#会覆盖普通匹配,不会覆盖=和^~
location =/re/a.js {#访问/re/a.js,不会被后面的正则覆盖
	echo 'match =';
}
location ^~ /re/a/b {#访问/re/a/b开头的路径,不会被后面的正则覆盖
	echo 'math ^~/re/a/b*';
}
location /re/a.htm {#访问/re/a.htm,会被后面的正则覆盖
         echo 'match /re/a.htm';
}
location ~ /re/(.*)\.(htm|js|css)$ {#覆盖/re/a.htm路径
	echo "cover /re/$1.$2";
}

#正则匹配成功一条后,便不再走其它正则
#最长正则匹配是第三个,但匹配第一个后便不往下走
#测试路径/rex/a/b/c.htm
location ~ /rex/.*\.(htm|js|css)$ {#覆盖/re/a.htm路径
        echo "match first";
}
location ~ /rex/a/(.*)\.(htm|js|css)$ {#覆盖/re/a.htm路径
        echo "match second";
}
location ~ /rex/a/b/(.*)\.(htm|js|css)$ {#覆盖/re/a.htm路径
        echo "match third";
}

#index处理
#location.enjoy.com/static方式无法访问
#location.enjoy.com/static/方式可访问到c页面
location /static/ {
	root html;
	index c.html;
}

}
#nginx执行过程验证
server {
        listen       80;
        server_name  process.enjoy.com;

	#后台服务原始路径:172.17.0.4:8081/nginx/enjoy/getInfo

	#无/,访问路径:http://process.enjoy.com/nginx/enjoy/getInfo
        location /nginx/enjoy { #匹配路径/nginx/enjoy,剩余路径/getInfo
		proxy_pass http://172.17.0.4:8081;#此处未关闭,传递整个路径/nginx/enjoy/getInfo到目标ip:port
#		proxy_pass http://172.17.0.4:8081/nginx/enjoy;
        }
	#有/,访问路径:http://process.enjoy.com/dynamic/nginx/enjoy/getInfo
        location /dynamic {#匹配路径/dynamic,剩余路径/nginx/enjoy/getInfo
                proxy_pass http://172.17.0.4:8081/;#此处关闭,只传递/nginx/enjoy/getInfo到目标ip:port
        }

	#访问路径:http://process.enjoy.com/static/a.html ---b.html/c.html	
	location /static {#匹配路径/static,剩余路径/a.html
	#	root html/;#root声明,在html文件夹,查找/static/a.html文件
        }
	#访问路径:http://process.enjoy.com/target/a.html ---b.html/c.html
	location /target {#匹配路径/target,剩余路径/a.html
                alias html/static/;##alias声明,在html/static/文件夹,查找a.html文件
        }	

       
    }

Nginx执行过程

url = 域名+端口+path+param 匹配过程:

1、域名(ip)+端口 ----》定位虚拟机

2、path与location部分匹配,       path = 匹配path + 剩余path

3、root:在目录里找path1+path2路径      alias:在目录里找path2路径       若url以/结尾,认为是目录,执行index;否则认为path路径到达文件

4、 proxy_pass=http://172.17.0.4:8081/        proxy_pass= ip:port/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值