nginx学习1.3 nginx下location配置详解

环境:

centos6/7,nginx-1.9.15.

摘要说明:

上一篇我们对配置文件的所有配置做了整体的详解,及日志的配置及分割

本篇主要讲述nginx下server节点中location进行详细的解析,后续主要配置工作也在于此;

步骤:

1.虚拟主机

从上篇我们可以看到主配置文件下nginx.conf的整体结构如下:

其中main,event,http都为全局配置;而server开始则是我们对服务的配置:

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

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

虚拟主机(server)是由监听端口和主机名称构成联合主键的;其中主机名称可为域名也可为ip:

举例:基于域名的虚拟主机:

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

基于ip的虚拟主机:

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

当然也可基于端口:

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

注:若监听端口只设置其中一项(域名或ip)主机 ;其他的也会匹配上

一般在nginx.conf的主配置文件上配置将每个虚拟主机生成一个conf文件放在conf/conf.d/下:

include /usr/local/nginx/conf/conf.d/*.conf;

2.location

当请求路径确认到虚拟主机上后,后续就是根据location来进行匹配路由地址;

location语法:location [=|~|~*|^~] /uri/ {… }

各符号解释如下:

符号

含义

=

= 开头表示精确匹配

^~

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

~

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

~*

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

/

一般匹配

注:首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求;即优先级为: 完全匹配(=) ;前缀匹配( ^~);正则匹配(~~* ); 普通匹配(/

规则

  • 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项
  • 前缀普通匹配(^~)优先级次之。不支持正则表达式。使用前缀匹配,如果有多个location匹配的话,则使用表达式最长的那个
  • 正则表达式类型(~ ~*)的优先级次之。一旦匹配成功,则不再查找其他匹配项
  • 常规字符串匹配,如果有多个location匹配的话,则使用表达式最长的那个

说明

  • 先判断精准命中,如果命中,立即返回结果并结束解析过程
  • 若未结束,判断前缀普通命中,如果有多个命中,使用表达式“最长”的命中结果,结束解析过程
  • 若未结束,继续判断正则表达式的匹配,按正则表达式顺序为准,由上至下一旦匹配成功1个,立即返回结果,并结束解析过程
  • 若未结束,继续普通命中,普通命中和前缀普通命中相似,顺序无所谓,按照location表达式的长短来确定命中结果

示例:

    #基于端口
	server {
        listen       2004;
        server_name  localhost;
		#=精确匹配
		location = /static/ {
            return 200 '/static/';
        }
		#^~匹配url
		location ^~ /static/aa/ {
            return 200 '/static/aa/';
        }
		#~正则匹配url区分大小写
		location ~ /static/aa/bb/ {
            return 200 '/static/aa/bb/';
        }
		#~正则匹配url区分大小写
		location ~ /static/bb/ {
            return 200 '/static/bb/';
        }
		#~*正则匹配url不区分大小写
		location ~* /static/BB/ {
            return 200 '/static/BB/';
        }
		#~*正则匹配url不区分大小写
		location ~* /static/CC/ {
            return 200 '/static/CC/';
        }
		#一般匹配
        location /static/cc/aa/ {
            return 200 '/static/cc/aa/';
        }
		#一般匹配
		location /static/dd/ {
            return 200 '/static/dd';
        }
		#一般匹配
		location /static/dd/aa/ {
            return 200 '/static/dd/aa/';
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

示例中的return表示直接返回响应状态为200,并返回对应的字符串;更多语法为:

  • return code [text];
  • return code URL;
  • return URL;

通过curl执行结果如下:

# curl http://127.0.0.1:2004/static/aa/
/static/aa/
# curl http://127.0.0.1:2004/static/aa/bb/
/static/aa/
# curl http://127.0.0.1:2004/static/bb/
/static/bb/
# curl http://127.0.0.1:2004/static/bb/cc
/static/bb/
# curl http://127.0.0.1:2004/static/cc/
/static/CC/
# curl http://127.0.0.1:2004/static/cc/cc
/static/CC/
# curl http://127.0.0.1:2004/static/cc/aa/
/static/CC/
# curl http://127.0.0.1:2004/static/dd/
/static/dd
# curl http://127.0.0.1:2004/static/dd/aa/
/static/dd/aa/

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值