首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >server_name _和server_name "“在Nginx中有什么区别?

server_name _和server_name "“在Nginx中有什么区别?
EN

Server Fault用户
提问于 2018-06-02 15:20:42
回答 1查看 28.6K关注 0票数 23

我希望设置一个默认的所有捕获服务器块,以处理与我的确切server_name值不匹配的任何主机名。但我不确定该用哪一种。

代码语言:javascript
运行
复制
server {
    listen 80 default_server;
    server_name ""; # this is by default if no server_name specified
    return 444;
}

代码语言:javascript
运行
复制
server {
    listen 80 default_server;
    server_name _;
    return 444;
}

我已经测试过了,他们的行为似乎是平等的。他们之间有什么区别吗?

EN

回答 1

Server Fault用户

发布于 2018-12-26 06:17:13

简短的回答:是的,server_name "";server_name _;之间有区别

长答案:自0.8.48以来,server_name "";就为没有host头的请求定义了匹配,并且从0.7.12开始就支持它。

https://nginx.org/en/docs/http/request_processing.html

如果不允许没有“主机”头字段的请求,则可以定义一个只删除请求的服务器:服务器{List80;server_name“;返回444;}在这里,服务器名称设置为一个空字符串,该字符串将与没有”主机“头字段的请求匹配,并返回一个特殊的nginx非标准代码444,从而关闭连接。

另一方面,server_name _;定义了一个无效的服务器名,它从不与任何实名相交。这只是一场非比赛。因此,如果没有匹配,nginx将选择第一个服务器{}块并使用它。

总之,您可以使用server_name _;来捕获所有服务器块,但不能使用server_name "";

参考- https://stackoverflow.com/questions/9454764/nginx-server-name-wildcard-or-catch-all https://blog.gahooa.com/2013/08/21/nginx-how-to-specify-a-default-server/

票数 28
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/914906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档