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,执行完成后返回结果。

Nginx处理请求的过程可以简单概括为以下几个步骤: 1. 接收请求:当Nginx服务器启动并监听指定的端口时,它会等待客户端的连接请求。一旦有客户端发起连接请求Nginx就会接受该连接并建立起客户端与服务器之间的通信通道。 2. 解析请求头:一旦建立连接,Nginx会读取客户端发送的请求头信息。请求头包含了客户端的请求方式(GET、POST等)、目标URL、HTTP版本和其他相关信息。 3. 处理请求Nginx根据配置文件中的规则(如反向代理配置、负载均衡配置等)来决定如何处理请求。它可能将请求转发给后端服务器、进行缓存、重定向或者处理其他特定的操作。 4. 处理响应:一旦Nginx确定了如何处理请求,它会向后端服务器转发请求,并等待后端服务器返回响应。一旦收到响应,Nginx会对响应进行处理,如修改响应头、重定向或者进行其他的操作。 5. 发送响应:经过处理后的响应将由Nginx发送回客户端。Nginx会将响应内容分成较小的数据包,并使用非阻塞IO方式进行发送,以提高性能和并发能力。 6. 关闭连接:一旦响应发送完毕,Nginx会关闭与客户端的连接,释放相关的资源,并等待下一个连接请求的到来。 需要注意的是,Nginx是一个高性能的服务器软件,它使用事件驱动和异步非阻塞的架构来处理请求。这意味着Nginx可以同时处理多个并发连接,并能够高效地处理大量的请求和响应。通过适当的配置和调优,Nginx可以提供高可靠性、高并发性和高性能的服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值