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 相关文章推荐
Apache压力测试工具的安装使用
Mar 31 Servers
Nginx中break与last的区别详析
Mar 31 Servers
使用nginx配置访问wgcloud的方法
Jun 26 Servers
Nginx配置之实现多台服务器负载均衡
Aug 02 Servers
Nginx图片服务器配置之后图片访问404的问题解决
Mar 21 Servers
KVM基础命令详解
Apr 30 Servers
搭建Yolov5服务器
Apr 30 Servers
tomcat默认最大连接数及相关调整方法
May 06 Servers
Docker与K8s关系介绍不会Docker也可以使用K8s
Jun 25 Servers
Nginx文件已经存在全局反向代理问题排查记录
Jul 15 Servers
Nginx如何获取自定义请求header头和URL参数详解
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空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
PHP children()函数讲解
2019/02/03 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
别了 JavaScript中的isXX系列
2012/08/01 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
python抓取最新博客内容并生成Rss
2015/05/17 Python
python运行时间的几种方法
2016/06/17 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
python 通过文件夹导入包的操作
2020/06/01 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
本科毕业生自我鉴定
2013/11/02 职场文书
人事主管岗位职责范本
2013/12/04 职场文书
销售类求职信
2014/06/13 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
我是特种兵观后感
2015/06/11 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
靠谱准确的求职信
2019/04/02 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python