nginx重新整理——————http 模块中的请求过程[十一]

前言

简单介绍一下http的一些指令。

正文

一般http的嵌套规则是这样的:

http{
  upstream{}
  split_clients {}
  map{}
  gep{}
  server{
    if(){}
    localtion{
        limit_except{....}
    }
    location{
      location{
      }
    }
  }
  server{}
}

那么指令的合并规则就是: 子配置不存在时候,直接使用父配置块。子配置存在时,直接覆盖父配置块。

但是有一个大前提,这个前提是:

值指令:存储配置项的值可以合并,比如root、access_log、gzip。

动作类指令:指定行为,不可以合并,例如: rewrite、proxy_pass 因为他们的生效阶段, server_rewrite、rewrite、content 阶段。

指令的生效范围块也不一样,这个需要看文档,比如log_format 在 http 块中生效,access_log 可以在http、server、location、 if in location、limit_expcet 中生效。

那么我们来看下listen 这个指令:

nginx重新整理——————http 模块中的请求过程[十一]

nginx重新整理——————http 模块中的请求过程[十一]

这里就大概三类:

  1. 就是地址加端口,这个是因为可能有很多网卡
  2. 第二种是 只监听端口,那么是全部的端口。
  3. 第三种就是本机处理的了,怎么说呢,是这样的,比如一个服务想某个sock中写,那么就可以直接监听这个sock的。

nginx重新整理——————http 模块中的请求过程[十一]

前面提及过nginx 并非只为http服务的,核心是事件模块,而http 是其中依赖事件模块的。

这里说一下启动过程,操作系统内核经过三次握手后,通过accept 分配了连接内存池拿到了句柄,然后这个http模块的ngx_http_init_connection 就会收到这个socket,通过监听的方式。

然后http 设置一个client_header_timeout,表示一个接受头部的时间为60s,如果60秒还没接受完头部那么就是超时的。

当收到数据的时候,先分配1k内存(client_header_buffer_size)。这里说1k,但是如果header 超过了1k,怎么办呢? 看下完整的流程。

nginx重新整理——————http 模块中的请求过程[十一]

是这样的。 收到数据的时候肯定要分配1k用户接收头部。 然后还要有这个有一个request_pool_size 这个要4k,这4k就是存解析出来的东西。

然后如果我们前面分配接收header 为1k,那么如果uri太大了,不止1k,那么怎么办呢? 这个也是就得扩容了,比如说变成8k,然后8k不够就变成16,最多是32k。 也就是说我们的header 最大为32k。

然后如果uri 接收完了,那么就标志uri。然后继续解析header,如果不够还是按照前面的扩容,当header 接收完毕的时候,那么就标识header,然后移除前面设置的超时定时器。

后面就开始了11阶段的http 请求。

先介绍一下nginx的正则表达式:

元字符:

nginx重新整理——————http 模块中的请求过程[十一]

重复:

nginx重新整理——————http 模块中的请求过程[十一]

nginx重新整理——————http 模块中的请求过程[十一]

server_name 指令

server_name 可以跟几种域名:

server_name www.axm.com
server_name *.axm.com
server_name ~^www\d+.axm..com$

分别是具体的域名,泛域名,正则表达(前面要加~)

然后还有一个叫做server_name_in_redirect off;

nginx重新整理——————http 模块中的请求过程[十一]

如果是off的话:

nginx重新整理——————http 模块中的请求过程[十一]

如果是on的话:

nginx重新整理——————http 模块中的请求过程[十一]

这里就是区别了。

正则表达式中创建变量用():

server{
server_name ~^(www.)?(.+)$;
location / {root /sites/$2}
}

或者:
server{
server_name ~^(www.)?(?.+)$;
location / {root /sites/$domain}
}

两种都行,可以去看下我的正则表达系列,里面挺多用法的。

server 匹配顺序:

  1. 精确匹配
    2.

  2. 在前的泛域名
    3.

  3. 在后的泛域名

  4. 按文件中的顺序匹配正则表达域名
  5. default server 第一个或者listen 指定的default。

下面介绍nginx的请求11个阶段。

