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下配置Https证书详细过程
Apr 01 Servers
apache基于端口创建虚拟主机的示例
Apr 22 Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
May 27 Servers
nginx请求限制配置方法
Jul 09 Servers
Linux安装apache服务器的配置过程
Nov 27 Servers
使用 Apache Dubbo 实现远程通信(微服务架构)
Feb 12 Servers
zabbix配置nginx监控的实现
May 25 Servers
Win2008系统搭建DHCP服务器
Jun 25 Servers
windows系统安装配置nginx环境
Jun 28 Servers
Nginx跨域问题解析与解决
Aug 05 Servers
Nginx 502 bad gateway错误解决的九种方案及原因
Aug 14 Servers
ubuntu开机后ROS程序自启动问题
Dec 24 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 不使用js实现页面跳转
2014/02/11 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
js 获取Listbox选择的值的代码
2010/04/15 Javascript
JavaScript之引用类型介绍
2012/08/10 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
python redis 删除key脚本的实例
2019/02/19 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
Python 自由定制表格的实现示例
2020/03/20 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
椰子猫砂:CatSpot
2018/08/27 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
《跨越百年的美丽》教学反思
2014/02/11 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
幼儿园标语大全
2014/06/19 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
弄虚作假心得体会
2014/09/10 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
安全生产会议制度
2015/08/06 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
详解PyTorch模型保存与加载
2022/04/28 Python