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限制并发连接请求数的方法
Apr 01 Servers
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
Apr 04 Servers
解析在浏览器地址栏输入一个URL后发生了什么
Jun 21 Servers
制作能在nginx和IIS中使用的ssl证书
Jun 21 Servers
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
Nginx防盗链与服务优化配置的全过程
Jan 18 Servers
Tomcat用户管理的优化配置详解
Mar 31 Servers
Consul在linux环境的集群部署
Apr 08 Servers
Windows server 2012搭建FTP服务器
Apr 29 Servers
Windows Server 2012 R2 磁盘分区教程
Apr 29 Servers
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
Jul 15 Servers
Windows server 2003卸载和安装IIS的图文教程
Jul 15 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
使用php4加速网络传输
2006/10/09 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
清空上传控件input file的值
2010/07/03 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
javascript实现时钟动画
2020/12/03 Javascript
可拖拽组件slider.js使用方法详解
2020/12/04 Javascript
python批量下载图片的三种方法
2013/04/22 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
python爬取网页转换为PDF文件
2018/06/07 Python
详解python3中zipfile模块用法
2018/06/18 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python的scipy实现插值的示例代码
2019/11/12 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
八年级音乐教学反思
2014/01/09 职场文书
师范生自荐信模板
2014/05/28 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
怎样写观后感
2015/06/19 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
python数字类型和占位符详情
2022/03/13 Python