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