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
win10安装配置nginx的过程
Mar 31 Servers
Nginx配置80端口访问8080及项目名地址方法解析
Mar 31 Servers
Nginx 根据URL带的参数转发的实现
Apr 01 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
了解Kubernetes中的Service和Endpoint
Apr 01 Servers
Nginx速查手册及常见问题
Apr 07 Servers
Nginx 配置 HTTPS的详细过程
May 30 Servers
Nginx本地配置SSL访问的实例教程
May 30 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
Jul 15 Servers
Centos7 Shell编程之正则表达式、文本处理工具详解
Aug 05 Servers
Windows Server 2016服务器用户管理及远程授权图文教程
Aug 14 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
WHOIS类的修改版
2006/10/09 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
Yii2如何批量添加数据
2016/05/17 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
脚本收藏iframe
2006/07/21 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
大学生创业计划书怎么写
2014/09/15 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
元旦主持词开场白
2015/05/29 职场文书
退伍军人感言
2015/08/01 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书