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 相关文章推荐
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
Mar 09 Servers
Nginx反向代理多个服务器的实现方法
Mar 31 Servers
扩展多台相同的Web服务器
Apr 01 Servers
nginx负载功能+nfs服务器功能解析
Feb 28 Servers
Dashboard管理Kubernetes集群与API访问配置
Apr 01 Servers
Nginx+Tomcat负载均衡多实例详解
Apr 11 Servers
如何通过cmd 连接阿里云服务器
Apr 18 Servers
Vscode中SSH插件如何远程连接Linux
May 02 Servers
nginx 添加http_stub_status_module模块
May 25 Servers
教你nginx跳转配置的四种方式
Jul 07 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
Jul 15 Servers
Tomcat安装使用及部署Web项目的3种方法汇总
Aug 14 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
2006/12/23 PHP
PHP5 面向对象(学习记录)
2009/12/02 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
JS中数组重排序方法
2016/11/11 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
scrapy爬虫完整实例
2018/01/25 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
python学习开发mock接口
2019/04/28 Python
python 实现return返回多个值
2019/11/19 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
企业总经理岗位职责
2014/02/13 职场文书
教师节活动主持词
2014/04/02 职场文书
会计系毕业求职信
2014/08/07 职场文书
2014年度工作总结报告
2014/12/15 职场文书
六年级小学生评语
2014/12/26 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电
Python使用pyecharts控件绘制图表
2022/06/05 Python
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js