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 stream 配置代理(Nginx TCP/UDP 负载均衡)
Nov 17 Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
Mar 21 Servers
CKAD认证中部署k8s并配置Calico插件
Mar 31 Servers
Nginx动静分离配置实现与说明
Apr 07 Servers
idea下配置tomcat避坑详解
Apr 12 Servers
Nginx的gzip相关介绍
May 11 Servers
在容器中使用nginx搭建上传下载服务器
May 11 Servers
阿里云服务器Ubuntu 20.04上安装Odoo 15
May 20 Servers
docker 制作mysql镜像并自动安装
May 20 Servers
云服务器部署 Web 项目的实现步骤
Jun 28 Servers
ubuntu20.04虚拟机无法上网的问题及解决
Dec 24 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
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
五段实用的js高级技巧
2011/12/20 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
轻松实现JavaScript图片切换
2016/01/12 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
详解a++和++a的区别
2017/08/30 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
浅谈Python的文件类型
2016/05/30 Python
python决策树之CART分类回归树详解
2017/12/20 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
经济管理专业自荐信
2013/12/30 职场文书
租房合同协议书
2014/04/09 职场文书
户籍证明书标准模板
2014/09/10 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
JS数组方法some、every和find的使用详情
2021/10/05 Javascript