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+Tomcat实现负载均衡、动静分离的原理解析
Mar 31 Servers
Nginx设置日志打印post请求参数的方法
Mar 31 Servers
Nginx的反向代理实例详解
Mar 31 Servers
Nginx Rewrite使用场景及配置方法解析
Apr 01 Servers
Apache POI的基本使用详解
Nov 07 Servers
Nginx工作模式及代理配置的使用细节
Mar 21 Servers
Nginx的gzip相关介绍
May 11 Servers
git stash(储藏)的用法总结
Jun 25 Servers
windows server2016安装oracle 11g的图文教程
Jul 15 Servers
apache虚拟主机配置的三种方式(小结)
Jul 23 Servers
WIN10使用IIS部署ftp服务器详细教程
Aug 05 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四大安全策略
2014/03/12 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
htm调用JS代码
2007/03/15 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
在Django的session中使用User对象的方法
2015/07/23 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
架构师岗位职责
2013/11/18 职场文书
服务员岗位责任制
2014/02/11 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
5个实用的JavaScript新特性
2022/06/16 Javascript