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
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
Nginx安装完成没有生成sbin目录的解决方法
Mar 31 Servers
Nginx配置文件详解以及优化建议指南
Sep 15 Servers
nginx刷新页面出现404解决方案(亲测有效)
Mar 18 Servers
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
Apr 07 Servers
nginx.conf配置文件结构小结
Apr 08 Servers
阿里云日志过滤器配置日志服务
Apr 09 Servers
Nginx+Tomcat负载均衡多实例详解
Apr 11 Servers
Mac电脑OS系统下安装Nginx的详细教程
Apr 14 Servers
Win10系统搭建ftp文件服务器详细教程
Aug 05 Servers
Nginx 502 bad gateway错误解决的九种方案及原因
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基本函数汇总
2015/07/09 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
python中解析json格式文件的方法示例
2017/05/03 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
亚马逊印度站:Amazon.in
2017/10/15 全球购物
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
财务助理岗位职责
2013/11/10 职场文书
行政助理的职责
2013/11/14 职场文书
销售经理工作职责范文
2013/12/03 职场文书
抄作业检讨书
2014/02/17 职场文书
感恩之星事迹材料
2014/05/03 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python