nginx:如何针对没有Host: header的情况获取服务器?

3

针对在主机头中使用IP地址的人(server_name ~^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+;),我有一个特殊的服务器{}块,这很好用。我想为没有提供任何主机头的情况下使用不同的服务器块。我一直在测试:

telnet localhost 80
GET /foobar HTTP/1.0

根据我的日志记录(日志格式中包含"$http_host"),我发现这显示为"-"(连字符而非下划线)。但是这个服务器块:

server {
        listen 80;
        listen [::]:80;

        # hyphen not underscore
        server_name ~^-*$;

        root /var/www/no-host;
        default_type text/plain;
        index foo.ey
        location / {
                try_files $uri /foo.ey;
        }
}

请求从未被使用,而是转到默认值,其中包含server_name _;(下划线而非连字符)。

我的用例类似于域名停放网站,我希望处理许多主机名,并且所有合法的主机名都应在数据库中查找,但我希望尽早筛选某些非法主机名。


尝试使用“^$”来匹配空服务器名称。 - Barmar
在我添加^-*$中的-*之前,我曾经有过那个问题。 - Cupcake Protocol
2
答案在文档中:http://nginx.org/en/docs/http/server_names.html 搜索单词“empty”。 - Barmar
2
server_name ""; - Barmar
那个可行。谢谢 @Barmar。 - Cupcake Protocol
显示剩余3条评论
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接