0

我将 nginx(和 dnsmasq)配置为监听example.test*.example.test通配符子域。一切似乎都很好。这是 nginx.conf:

server {
    listen 80;
    server_name  ~(\.)?example\.test$;
...
}

*.test现在我想从他们自己的磁盘目录中响应所有其他域。我只是不知道如何实现它,以下配置不起作用(只是禁用上述配置):

server {
    listen 80;
    server_name \.test;
...
}

即使以下配置具有相同的效果:

server {
    listen 80;
    server_name ~(?!(\.)?example)\.test;
...
}

这两个配置都有效,但会禁用 *.example.test 和 example.test 配置并像其他*.test域一样响应它们。


这是我的问题:

如何配置 nginx 以响应*.test但以不同example.test*.example.test方式响应?

4

1 回答 1

1

在浪费了一整天之后,我终于设法解决了这个问题。

对于那些可能会发现自己处于这种混乱情况的人,这里是解决方案:

# First server block for default configuration:
server {
    listen 80;
    server_name ~^[a-zA-Z0-9\-_]+\.test$; # matches domain names (e.g. anything.test)
...
}

server {
    listen 80;
    server_name  ~(\.)?example\.test$ example.test; # matches all subdomains (e.g. subdomain.example.test and sub.subdomain.example.test) as well as example.test
...
}
于 2018-10-14T04:32:09.460 回答