server_name _;的作用 nginx

server_name _; : 这里指定的不是什么特别的名字,它表示的是一个无效的域名。

假设配置是这样的

nginx.conf

http
{
include vhost/*.conf;
}

/usr/local/nginx/conf/vhost/ 目录下包含3个conf:

a.conf

server
{
listen 80;
server_name a.com;
}

b.conf

server
{
listen 80;
server_name _;
}

c.conf

server
{
listen 8082;
server_name c.com;
return 301 http://c.com$request_uri;
}

扫描二维码关注公众号,回复: 15487386 查看本文章

如上配置

注意 :

nginx 批量载入配置 conf 时会按 ascii 排序载入,这就会以 a.conf b.conf c.conf 的顺序载入,如果没有声明 default_server 的话,那 a 会作为默认的 server 去处理 未绑定域名/ip 的请求。

nginx中有3个server_name,生效顺序如下:

a.com
_
c.com
若访问 http://127.0.0.1, 实际加载的是 a.com 的内容 。 在请求的Host没有命中其他规则且没有指定 default_server 的情况下,比较的是 server 的加载顺序,而不是去找 _;这个要注意下,之前我一直以为 127.0.0.1 指向的是 _,其实 _ 并不是指向有意义的域名。对于要想监听ip访问的可以将 server_name 直接写为具体ip。

很多人复制粘贴广泛传播 server_name 要设为 _,其实一毛钱的关系也没有。_只是作为一个和业务域名无关的请求回收服务而已,如果我们线上的业务都是明确的业务域名访问,那泛解析造成的一些非业务域名或ip访问都会被这个 server 回收处理。 _并不是重点 __可以 ___、&、@只要表示无效域名都可以。

_ 高优先级情况 || default_server
若nginx 配置有 default_server,访问服务器对应ip127.0.0.1 在一个请求的Host没有命中其他规则的情况下,无论_在第几位加载都是指向的_。应该说是指向的 default_server

server{
listen 80 default_server;
server_name _;
access_log off;
return 301 https://www.test.com$request_uri;
}

nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。

一般情况下 _ 都是和 default_server 配合使用来设置默认server。当一个请求的Host没有命中其他规则时,会采用默认server的配置。若没有配置 default_server,则使用第一个加载的 server 做为默认配置。

猜你喜欢

转载自blog.csdn.net/Sncdma/article/details/127793837