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已编译的nginx-添加新模块
Apr 01 Servers
详解Apache SkyWalking 告警配置指南
Apr 22 Servers
解析在浏览器地址栏输入一个URL后发生了什么
Jun 21 Servers
关于nginx 实现jira反向代理的问题
Sep 25 Servers
解决使用了nginx获取IP地址都是127.0.0.1 的问题
Sep 25 Servers
使用Nginx搭载rtmp直播服务器的方法
Oct 16 Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
Apr 07 Servers
Docker下安装Oracle19c
Apr 13 Servers
使用Nginx的访问日志统计PV与UV
May 06 Servers
Windows Server 修改远程桌面端口的实现
Jun 25 Servers
vscode远程免密登入Linux服务器的配置方法
Jun 28 Servers
windows系统搭建WEB服务器详细教程
Aug 05 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
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
理解javascript对象继承
2016/04/17 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现栈的方法
2015/05/26 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
学生会离职感言
2014/02/11 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
写给老婆的检讨书
2014/02/21 职场文书
小学社会实践活动总结
2014/07/03 职场文书
股指期货心得体会
2014/09/13 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
社会实践活动总结格式
2015/05/11 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
vue 给数组添加新对象并赋值
2022/04/20 Vue.js