废话不多说,先上配置:
#host 头攻击漏洞
server {
listen 8008 default_server; #最高优先级
server_name _; #_表示无效的域名
server_tokens off; #隐藏版本号
return 403;
}
server {
listen 8008;
server_name ***.domain.com 222.***.188.123 192.168.1.100 127.0.0.1; #允许的 host
server_tokens off;
#项目
location /test01 {
......
proxy_pass http://127.0.0.1:8001/test;
}
#项目
location /test02 {
alias /opt/web/test02;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
}
server_name _; 的意义
server_name _;
:这里指定的不是什么特别的名字,它表示的是一个无效的域名。
很多人复制粘贴广泛传播 server_name
要设为 _
,其实一毛钱的关系也没有。_
只是作为一个和业务域名无关的请求回收服务而已,如果我们线上的业务都是明确的业务域名访问,那泛解析造成的一些非业务域名或 ip 访问都会被这个 server 回收处理。_
并不是重点 __
可以 ___
、&、@只要表示无效域名都可以。
_ 高优先级情况 || default_server
若 nginx 配置有 default_server
,访问服务器对应 ip127.0.0.1
在一个请求的 Host 没有命中其他规则的情况下,无论 _
在第几位加载都是指向的_
。应该说是指向的 default_server
nginx 的 default_server
指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。
一般情况下 _
都是和 default_server
配合使用来设置默认 server。当一个请求的 Host 没有命中其他规则时,会采用默认 server 的配置。若没有配置 default_server,则使用第一个加载的 server 做为默认配置。
微信扫描下方的二维码阅读本文
正文完