我的 nginx.conf 中有多个“服务器”块。关于 server_name 匹配发生顺序的文档似乎有误。
我的 conf 看起来像:
server {
listen 80
server_name domain.com *.domain.com
# do stuff
}
server {
listen 80
server_name sub.domain.com *.sub.domain.com
# do something else
}
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚为什么当文档表明它应该转到第一台服务器时,为什么带有 host = www.sub.domain.com 的请求会转到正确的位置(第二台服务器)。
Nginx 文档表明服务器块是“按顺序”检查匹配的,这意味着任何对主机 *.sub.domain.com 的请求都应该被第一台服务器捕获,而不是第二台服务器。( http://wiki.nginx.org/HttpCoreModule#server_name )
此外,* 通配符匹配任意数量的子域部分,因此 *.domain.com 匹配 www.sub.domain.com。(http://nginx.org/en/docs/http/server_names.html#wildcard_names)
如果此文档有误,实际匹配顺序是什么?
Jus*_*nks 20
从 nginx 文档(http://nginx.org/en/docs/http/server_names.html):
在按名称搜索虚拟服务器时,如果名称匹配多个指定变体,例如通配符名称和正则表达式匹配,将按以下优先顺序选择第一个匹配变体:
| 归档时间: |
|
| 查看次数: |
14919 次 |
| 最近记录: |