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 相关文章推荐
Linux安装Nginx步骤详解
Mar 31 Servers
nginx基于域名,端口,不同IP的虚拟主机设置的实现
Mar 31 Servers
Nginx解决403 forbidden的完整步骤
Apr 01 Servers
nginx作grpc的反向代理踩坑总结
Jul 07 Servers
Nginx实现会话保持的两种方式
Mar 18 Servers
nginx rewrite功能使用场景分析
May 30 Servers
nginx设置资源请求目录的方式详解
May 30 Servers
WinServer2012搭建DNS服务器的方法步骤
Jun 10 Servers
shell进度条追踪指令执行时间的场景分析
Jun 16 Servers
vscode内网访问服务器的方法
Jun 28 Servers
centos环境下nginx高可用集群的搭建指南
Jul 23 Servers
Flink 侧流输出源码示例解析
Sep 23 Servers
Nginx服务器添加Systemd自定义服务过程解析
Mar 31 #Servers
nginx处理http请求实现过程解析
Mar 31 #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
You might like
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
Python算法应用实战之队列详解
2017/02/04 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
python如何修改文件时间属性
2021/02/05 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
实习销售业务员自我鉴定
2013/09/21 职场文书
应聘教师推荐信
2013/10/31 职场文书
简历自荐信
2013/12/02 职场文书
教师自荐信
2013/12/10 职场文书
霸王洗发水广告词
2014/03/14 职场文书
财务负责人任命书
2014/06/06 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
学习经验交流会总结
2015/11/02 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
MySQL约束超详解
2021/09/04 MySQL
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript