kill -HUP pid 重启nginx
./nginx -s reload/stop 重启/停止nginx
select/poll/epoll/kqueue
在24G内存的机器上,处理的并发请求数达到过200万
ulimit -n 一个进程所能够打开的fd的最大数
基本的web服务器,事件通常有三种类型,网络事件、信号、定时器ginx通过设置worker_connectons来设置每个进程支持的最大连接数
对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes,而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/2。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接Nginx模块:
1、event module: 搭建了独立于操作系统的事件处理机制的框架,提供了具体事件的处理。 包括ngx_events_module, ngx_event_core_module和ngx_epoll_module等。Nginx具体 使用何种事件处理模块,依赖于具体的操作系统和编译选项2、phase handler: 此类型的模块被称为handler模块。主要负责处理客户端请求并产生待响应
内容,比如ngx_http_static_module模块,负责客户端的静态页面请求处理并将对应的磁盘 文件准备为响应内容输出3、output filter: filter模块,主要负责对输出的内容进行处理,可以对输出进行修改。
例如,可实现对输出的所有HTML页面增加预定义footbar一类的工作,或者对输出的图片的URL 进行替换之类的工作4、upstream: upstream模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从
后端服务器上读取响应,返回客户端。upstream模块是一种特殊的handler,只不过响应内容 不是真正由自己产生的,而是从后端服务器上读取的5、load-balance: 负载均衡模块,实现特定的算法,在众多的后端服务器中,选择服务器出来
作为某个请求的转发服务器 Nginx的请求处理 Nginx使用一个多进程模型来对外提供服务,其中一个master进程,多个worker进程, master进程负责管理Nginx本身和其它worker进程。 所有实际上的业务处理逻辑都 在worker进程。worker进程中又一个函数,执行无限循环,不断处理收到的来自客户端 的请求,并进行处理,直到整个Nginx服务被停止。worker进程中,ngx_worker_process_cycle函数就是这个无限循环的处理函数,一个
请求的简单处理流程如下1、操作系统提供的机制(epoll, kqueue等)产生相关的事件
2、接收和处理这些事件,如是接受到数据,则产生更高层的request对象 3、处理request的header和body 4、产生响应,并发送回客户端 5、完成request的处理 6、重新初始化定时器及其他事件 Nginx指令上下文1、main: Nginx在运行时与具体业务功能无关的一些参数,比如工作进程数,运行的身份等
2、http: 与提供http服务相关的一些配置参数,例如是否使用keepalive,gzip压缩等 3、server: http服务上支持若干虚拟主机,每个虚拟主机一个对应的server配置项,配置 项里面包含该虚拟主机相关的配置。在提供mail服务的代理,也可以建立若干的server, 每个server通过监听的地址来区分 4、location: http服务中,某些特定的URL对应的一系列配置项 5、mail: 实现email相关的SMTP/IMAP/POP3代理,共享的一些配置项 Nginx简单配置示例user nobody;worker_processes 1;error_log logs/error.log info;events { worker_connections 1024;}http { server { listen 80; server_name www.linuxidc.com; access_log logs/linuxidc.access.log main; location / { index index.html; root /var/www/linuxidc.com/htdocs; } } server { listen 80; server_name www.Androidj.com; access_log logs/androidj.access.log main; location / { index index.html; root /var/www/androidj.com/htdocs; } }}mail { auth_http 127.0.0.1:80/auth.php; pop3_capabilities "TOP" "USER"; imap_capabilities "IMAP4rev1" "UIDPLUS"; server { listen 110; protocol pop3; proxy on; } server { listen 25; protocol smtp; proxy on; smtp_auth login plain; xclient off; }}