NAR*_*KOZ 15 nginx virtualhost
我想设置一个默认的全能服务器块来处理任何与我的确切server_name值不匹配的主机名。但我不确定我应该使用哪一个。
server {
listen 80 default_server;
server_name ""; # this is by default if no server_name specified
return 444;
}
Run Code Online (Sandbox Code Playgroud)
或者
server {
listen 80 default_server;
server_name _;
return 444;
}
Run Code Online (Sandbox Code Playgroud)
我已经测试过,它们似乎表现得一样。它们之间有什么区别吗?
小智 18
简短回答:是的,server_name "";和之间有区别server_name _;
长答案: server_name ""; 定义了 自 0.8.48 以来没有host 标头的请求的匹配项,并且自 0.7.12 以来已得到支持。
https://nginx.org/en/docs/http/request_processing.html
如果不允许没有“Host”头字段的请求,可以定义一个只丢弃请求的服务器:
Run Code Online (Sandbox Code Playgroud)server { listen 80; server_name ""; return 444; }在这里,服务器名称设置为一个空字符串,它将匹配没有“Host”头字段的请求,并返回一个特殊的 nginx 非标准代码 444 来关闭连接。
另一方面,server_name _;定义一个从不与任何真实名称相交的无效服务器名称。这只是一个不匹配。因此,如果没有匹配项,nginx 将选择第一个 server{} 块并使用它。
总而言之,您可以使用server_name _;for catch-all server 块,但不能使用server_name "";.
参考 - /sf/ask/661833511/ https://blog.gahooa.com/2013/08/21/nginx-how-to-specify -a-默认服务器/
| 归档时间: |
|
| 查看次数: |
17710 次 |
| 最近记录: |