Master Nginx(7) - Nginx for the Developer
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的更多相关文章
- Kubernetes 二进制部署(二)集群部署(多 Master 节点通过 Nginx 负载均衡)
0. 前言 紧接上一篇,本篇文章我们尝试学习多节点部署 kubernetes 集群 并通过 haproxy+keepalived 实现 Master 节点的负载均衡 1. 实验环境 实验环境主要为 5 ...
- 苹果下如果安装nginx,给nginx安装markdown第三方插件
用brew install nginx 这样安装的是最新版的nginx, 但是在有些情况下,安装第三方插件需要特定的版本,更高一级的版本可能装不上. 它的原理是下载安装包进行自动安装,建立软链,这样就 ...
- Nginx research, nginx module development
catalog . 初探nginx架构 . handler模块 . Nginx编译.安装.配置 . Hello World模块开发 1. 初探nginx架构 nginx在启动后,在unix系统中会以d ...
- 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 ...
- 启动及重新启动nginx,重启nginx后丢失nginx.pid问题解决
停止操作 停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的 步骤1:查询nginx主进程号 ps -ef | grep nginx 在进程列表里 面找master进程 ...
- nginx之 nginx + tomcat + redis 负载均衡且session一致性
说明: 本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!nginx 代理服务器ip: 10.219.24.2 ...
- linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)
linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表 ...
- Nginx学习——Nginx启动、停止、重启和信号控制以及平滑升级
1.Nginx 启动与停止 (1)启动方式 启动格式:Nginx可执行文件地址 -c Nginx配置文件地址 /etc/local/nginx/sbin/nginx -c /root/dufy/ngi ...
- keepalived结合nginx实现nginx高可用
1.简介 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障.一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台 ...
- 快速掌握Nginx(四) —— Nginx日志切片和常用配置总结
1.Nginx日志管理 1.日志简单介绍 Nginx提供了日志记录的功能,日志文件在对我们管理网站十分有用,通过访问日志(access_log)我们可以获取请求来源.客户端信息.请求的资源等信息:通过 ...
随机推荐
- 重装mysql
重装mysql方法. 转自http://blog.sina.com.cn/s/blog_73000beb01012eh4.html 1.删除 mysql 1.1 sudo apt-get autore ...
- residual sum of squares(ESL 读书笔记)
The learning algorithm has the property that it can modify its input/output relationship f-hat in re ...
- mkisofs
createrepo -g /enp/comps.xml . yum -y --downloadonly --downloaddir=/enp/Packages upgrade mkisofs -o ...
- 51. ExtJs4之Ext.util.JSON编码和解码JSON对象
转自:https://blog.csdn.net/iteye_9439/article/details/82518158 1.decode() 该方法用于将符合JSON格式的String进行解码成为一 ...
- windows下 redis/tomcat 服务自启动
//设置redis服务自启动 //根据个人配置执行语句. redis-server --service-install redis.windows.conf --loglevel verbose ...
- BZOJ 4310 二分+SA+RMQ
思路: 首先求出后缀数组和height数组,这样能得到本质不同的子串数目 这里利用:本质不同的子串=∑(Len−SA[i]−height[i])=∑(Len−SA[i]−height[i])利用SA[ ...
- js 中的定时器
在js中的定时器分两种:1.setTimeout() 2.setInterval() 1.setTimeOut() 只在指定时间后执行一次 /定时器 异步运行 function hello(){ al ...
- JVM 优化之逃逸分析
整理自 周志明<深入JVM> 1, 是JVM优化技术,它不是直接优化手段,而是为其它优化手段提供依据. 2,逃逸分析主要就是分析对象的动态作用域. 3,逃逸有两种:方法逃逸和线程逃逸. ...
- 超经典~超全的jQuery插件大全
海量的jQuery插件帖,很经典,不知道什么时候开始流传,很早以前就收藏过,为了工作方便还是发了一份放在日志里面. 其中有些已经无法访问,或许是文件移除,或许是被封锁.大家分享的东西,没什么特别的可说 ...
- html5——语义标签
传统布局 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...