欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

nginx处理http请求实现过程解析

程序员文章站 2022-03-23 18:57:08
nginx首先决定要用配置文件里的哪个server{}块来处理,假设有下面的server{}配置server { listen 80; server_name aaa; ...}server...

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请求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。