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反向代理多个服务器的实现方法
Mar 31 Servers
Nginx搭建rtmp直播服务器实现代码
Mar 31 Servers
如何在centos上使用yum安装rabbitmq-server
Mar 31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 Servers
nginx的zabbix 5.0安装部署的方法步骤
Jul 16 Servers
Ubuntu Server 安装Tomcat并配置systemctl
Apr 28 Servers
shell进度条追踪指令执行时间的场景分析
Jun 16 Servers
windows server 2016 域环境搭建的方法步骤(图文)
Jun 25 Servers
nginx静态资源的服务器配置方法
Jul 07 Servers
nginx七层负载均衡配置详解
Jul 15 Servers
Linux在两个服务器直接传文件的操作方法
Aug 05 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
php zend 相对路径问题
2009/01/12 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
android面试问题与答案
2016/12/27 面试题
两则小学生的自我评价分享
2013/11/14 职场文书
物理力学求职信
2014/02/18 职场文书
小学清明节活动方案
2014/03/08 职场文书
男女朋友协议书
2014/04/23 职场文书
元旦趣味活动方案
2014/08/22 职场文书
教师节学生演讲稿
2014/09/03 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
文明家庭事迹材料
2014/12/20 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
vue递归实现树形组件
2022/07/15 Vue.js