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配置访问wgcloud的方法
Jun 26 Servers
解决使用了nginx获取IP地址都是127.0.0.1 的问题
Sep 25 Servers
Nginx+Tomcat负载均衡集群的实现示例
Oct 24 Servers
nginx中封禁ip和允许内网ip访问的实现示例
Mar 17 Servers
Kubernetes控制节点的部署
Apr 01 Servers
apache ftpserver搭建ftp服务器
May 20 Servers
openEuler 搭建java开发环境的详细过程
Jun 10 Servers
Windows10安装Apache2.4的方法步骤
Jun 25 Servers
Zabbix对Kafka topic积压数据监控的问题(bug优化)
Jul 07 Servers
在windows server 2012 r2中安装mysql的详细步骤
Jul 23 Servers
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
Aug 05 Servers
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
Aug 14 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中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
python编写爬虫小程序
2015/05/14 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
Python测试人员需要掌握的知识
2018/02/08 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
北大自主招生自荐信
2013/10/19 职场文书
留学自荐信写作方法
2014/01/27 职场文书
法语专业求职信
2014/07/20 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
公司业务员管理制度
2015/08/05 职场文书
Python实现位图分割的效果
2021/11/20 Python
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python