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性能的一些建议
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 22 Servers
Nginx反向代理配置的全过程记录
Jun 22 Servers
图文详解nginx日志切割的实现
Jan 18 Servers
Nginx实现负载均衡的项目实践
Mar 18 Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
Apr 07 Servers
Mac电脑OS系统下安装Nginx的详细教程
Apr 14 Servers
项目中Nginx多级代理是如何获取客户端的真实IP地址
May 30 Servers
linux目录管理方法介绍
Jun 01 Servers
Flink 侧流输出源码示例解析
Sep 23 Servers
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
PHP中header用法小结
2016/05/23 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
js 操作符汇总
2014/11/08 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现JSON反序列化类对象的示例
2018/01/31 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
小班开学寄语
2014/04/04 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
校长个人总结
2015/03/03 职场文书
学校运动会加油词
2015/07/18 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL