Caching integration

  No application caching

  Caching in the database

  Caching in the filesystem

Changing content on-the-fly

  The addition module

  The sub module

  The xslt module

Using Server Side Includes

Decision-making in Nginx

Creating a secure link

Generating images

Tracking website visitors

Preventing inadvertent code execution

nginx作为客户端来请求其它server的数据(如upstream模块)

因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端的连接,会占用两个连接。

当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务器。

nginx使用一个叫ngx_accept_disable的变量来控制是否去竞争accept_mutex锁。计算ngx_accept_disable的值,这个值是单进程的所有连接总数的1/8,减去剩下的空闲连接数量。

当ngx_accept_disable大于0时,不会去尝试获取accept_mutex锁,并且将ngx_accept_disable减1,直到小于0.

ngx_http_request_t

读取一行数据,分析出请求行中包含的method, uri, http_version信息。

ngx_http_init_request => ngx_http_process_request_line(设置读事件) => ngx_http_read_request_header => ngx_http_parse_request_line
=> ngx_http_process_request_headers(设置读事件) => ngx_http_process_request_headers => ngx_http_parse_header_line(解析一行请求头)
headers_in是一个链表结构,保存所有的请求头。ngx_http_headers_in(映射表) => ngx_http_process_host
headers_out

当nginx解析到两个回车换行符时,就表示请求头的结束。
ngx_http_process_request => ngx_http_request_handler(设置读写事件) => (read_event_handler/write_event_handler) => ngx_http_handler

read_event_handler => ngx_http_block_reading
write_event_handler => ngx_http_core_run_phases => 执行多阶段请求处理

nginx的各种阶段会对请求进行处理,最后会调用filter来过滤数据,对数据进行加工,如truncked传输,gzip压缩等。
filter是一个链表结构 => (header filter / body filter) => ngx_http_header_filter => ngx_http_write_filter

client_header_buffer_size => large_client_header_buffers 4 8k 表示有4个8k大小的buffer可用。为了保持请求行或者请求头的完整性,一个完整的请求行或请求头,需要放在一个连续的内存里面。

414 => 请求行大于一个buffer大小
400 => 请求头大于一个buffer大小

为了提高效率,采用状态机来解析请求行,

GET http://www.taobao.com/uri HTTP/1.0 此时,会忽略掉请求头中的host

Master Nginx(7) - Nginx for the Developer的更多相关文章

  1. Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)

    0. 前言 紧接上一篇,本篇文章我们尝试学习多节点部署 kubernetes 集群 并通过 haproxy+keepalived 实现 Master 节点的负载均衡 1. 实验环境 实验环境主要为 5 ...

  2. 苹果下如果安装nginx,给nginx安装markdown第三方插件

    用brew install nginx 这样安装的是最新版的nginx, 但是在有些情况下,安装第三方插件需要特定的版本,更高一级的版本可能装不上. 它的原理是下载安装包进行自动安装,建立软链,这样就 ...

  3. Nginx research, nginx module development

    catalog . 初探nginx架构 . handler模块 . Nginx编译.安装.配置 . Hello World模块开发 1. 初探nginx架构 nginx在启动后,在unix系统中会以d ...

  4. nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"

    iwangzheng.com tty:[0] jobs:[0] cwd:[/opt/nginx/conf] 12:45 [root@a02.cmsapi]$ /usr/local/nginx/sbin ...

  5. 启动及重新启动nginx,重启nginx后丢失nginx.pid问题解决

    停止操作 停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的 步骤1:查询nginx主进程号 ps -ef | grep nginx 在进程列表里 面找master进程 ...

  6. nginx之 nginx + tomcat + redis 负载均衡且session一致性

    说明: 本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!nginx 代理服务器ip: 10.219.24.2 ...

  7. linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)

    linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表 ...

  8. Nginx学习——Nginx启动、停止、重启和信号控制以及平滑升级

    1.Nginx 启动与停止 (1)启动方式 启动格式:Nginx可执行文件地址 -c Nginx配置文件地址 /etc/local/nginx/sbin/nginx -c /root/dufy/ngi ...

  9. keepalived结合nginx实现nginx高可用

    1.简介 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障.一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台 ...

  10. 快速掌握Nginx(四) —— Nginx日志切片和常用配置总结

    1.Nginx日志管理 1.日志简单介绍 Nginx提供了日志记录的功能,日志文件在对我们管理网站十分有用,通过访问日志(access_log)我们可以获取请求来源.客户端信息.请求的资源等信息:通过 ...

随机推荐

  1. E20170706-sl

    erode    vt.     侵蚀,腐蚀 vi.     逐渐毁坏; 削弱,损害; thin  adj.     薄的; 瘦的; 细的; 稀少的; laptop  n.     便携式电脑;

  2. SpringBoot 热部署 + IDEA

    1.使用Spring-Boot-Devtools实现热加载(这种方式会自动重启) devtools的原理: 深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类( ...

  3. $P3931 SAC E一道难题 Tree$

    problem #include <bits/stdc++.h> #define rep(i,j,n) for(register int i=j;i<=n;i++) #define ...

  4. 非常无聊——STD::sort VS 基数排序

    众所周知,Std::sort()是一个非常快速的排序算法,它基于快排,但又有所修改.一般来说用它就挺快的了,代码一行,时间复杂度O(nlogn)(难道不是大叫一声“老子要排序!!”就排好了么...). ...

  5. Spring Cloud (13) 服务网关-路由配置

    传统路由配置 所谓传统路由配置方式就是在不依赖于服务发现机制情况下,通过在配置文件中具体制定每个路由表达式与服务实例的映射关系来实现API网关对外部请求的路由.没有Eureka服务治理框架帮助的时候, ...

  6. Java系列学习(七)-面向对象

    1.成员变量和局部变量的区别 (1)在类中的位置不同 成员变量:类中 方法外 局部变量:方法中 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 成员变量:随着对象的创 ...

  7. 简述UIDatePicker的用法

    1.Locale 设置DatePicker的地区,即设置DatePicker显示的语言. 1.跟踪所有可用的地区,取出想要的地区 NSLog(@"%@", [NSLocale av ...

  8. 【转】Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

    概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...

  9. drupal 8 ——自定义权限

    在项目开发里面,我遇到了这么一个需求,就是对于node的title字段,编辑内容的角色不允许对title进行编辑.title字段是创建内容类型时自动生成的字段,不能在drupal8后台直接配置权限,所 ...

  10. ubuntu14.3安装phpmyadmin

    一.安装 sudo apt-get install phpmyadmin 二.软连接 cd /var/www/html/ sudo ln -s /usr/share/phpmyadmin phpmya ...