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搭建rtmp直播服务器实现代码
Mar 31 Servers
解析在浏览器地址栏输入一个URL后发生了什么
Jun 21 Servers
nginx安装以及配置的详细过程记录
Sep 15 Servers
详解Nginx 被动检查服务器的存活状态
Oct 16 Servers
Nginx内网单机反向代理的实现
Nov 07 Servers
CKAD认证中部署k8s并配置Calico插件
Mar 31 Servers
Windows Server 2016 配置 IIS 的详细步骤
Apr 28 Servers
在容器中使用nginx搭建上传下载服务器
May 11 Servers
nginx 添加http_stub_status_module模块
May 25 Servers
nginx静态资源的服务器配置方法
Jul 07 Servers
Nginx报404错误的详细解决方法
Jul 23 Servers
修改Nginx配置返回指定content-type的方法
Sep 23 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正则获取页面所有图片地址
2016/03/23 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
Django框架模板用法入门教程
2019/11/04 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
py-charm延长试用期限实例
2019/12/22 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
给物业的表扬信
2014/01/21 职场文书
五年级语文教学反思
2014/01/30 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
连带责任保证书
2014/04/29 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
村官个人总结范文
2015/03/03 职场文书
python 三边测量定位的实现代码
2021/04/22 Python