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 这个指令:


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

前面提及过nginx 并非只为http服务的,核心是事件模块,而http 是其中依赖事件模块的。
这里说一下启动过程,操作系统内核经过三次握手后,通过accept 分配了连接内存池拿到了句柄,然后这个http模块的ngx_http_init_connection 就会收到这个socket,通过监听的方式。
然后http 设置一个client_header_timeout,表示一个接受头部的时间为60s,如果60秒还没接受完头部那么就是超时的。
当收到数据的时候,先分配1k内存(client_header_buffer_size)。这里说1k,但是如果header 超过了1k,怎么办呢? 看下完整的流程。

是这样的。 收到数据的时候肯定要分配1k用户接收头部。 然后还要有这个有一个request_pool_size 这个要4k,这4k就是存解析出来的东西。
然后如果我们前面分配接收header 为1k,那么如果uri太大了,不止1k,那么怎么办呢? 这个也是就得扩容了,比如说变成8k,然后8k不够就变成16,最多是32k。 也就是说我们的header 最大为32k。
然后如果uri 接收完了,那么就标志uri。然后继续解析header,如果不够还是按照前面的扩容,当header 接收完毕的时候,那么就标识header,然后移除前面设置的超时定时器。
后面就开始了11阶段的http 请求。
先介绍一下nginx的正则表达式:
元字符:

重复:


server_name 指令
server_name 可以跟几种域名:
server_name www.axm.com
server_name *.axm.com
server_name ~^www\d+.axm..com$
分别是具体的域名,泛域名,正则表达(前面要加~)
然后还有一个叫做server_name_in_redirect off;

如果是off的话:

如果是on的话:

这里就是区别了。
正则表达式中创建变量用():
server{
server_name ~^(www.)?(.+)$;
location / {root /sites/$2}
}
或者:
server{
server_name ~^(www.)?(?.+)$;
location / {root /sites/$domain}
}
两种都行,可以去看下我的正则表达系列,里面挺多用法的。
server 匹配顺序:
- 精确匹配
- 在前的泛域名
- 在后的泛域名
- 按文件中的顺序匹配正则表达域名
- default server 第一个或者listen 指定的default。
结
下面介绍nginx的请求11个阶段。
nginx重新整理——————http 模块中的请求过程[十一]的更多相关文章
- Nginx作为高性能服务器的缘由以及请求过程
Nginx作为高性能服务器的缘由以及请求过程 简介: Nginxx采用的是多进程(单线程)&多路IO复用模型,使用I/O多路复用技术的Nginx,就成了"并发事件驱动"的服 ...
- python中Requests模块中https请求在设置为忽略有效性验证,屏蔽告警信息的方式
增加下面的就ok了from requests.packages.urllib3.exceptions import InsecureRequestWarningrequests.packages.ur ...
- http请求在asp.net中的请求过程
当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会 ...
- Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)
一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; 提示错误信息: nginx: [emerg] the same path name " ...
- nginx日志中添加请求的response日志
换个新公司,做一些新鲜的事情,经过一天的琢磨,终于成功添加response日志 在nginx的日志中添加接口response的日志 由于此功能在nginx内置的功能中没有,需要安装第三方模块ngx_l ...
- node.js中express模块创建服务器和http模块客户端发请求
首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...
- 用lua扩展你的Nginx(整理)-----openresty
用lua扩展你的Nginx(整理) 首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Ng ...
- 用lua扩展你的Nginx(整理)
首先得声明.这不是我的原创,是在网上搜索到的一篇文章,原著是谁也搞不清楚了.按风格应该是属于章亦春的文章. 整理花了不少时间,所以就暂写成原创吧. 一. 概述 Nginx是一个高性能.支持高并发的,轻 ...
- [转帖]nginx基础整理
nginx基础整理 https://www.cnblogs.com/guigujun/p/6588545.html 目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Ngin ...
- Nginx基础整理
目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Nginx的主要企业功能 Nginx作为web服务器的主要应用场景包括: Nginx的安装 安装环境 快速安装命令集合 各个 ...
随机推荐
- 15. JVM垃圾回收器详解
1. 垃圾回收器的分类 和 GC性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现. 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC ...
- Java 如何自定义异常类
1 package com.bytezero.throwable; 2 3 /** 4 * 5 * @Description 如何自定义异常类 6 * @author Bytezero·zhengle ...
- P8+架构师养成计划
一.P8+要求 1.收集能力要求 1.专业能力 技术架构.业务架构.做到无中生有. 2.基石能力 沟通协调能力.团队管理能力.逻辑能力.风险控制能力. 3.影响力 团队内部影响.外部影响.行业影响力. ...
- vscode 花括号 突出连接线 bracket 两个设置点 (括号标识符)
vscode 花括号 突出连接线 bracket 两个设置点 外观 设置 设置里面搜索 bracket Editor - Guides: Highlight Active Bracket Pair E ...
- pod探针的三种类型及三种检测方式
Pod探针是Kubernetes中的一种机制,用于检测Pod中的容器是否正常运行.它主要有三种类型:存活探针(LivenessProbe).就绪探针(ReadinessProbe)和启动探针(Star ...
- 基于python的PC电脑报警系统
一 基本概念 1.这里实现了电脑的安全报警系统,假如有人不小心动了你的电脑,立即触发报警系统.报警是通过pc机的声卡播放报警信号. 2.该的基础是对python的pyxhook和wave库的合理应用. ...
- nuxt3前端开发教程
源码请移步:springboot+vue3+nuxt3+ts+minio开发的dsblog3.0前后端博客 - java大师 (javaman.cn) 目录结构如下: 一.nuxt3配置文件 这段代码 ...
- 三维模型OBJ格式轻量化的纹理压缩和质量关系分析
三维模型OBJ格式轻量化的纹理压缩和质量关系分析 三维模型的OBJ格式通常包含纹理信息,而对纹理进行轻量化压缩可以减小文件大小和提高加载性能.然而,在进行纹理压缩时需要权衡压缩比率和保持质量之间的关系 ...
- R语言安装教程
R 语言官方网站:The Comprehensive R Archive Network 官方镜像站列表:CRAN - Mirrors 一.官网下载R安装包 下载地址为:Index of /bin 进 ...
- Java中split的用法及一个金典入坑题目
split() 方法根据匹配给定的正则表达式来拆分字符串. 注意: . . $. | 和 * 等转义字符,必须得加 \\. 注意:多个分隔符,可以用 | 作为连字符. 语法 public String ...