nginx处理http请求实现过程解析
nginx首先决定要用配置文件里的哪个server{}块来处理,假设有下面的server{}配置
nginx会根据过来的http请求头里的host字段里的值,来判断使用哪个server{}。
如果请求头里没有host字段,或者host字段里的值,和nginx配置文件里的server{}里的{server_name}都不匹配,则使用第一个server{},来处理这个请求。
如果请求头里的host字段里的值和nginx配置文件里的某个server{}里的{server_name},匹配上了,则使用这个server{},来处理这个请求。
可以使用curl工具来方便的做实验,curl可以设置http请求的请求头,所以可以任意设置host字段,用【-h】来设置。下面的10.210.65.73是安装了nginx的机器的ip地址。
所以用下面的命令,发送了http请求后,nginx就会使用server{server_name aaa}来处理这个请求。
curl.exe -h "host: aaa" 10.210.65.73
非常重要的结论:server_name对应的是http请求头里的host字段的值,有了上面的理论支撑,就可以很容易的设置反向代理和负载均衡:
当过来的http请求头里的host字段为aaa时,storage.test来处理。
当过来的http请求头里的host字段为bbb时,tracker.test来处理。
server{}里的listen监听的是谁的端口?
监听的是:发送过来http请求的进程(大部分是浏览器)的端口(如果是http请求,则为端口为80),不是nginx服务器自己进程的端口。
nginx根据http请求头的host字段里的值,和发送过来http请求的进程(大部分是浏览器)的端口,来决定使用哪个server{}来处理http请求。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 阿里云计算ACP练习12
下一篇: 又该怎么办