Original: https://www.cnblogs.com/aoximin/p/16217349.html
Author: 敖毛毛
Title: nginx重新整理——————http 模块中的请求过程[十一]

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543793/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java网络编程

    网络编程是指编写运行在计算机的程序,这些设备都通过网络连接起来。要实现网络通信,我们要考虑几个问题: 1.如何建立两个节点(电脑)之间的网络连接? 2.如何向另外一个节点(电脑)发…

    Java 2023年6月8日
    069
  • IOC常用的创建对象方式

    1、User.java public class User { private String name; public User() { System.out.println(&q…

    Java 2023年6月15日
    040
  • 精通 Spring Boot 42 讲

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月30日
    074
  • Java连载146-内存泄漏和容器

    内存溢出和内存泄漏的区别 内存溢出,就是我们在内存种分配了一块内存区域,但是当我添加了超出内存的数据的时候,就会导致溢出部分,覆盖了其他的内存,影响到了其他数据.内存溢出容易招致黑…

    Java 2023年6月13日
    068
  • 学Java,Java书籍的最佳阅读顺序

    疫情以来,好久没出差了,今天出差去趟上海,早上 4 点多就起床了,到机场天都没亮。到登机口离起飞还一小时,趁着等飞机的时间,抓紧码字,把这篇文章收个尾。 今天和大家说说学 Java…

    Java 2023年6月7日
    047
  • Python爬虫详解

    1、任务介绍 需求分析爬取豆瓣电影Top250的基本信息,包括电影的名称,豆瓣评分,评价数,电影概况,电影链接等。 https://movie.douban.com/top250 …

    Java 2023年6月14日
    078
  • 面向对象设计六大原则

    六大设计原则主要是指: 单一职责原则(Single Responsibility Principle); 开闭原则(Open Closed Principle); 里氏替换原则(L…

    Java 2023年6月9日
    066
  • JS实现 JSON扁平数据转换树状数据

    后台我拿的数据是这样的格式: 转换后的数据差不多就是这样的格式 js转换方式 后台获取数组 jsonData 然后转换成树状的方式 Original: https://www.cn…

    Java 2023年6月5日
    070
  • 并发编程之:ThreadLocal

    大家好,我是小黑,一个在互联网苟且偷生的农民工。 从前上一期【并发编程之:synchronized】 我们学到要保证在并发情况下对于共享资源的安全访问,就需要用到锁。 但是,加锁通…

    Java 2023年6月7日
    095
  • 头秃了,Spring Boot 自动配置源码解析了解一波~

    前言 源码版本 @SpringBootApplication 干了什么? @EnableAutoConfiguration 干了什么? 总结 为什么 Spring Boot这么火?…

    Java 2023年6月14日
    065
  • 数据库时间格式处理

    使用 DateUtil转换,这个还是比较常用的一种,下面贴代码(可以直接复制使用): /** * 日期工具类,注意导包import和package * StringUtils,Da…

    Java 2023年6月7日
    062
  • MySQL排序原理与案例分析

    转载:MySQL排序原理与案例分析 posted @2021-04-04 18:12 轨迹320 阅读(34 ) 评论() 编辑 Original: https://www.cnb…

    Java 2023年6月5日
    086
  • 学习进度第二次报告

    学习课程以及部分学习知识总结: 我的目标计划: 通过学习CSS基础知识,准备对我之前写的一些网页进行精细修饰。然后再去B站以及CSDN等技术网站上 多找找关于网页修饰这一类的课程和…

    Java 2023年6月6日
    059
  • spring注入

    出处:http://cnblogs.com/daishuguang Original: https://www.cnblogs.com/daishuguang/p/5201332….

    Java 2023年5月30日
    059
  • SpingMVC:结果跳转方式与数据处理

    一:SpingMVC:结果跳转方式 SpringMVC:通过SpringMVC来实现转发和重定向-无需视图解析器 测试前需要将视图解析器注掉: 测试: @Controller pu…

    Java 2023年6月5日
    072
  • 力扣Q239滑动窗口最大值SlidingWindowMaximum

    Q239SlidingWindowMaximum 简介 给你一个整数数组 nums ,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k …

    Java 2023年6月8日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球