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 相关文章推荐
win10安装配置nginx的过程
Mar 31 Servers
nginx部署多前端项目的几种方法
May 25 Servers
使用kubeadm命令行工具创建kubernetes集群
Mar 31 Servers
nginx.conf配置文件结构小结
Apr 08 Servers
Window server 2012 R2 AD域的组策略相关设置
Apr 28 Servers
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
Apr 29 Servers
解决IIS7下无法绑定https主机的问题
Apr 29 Servers
zabbix配置nginx监控的实现
May 25 Servers
阿里云服务器部署RabbitMQ集群的详细教程
Jun 01 Servers
详解ZABBIX监控ESXI主机的问题
Jun 21 Servers
Win2008系统搭建DHCP服务器
Jun 25 Servers
Zabbix对Kafka topic积压数据监控的问题(bug优化)
Jul 07 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
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
使用php验证复选框有效性的示例
2013/11/13 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
javascript学习网址备忘
2007/05/29 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
tensorflow获取变量维度信息
2018/03/10 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
园艺师求职信
2014/03/10 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
安全承诺书
2015/01/19 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers