联系QQ 284710375
首页 > 技术分享 > LNMP|WAMP
收藏

Nginx的server_name匹配规则2022-08-21 21:48:09

大潇博客 原创文章,转载请标明出处

周日晚上写点东西,让周末感觉更加充实,记录若干个Nginx匹配域名的规则


首先说个常识,在nginx中,每一个server{}都是一个虚拟主机,域名绑定在server段的server_name上。

假设某个域名已经解析到服务器ip上,但nginx还没绑定此域名,默认访问nginx配置中的第一个server{}


下面集合实际配置案例,说几个匹配规则


1、同一个server_name中,可以匹配多个域名,例如

server {

listen       80;

server_name  a.local.com b.local.com;

location / {

root   html;

index  index.html index.htm;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

上面的server_name中有“a.local.com”和“b.local.com”两个域名,它们可以访问同一个目录


2、完整匹配

上面所举例子既是完整匹配,表示完整匹配一个域名,除此之外的其它域名不能匹配到


3、通配符匹配

在nginx的server_name中,通配符表示任意字符,用“*”星号表示,使用通配符匹配时,只需主域相同,任意二级域名均可匹配到

server {

listen       80;

server_name  *.local.com;

location / {

root   html;

index  index.html index.htm;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

如上面的例子,“aa.local.com”、“abc.local.com”等等,只要是二级域名,都可以匹配到


4、通配符结束匹配

使用规则和通配符匹配一样,区别在于,通配符的位置由主域名前面变成后面,先看下面举例

server {

listen       80;

server_name  a.local.*;

location / {

root   html;

index  index.html index.htm;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

这种做法的效果是,必须使用“a”开头的二级域名,末尾换作任何域名格式,如“.com”、“.cn”“.net”等等,均可以匹配到


5、正则匹配

前面几种匹配规则比较简单,正则匹配需要简单了解正则表达式,以及nginx常用的正则规则,比如:

server {

listen       80;

server_name  ~^[0-9]+\.local\.com$;

location / {

root   html;

index  index.html index.htm;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

上面所举例子的效果是,区分大小写匹配一个由数字开头的二级域名,任意数字,至少一位,直到结尾。

注意,“~”符号在nginx中表示区分大小写匹配,要有“^”开始符号和“$”结束符号,域名中的所有“.”要使用反斜线“\”进行转义

有一点重要提示:有通配符前匹配时,正则匹配不生效


6、相同域名,访问不同目录

在同一台服务器上,相同的域名访问不同目录,可以通过设置端口来实现。

nginx在每个server段中,使用listen来表示所监听的端口,默认是80端口,可以通过设置不同的listen,实现相同域名访问不同目录,如下

server {

listen       80;

server_name  a.local.com;

location / {

root   html/floder01;

index  index.html index.htm;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}


server {

listen       8080;

server_name  a.local.com;

location / {

root   html/floder02;

index  index.html index.htm;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

上面例子中,两个server段域名同为“a.local.com”,但由于第一个使用“80”端口,第二是使用“8080”端口,所以达到了访问不同文件夹得目的


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311