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 相关文章推荐
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
May 26 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
nginx.conf配置文件结构小结
Apr 08 Servers
在Docker容器中部署SQL Server
Apr 11 Servers
Docker下安装Oracle19c
Apr 13 Servers
排查Tomcat进程假死的问题
May 06 Servers
nginx lua 操作 mysql
May 15 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
Nginx限流和黑名单配置
May 20 Servers
apache ftpserver搭建ftp服务器
May 20 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
Jun 28 Servers
Valheim服务器 Mod修改安装教程 【ValheimPlus】
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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
PHP分页函数代码(简单实用型)
2010/12/02 PHP
php设计模式 Adapter(适配器模式)
2011/06/26 PHP
php+highchats生成动态统计图
2014/05/21 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
使用Python来开发微信功能
2018/06/13 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
Python assert语句的简单使用示例
2019/07/28 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
如何教少儿学习Python编程
2020/07/10 Python
学习Python爬虫的几点建议
2020/08/05 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
社区植树节活动总结
2015/02/06 职场文书
女性健康讲座主持词
2015/07/04 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书