Nginx 中多个域名无需重复配置

Nginx 中多个域名无需重复配置

我有 2 个域名

  1. 示例网
  2. 例如

以及很多子域名

  • demo1.exemple.com
  • demo2.exemple.com
  • ...
  • demo50.exemple.com

目前我有 50 个这样的块:

server {
        listen 80;
        server_name demo1.exemple.*;
        location / {
                proxy_pass http://127.0.0.1:8081;
        }
}
server {
        listen 80;
        server_name demo2.exemple.*;
        location / {
                proxy_pass http://127.0.0.1:8082;
        }
}

这个解决方案是可行的,但并没有真正优化。

我尝试“返回” .com 而不是 .net,以避免“X”冗余,但我不知道如何包含子域名的变量。

server {
  server_name *.demo.net;
  return 301 http://demo.com$request_uri;
}

应该有一种方法可以尊重 nginx 的最佳实践,并避免所有这些冗余,但我不知道如何管理这个问题。

答案1

在指令中使用命名捕获server_name。如下所示:

server {
    server_name ~^(?<name>.+).example.net$;
    return 301 http://$name.example.com$request_uri; 
}

这个文件了解详情。

答案2

如果我理解正确的话,您在不同的端口上提供了许多网站,并且您在 NginX 中为每个网站创建了一个服务器块。如果它们是完全独立的网站,那么我认为这是唯一的方法。但是,如果所有网站都在一个根文件夹下提供服务,则您应该只创建一个包含所有域名名称的服务器块。

我会因此而受苦受难,但我会考虑使用 IF 检查域名并根据域名重定向用户。我知道... IF 是邪恶的!

相关内容