Nginx初识
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;
}
}