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请求限制配置方法
Jul 09 Servers
学习nginx基础知识
Sep 04 Servers
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
Feb 12 Servers
HDFS免重启挂载新磁盘
Apr 06 Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
Apr 07 Servers
阿里云k8s服务升级时502错误 springboot项目应用
Apr 09 Servers
阿里云日志过滤器配置日志服务
Apr 09 Servers
在Docker容器中部署SQL Server
Apr 11 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
Windows Server 2012 R2 磁盘分区教程
Apr 29 Servers
apache ftpserver搭建ftp服务器
May 20 Servers
Zabbix对Kafka topic积压数据监控的问题(bug优化)
Jul 07 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
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
Node.js学习入门
2017/01/03 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
React实践之Tree组件的使用方法
2017/09/30 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
Python fileinput模块使用实例
2015/05/28 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
公务员培训自我鉴定
2013/09/19 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
行政主管职责范本
2014/03/07 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书