nginx请求是如何找到对应的vhost的
vhost和server对应
vhost的匹配逻辑
在请求nginx
时,判断请求属于哪个vhost
,主要是server
块中的listen
和server_name
两个字段决定
listen
listen
字段定义server
响应的ip
和端口,如果没有明确配置listen
字段,默认监听0.0.0.0:80(root)
或者0.0.0.0:8080(非root)
listen可以被配置为:
- 一个ip和端口的组合
- 一个单独的ip,默认监听80端口
- 一个单独的端口,默认监听所有的ip接口
- 一个unix socket路径
其中最后一项通常只用于在不同的server之间传递请求
server选择的规则
- nginx首先将所有不完整的listen指令进行转换,比如没有listen字段的转换为listen 0.0.0.0:80,listen 1.1.1.1转换为listen 1.1.1.1:80等
- nginx根据请求的ip和端口创建一个与请求最匹配的server块列表,优先匹配指定了特定ip的server块,其次才会选择listen 0.0.0.0的这种server块.但是无论是哪种情况,端口必须是完全匹配的