nginx 之 如何找到处理请求的server 指令

      在nginx 模块处理请求之前,我们首先要确保它的指令被正确的解析出来,为了处理这个请求,到底使用哪个指令的值,因为指令的配置可以出现在http 下,也可以出现在server 块下,也可以出现在location 块下,在这里,我们首先必须确保请求是被哪一个server 块处理 .  下面介绍server_name  ,它可以保证我们在处理11个阶段的http 模块处理之前,先决定哪个server块指令被使用。

server_name 指令 后面可以跟三种域名

1、跟一个明确的域名

  指令后可以跟多个域名,第一个是主域名,下面是一个控制主域名用法的配置,默认为off 

Syntax  server_name_in_redirect  on | off ;
Default server_name_in_redirect off;
Context  http,server,location

下面演示一下

  新建一个 servername_test.conf

 server {
     
       server_name  primary.zk02.com   second.zk02.com;
       
       server_name_in_redirect  off;

       return 302  /redirect;
	
 }

然后在nginx.conf  使用include 引入

include   /soft/nginx/conf/example_conf/servername_test.conf;

使用nginx -s reload 重载配置文件.

使用curl 访问

[root@zk02 ~]# curl second.zk02.com -I 
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.1
Date: Tue, 28 Jan 2020 22:28:15 GMT
Content-Type: text/html
Content-Length: 145
Location: http://second.zk02.com/redirect
Connection: keep-alive

可以看到访问路径为  Location: http://second.zk02.com/redirect

更改  server_name_in_redirect on;

重新加载配置文件

[root@zk02 ~]# curl second.zk02.com -I 
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.1
Date: Tue, 28 Jan 2020 22:30:01 GMT
Content-Type: text/html
Content-Length: 145
Location: http://primary.zk02.com/redirect
Connection: keep-alive

可以看到访问路径为第一个域名.

2、* 泛域名 : 仅支持在最前或最后加*

例如:

server_name   *.zk02.com

3、正则表达式:加 ~ 前缀

例如:

server_name   www.zk02.com   ~^www\d+\.zk02$;

用正则表达式创建变量:用小括号()

例如:

server {
   server_name  ~^(www\.)?(.+)$;
   
   location  / {root  /sites/$2}
}

其中$2 指取 上面正则表达式中第二个变量的值. 如: 如果值为www.zk02.com , 则$2 的值为zk02.com

再比如说,使用命名变量的方式 ,使用问号和尖括号的方式,如?<domain>

server {

    server_name  ~^(www\.)?(?<domain>.+)$;

    location / {root /sites/$domain ;}   
}

 

其他   

  •  .zk02.com 可以匹配 zk02.com   *.zk02.com 
  • _ 匹配所有
  • ”” 匹配没有传递Host 头部.

 

server 的匹配顺序

1、精确匹配

2、* 在前的泛域名

3、*在后的泛域名

4、按文件中的顺序匹配正则表达式域名

5、default server 

  •  第一个
  • listen 指定default 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值