我试图让 nginx 接受以下格式的网站:dev.*.domain.com。我已经阅读了文档,我知道我必须为此使用正则表达式。
通配符名称只能在名称的开头或结尾处包含星号,并且只能在点边框上。名称“www. .example.org”和“w .example.org”无效。但是,可以使用正则表达式指定这些名称,例如“~^www..+.example.org$”和“~^w.example.org$”。.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;
}
}
Run Code Online (Sandbox Code Playgroud)
不知何故,它最终被这条规则捕获(这是最后一条):
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;
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?提前谢谢了。
PS:我认为它被 *.domain.com 捕获,因为 nginx 测试匹配的顺序。无论如何,我可以重写 *.domain.com 以仅测试 1 个子域级别吗?即 test.domain.com 匹配 *.domain.com,但 sub.test.domain.com 不匹配。
*.domain.com 只是一个简单的后缀匹配,没有办法将其限制为单个子域级别。要完成您想要的操作,您必须将后缀检查转换为正则表达式:
server {
server_name ~^dev\..+\.domain\.com\.br$ dev.domain.com.br;
...
}
server {
server_name ~^[^.]+\.domain\.com\.br$ domain.com.br;
...
}
Run Code Online (Sandbox Code Playgroud)
由于两个检查都是正则表达式,因此服务器块的顺序很重要。
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |