nginx是如何处理请求的?

一、nginx如何选择适当的虚拟服务器来处理请求?(server匹配)
(1)基于主机名匹配来选择合适的虚拟服务器
     对比请求头中的host字段与server中的server_name,选择匹配的服务器。如果都不匹配,则选择该端口所对应默认的服务器。如果没有指定默认服务器,默默为服务器列表中的第一个,可以通过listen port default_server来显示指定。值得注意的是,默认服务器是与监听端口相关的,即每个端口都可以指定一个默认服务器。
server {
 
    	listen      80;
 
    	server_name example.org www.example.org;
 
    	...
}
}
     如果希望不处理没有指定host字段的请求,可以通过如下方式来实现:
server {
 
    	listen      80;
 
    	server_name "";
 
    	return      444;

}
server_name也可以不指定,默认就是为“”,匹配没有指定host的请求。
(2)基于IP 和 主机名来选择合适的虚拟服务器
首先按照IP、端口进行匹配,匹配通过的server,再按照主机名进行匹配。如果主机名不匹配,则由默认匹配该IP、端口的默认服务器来进行处理。
server {
 
    	listen      192.168.1.1:80;
 
    	server_name example.org www.example.org;
 
    	...
}
}

server {
 
    	listen      192.168.2.1:80 ;
 
    	server_name example.net www.example.net;
 
    	...
}
}
二、nginx如何选择合适的location来处理请求(location匹配)
server {
 
    listen      80;
 
    server_name example.org www.example.org;
 
    root        /data/www;

    location / {
 
        index   index.html index.php;
 
    }
   location ~* \.(gif|jpg|png)$ {
 
        expires 30d;
 
    }
    location ~ \.php$ {
 
        fastcgi_pass  localhost:9000;
 
        fastcgi_param SCRIPT_FILENAME
 
                      $document_root$fastcgi_script_name;
 
        include       fastcgi_params;
 
    }
}
}
location的匹配方式分两种:a.根据路径前缀来匹配 b.根据正则表达式来匹配
匹配的原则是:首先检测前缀匹配的location,选择有最大前缀的location作为备用选项(备胎)。然后检测正则表达式匹配的location,检测顺序与location排列顺序一致,如果某项location匹配,则后续不再检测。如果均不匹配,则使用最大前缀匹配的location。
处理方式:对于静态资源,比如/logo.jpg,则加上root指定的目录,得到logo.jpg在文件系统的位置 如/data/www/logo.jpg,返回客户端。
对于脚本index.php,请求会被传递给localhost:9090进行处理,传递的参数就是脚本的位置 /data/www/index.php,执行完成后返回结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值