详解nginx 的 default_server 定义及匹配规则
nginx的default_server指令可以定义默认的server去处理一些没有匹配到server_name的请求,如果没有显式定义,则会选取第一个定义的server作为default_server。
在了解到如上规则后,我们可以捕获未做绑定的域名访问或直接IP访问,做重定向到403页面等处理。
1、nginx隐式的defaultserver
http{ #如果没有显式声明defaultserver则第一个server会被隐式的设为defaultserver server{ listen80; server_name_;#_并不是重点__也可以___也可以 return403;#403forbidden } server{ listen80; server_namewww.a.com; ... } server{ listen80; server_namewww.b.com; ... } }
很多人复制粘贴广泛传播server_name要设为'_',其实一毛钱的关系也没有。'_'只是作为一个和业务域名无关的请求回收服务而已,如果我们线上的业务都是明确的业务域名访问,那泛解析造成的一些非业务域名或ip访问都会被这个sever回收处理。
在没有显式定义defaultserver时,nginx会将配置的第一个server作为defaultserver,即当请求没有匹配任何server_name时,此server会处理此请求。所以,当我们直接使用ip访问时会被交给此处定义的第一个server处理,403forbidden。
2、显示的定义一个defaultserver
http{ server{ listen80; server_namewww.a.com; ... } server{ listen80; server_namewww.b.com; ... } #显示的定义一个defaultserver server{ listen80default_server; server_name_; return403;#403forbidden } }
建议显示指定defaultserver,因为我们在配置虚拟主机或多业务时,会存有多个server配置文件,如果使用隐式方式选取第一个被载入的server作为defaultserver的话,我们还要时刻去确认谁是被第一个载入的...制造风险...
3、直接指定server_name为ip(只能禁止ip访问)
http{ server{ listen80; server_namewww.a.com; ... } server{ listen80; server_namewww.b.com; ... } #直接指定ipserver_name server{ listen80; server_namexxx.xxx.xxx.xxx; return403;#403forbidden } }
以上三种方式都可禁止ip直接访问,且1,2同时可以禁止未绑定域名的访问(比如你泛解析了主域名)。
小记:nginx批量载入配置conf时会按ascii排序载入,这就会以server_a.confserver_b.confserver_c.conf的顺序载入,如果没有生命default_server的话,那server_a会作为默认的server去处理未绑定域名/ip的请求。
到此这篇关于详解nginx的default_server定义及匹配规则的文章就介绍到这了,更多相关nginxdefault_server匹配规则内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。