本文介绍: nginx 批量载入配置 conf 时会按 ascii 排序载入,这就会以 a.conf b.conf c.conf顺序载入,如果没有声明 default_server 的话,那 a 会作为默认server处理绑定域名/ip请求nginxdefault_server 指令可以定义默认server 去处理一些没有匹配server_name请求,如果没有显式定义,则会选取一个定义server 作为 default_server

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;
}

如上配置

注意 :

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;
}

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

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

原文地址:https://blog.csdn.net/Sncdma/article/details/127793837

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_17097.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注