如何让dev。*。domain.com在nginx上工作

我试图让nginx接受这种格式的网站:dev。*。domain.com。 我读过文档,我知道我必须使用正则expression式。

通配符名称只能在名称的开始或结束处包含星号,并且只能在点边界上。 名称“www。 .example.org“和” w。example.org“无效。 但是,可以使用正则expression式来指定这些名称,例如“〜^ www .. +。example.org $”和“〜^ w”。 .example.org $”。 星号可以匹配多个名称部分。 名称“ .example.org”不仅可以匹配www.example.org,也可以匹配www.sub.example.org。

所以我有:

server { listen 80; server_name ~^dev\..+\.domain\.com\.br$ dev.domain.com.br; access_log /var/log/nginx/dev.domain.com.br.access.log; error_log /var/log/nginx/dev.domain.com.br.error.log; location / { proxy_pass http://127.0.0.1:68319/; include /etc/nginx/proxy.conf; } location /media/ { alias /my/folder/to/media/; expires 15d; } location /favicon.ico { alias /my/folder/to/favicon.ico; expires 15d; } } 

不知怎的,它结束了这条规则(这是最后一条):

 server { listen 80; server_name *.domain.com.br domain.com.br; access_log /var/log/nginx/domain.com.br.access.log; error_log /var/log/nginx/domain.com.br.error.log; location / { proxy_pass http://127.0.0.1:8080/; include /etc/nginx/proxy.conf; } location /media/ { alias /my/path/to/media/; expires 15d; } location /favicon.ico { alias /my/path/to/favicon.ico; expires 15d; } } 

有任何想法吗? 提前谢谢了。

PS:我认为这是由* .domain.com捕捉,因为nginx命令testing匹配。 无论如何,我可以重写* .domain.com只testing1个子域级别? 即test.domain.com匹配* .domain.com,但sub.test.domain.com不匹配。

* .domain.com只是一个简单的后缀匹配,没有办法将其限制到单个子域级别。 要完成你想要的,你将不得不把你的后缀检查也是一个正则expression式:

 server { server_name ~^dev\..+\.domain\.com\.br$ dev.domain.com.br; ... } server { server_name ~^[^.]+\.domain\.com\.br$ domain.com.br; ... } 

两个检查都是正则expression式,服务器块的顺序很重要。