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 相关文章推荐
如何在centos上使用yum安装rabbitmq-server
Mar 31 Servers
nginx location优先级的深入讲解
Mar 31 Servers
Nginx源码编译安装过程记录
Nov 17 Servers
Apache Pulsar集群搭建部署详细过程
Feb 12 Servers
从零开始在Centos7上部署SpringBoot项目
Apr 07 Servers
排查Tomcat进程假死的问题
May 06 Servers
详解如何使用Nginx解决跨域问题
May 06 Servers
Linux磁盘管理方法介绍
Jun 01 Servers
win server2012 r2服务器共享文件夹如何设置
Jun 21 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
Jun 28 Servers
nginx七层负载均衡配置详解
Jul 15 Servers
搭建zabbix监控以及邮件报警的超级详细教学
Jul 15 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
中国收音机工业发展史
2021/03/02 无线电
用PHP 4.2书写安全的脚本
2006/10/09 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
php中in_array函数用法探究
2014/11/25 PHP
stripos函数知识点实例分享
2019/02/11 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python文件写入实例分析
2015/04/08 Python
Python实现合并字典的方法
2015/07/07 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
详解Python循环作用域与闭包
2019/03/21 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
Python函数基本使用原理详解
2020/03/19 Python
Python读写压缩文件的方法
2020/07/30 Python
python 获取字典键值对的实现
2020/11/12 Python
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
会计毕业生自荐信
2013/11/21 职场文书
国庆横幅标语
2014/10/08 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
学校食品安全责任书
2015/01/29 职场文书
个人催款函范文
2015/06/23 职场文书
JS实现简单九宫格抽奖
2022/06/28 Javascript