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 相关文章推荐
如何利用map实现Nginx允许多个域名跨域
Mar 31 Servers
Nginx本地目录映射实现代码实例
Mar 31 Servers
如何在centos上使用yum安装rabbitmq-server
Mar 31 Servers
详解Nginx 被动检查服务器的存活状态
Oct 16 Servers
Nginx内网单机反向代理的实现
Nov 07 Servers
Nginx虚拟主机的搭建的实现步骤
Jan 18 Servers
CKAD认证中部署k8s并配置Calico插件
Mar 31 Servers
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
Apr 29 Servers
服务器SVN搭建图文安装过程
Jun 21 Servers
apache虚拟主机配置的三种方式(小结)
Jul 23 Servers
win10搭建配置ftp服务器的方法
Aug 05 Servers
Centos7 Shell编程之正则表达式、文本处理工具详解
Aug 05 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 分页分组类
2009/12/10 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
jQuery数组处理方法汇总
2011/06/20 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
数学系毕业生的自我评价
2014/01/10 职场文书
四年大学自我鉴定
2014/02/17 职场文书
大课间活动实施方案
2014/03/06 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
重点工程汇报材料
2014/08/27 职场文书
义卖募捐活动总结
2015/05/09 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL