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


Posted in Servers onMarch 31, 2021

nginx首先决定要用配置文件里的哪个server{}块来处理,假设有下面的server{}配置

server {
  listen   80;
  server_name aaa;
  ...
}

server {
  listen   80;
  server_name bbb;
  ...
}

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来处理。

#负载均衡配置,IP为129的机器配置高,所以给他的数字的27,就是让它多处理
  upstream storage.test {
   server 10.210.65.129:80 weight=27;
   server 10.210.65.130:80 weight=1;
  }

  #负载均衡配置
  upstream tracker.test {
   server 10.210.65.52:80 weight=7;
   server 10.210.65.53:80 weight=2;
  }

  #文件的存储
  server {
    listen    80;
    server_name aaa;
    location / {
      #http:://后面的内容是自己定义,对应上面upstream的名字
      proxy_pass http://storage.test;
    }
  }

  #文件服务器tracker
  server {
    listen    80;
    server_name bbb;

    location / {
      #http:://后面的内容是自己定义的,对应上面upstream的名字
      proxy_pass http://tracker.test;
    }

  }

server{}里的listen监听的是谁的端口?

监听的是:发送过来http请求的进程(大部分是浏览器)的端口(如果是http请求,则为端口为80),不是nginx服务器自己进程的端口。

nginx根据http请求头的Host字段里的值,和发送过来http请求的进程(大部分是浏览器)的端口,来决定使用哪个server{}来处理http请求。

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

Servers 相关文章推荐
Nginx服务器添加Systemd自定义服务过程解析
Mar 31 Servers
Nginx的反向代理实例详解
Mar 31 Servers
nginx location优先级的深入讲解
Mar 31 Servers
详解nginx.conf 中 root 目录设置问题
Apr 01 Servers
apache基于端口创建虚拟主机的示例
Apr 24 Servers
Nginx 反向代理解决跨域问题多种情况分析
Jan 18 Servers
Apache Pulsar集群搭建部署详细过程
Feb 12 Servers
Nginx中使用Lua脚本与图片的缩略图处理的实现
Mar 18 Servers
Nginx如何配置根据路径转发详解
Jul 23 Servers
Flink 侧流输出源码示例解析
Sep 23 Servers
源码安装apache脚本部署过程详解
Sep 23 Servers
Nginx开启Brotli压缩算法实现过程详解
Nginx配置SSL证书出错解决方案
Mar 31 #Servers
Nginx配置并兼容HTTP实现代码解析
Mar 31 #Servers
基于Nginx实现限制某IP短时间访问次数
Mar 31 #Servers
Nginx tp3.2.3 404问题解决方案
Mar 31 #Servers
解决Nginx 配置 proxy_pass 后 返回404问题
nginx配置ssl实现https的方法示例
Mar 31 #Servers
You might like
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
Ajax和javascript的区别
2013/07/20 面试题
合同意向书范本
2014/07/30 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
委托公证书格式
2015/01/26 职场文书
python实现简单的聊天小程序
2021/07/07 Python