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块.但是无论是哪种情况,端口必须是完全匹配的

浙公网安备 33010602011771号