首页 > 解决方案 > nginx:在没有 Host: 标头的情况下如何获取服务器?

问题描述

对于在主机标头 ( ) 中使用 IP 地址的人,我有一个特殊的 server {} 块,server_name ~^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+;并且工作正常。当根本没有提供主机标头时,我想要一个不同的服务器块。我一直在测试:

telnet localhost 80
GET /foobar HTTP/1.0

我从我的日志记录("$http_host"在 log_format 中)看到这显示为"-"(连字符而不是下划线)。但是这个服务器块:

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 _;(下划线不是连字符)。

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

标签: nginxhttp-headersnginx-config

解决方案


答案在文档中:https
://nginx.org/en/docs/http/server_names.html 搜索单词“empty”

使固定: server_name "";

巴尔马尔


推荐阅读