nginx域正则表达式包含通配符

时间:2016-08-23 21:01:21

标签: regex nginx

除了所有子域(通配符解决方案)和使用nginx的主域外,如何拒绝非法主机头?在下面使用此代码时,所有子域都将停止工作。

if ($host !~* ^(domain.com|*.domain.com)$ ) {
    return 444;
}

我的服务器名称是:

server_name domain.com *.domain.com;

如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

看看这是否适合你:

if ($host !~* ^(.+\.)?domain\.com$ ) {
    return 444;
}

您需要逃避期间,否则它们将被解释为“任何角色”。您还可以通过匹配“domain.com”之前的可选子域前缀来简化正则表达式。

答案 1 :(得分:1)

更清洁的解决方案是为“其他”服务器名称创建一个单独的(默认)server块:

server {
    server_name .domain.com; # shorter form for "domain.com *.domain.com"

    ... # your main config here
}

server {
    listen *:80 default_server;
    server_name "";

    return 444;
}