NginX子域名

在迁移服务器上工作,并没有运气设置我的子域。 我正在寻找的行为相当简单:

  • www.domain.com&domain.com – > / var / www / live /
  • * .domain.com – > / var / www / * /(假设子目录存在,否则redirect到主站点)

我已经尝试在几个configuration使用$主机,我已经尝试使用许多变化:

server_name ~^(.*)\.domain\.com$;

root /var/www/$1;

server_name ~^(?<subdomain>.+)\.domain\.com$;

root /var/www/$subdomain ;

这是基本的NginX行为,但我完全难住,我浪费了太多的时间试图破解我的方式通过这个。 任何人都可以解释一下这个解决scheme吗?

提前致谢!

尝试这个:

 server { listen 80; server_name example.com *.example.com; root /var/www/example.com/$subdomain; set $subdomain ""; if ($host ~* ^([a-z0-9-\.]+)\.example.com$) { set $subdomain $1; } if ($host ~* ^(www.)?example.com$) { set $subdomain "live"; } } 

你的第二个server_name指令看起来是正确的,应该工作(并且是最好的解决scheme恕我直言)。 该文档为较旧的PCRE版本提供了以下语法,因此您可以尝试以下操作:

 server_name ~^(?P<subdomain>.+)\.domain\.com$; root /var/www/$subdomain; 

其他人正在使用地图来帮助解决这个问题。 这里是地图的直接文档 。

还有一些其他的事情要检查:检查你使用的Nginx版本是否与最新版本一致。 如果你在网上阅读文档,他们可能会引用比你实际拥有的更新的行为。

另外,我的理解是,像?<subdomain>这样的反向引用语法是从libpcre部分启用的。 检查man pcrepattern ,看看它是否有“NAMED SUBPATTERNS”部分。