![Nginx 中多个域名无需重复配置](https://linux22.com/image/676128/Nginx%20%E4%B8%AD%E5%A4%9A%E4%B8%AA%E5%9F%9F%E5%90%8D%E6%97%A0%E9%9C%80%E9%87%8D%E5%A4%8D%E9%85%8D%E7%BD%AE.png)
我有 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 是邪恶的!