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

Regex nginx域正则表达式包含通配符,regex,nginx,Regex,Nginx,如何使用nginx拒绝所有子域(通配符解决方案)和主域之外的非法主机头?当使用下面的代码时,所有子域都停止工作 if ($host !~* ^(domain.com|*.domain.com)$ ) { return 444; } 我的服务器名是: server_name domain.com *.domain.com; 如何做到这一点?看看这是否适合您: if ($host !~* ^(.+\.)?domain\.com$ ) { return 444; } 您需要转义句

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

if ($host !~* ^(domain.com|*.domain.com)$ ) {
    return 444;
}
我的服务器名是:

server_name domain.com *.domain.com;

如何做到这一点?

看看这是否适合您:

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

您需要转义句点,否则它们将被解释为“任意字符”。您还可以通过在“domain.com”之前匹配可选的子域前缀来简化正则表达式。

看看这是否适合您:

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

您需要转义句点,否则它们将被解释为“任意字符”。您还可以通过在“domain.com”之前匹配可选的子域前缀来简化正则表达式。

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

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;
}

更简洁的解决方案是为“其他”服务器名称创建一个单独的(默认)
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;
}
^
表示“字符串的开头”
^domain.com
将不匹配
foo.domain.com
,因为
domain.com
不在字符串的开头<代码>|*。也将不起作用
*
是“前面的零个或多个”,但您没有前面的
|
不是匹配字符,它是与“or”等价的正则表达式。
^
表示“字符串的开始”
^domain.com
将不匹配
foo.domain.com
,因为
domain.com
不在字符串的开头<代码>|*。也将不起作用
*
是“前面的零个或多个”,但您没有前面的
|
不是匹配字符,它是与“or”等价的正则表达式。