一、Nginx
1、engine X = Nginx
a、http协议:web服务器(类似于httpd)、http reverse proxy(类似于httpd)、imap/pop3 reverse proxy
b、NGINX is a free,open-source,high-performance HTTP server and reverse proxy,as well as an IMAP/POP3 proxy server
c、C10K(10K Connections)
d、Tengine,OpenResty
2、http协议
a、URL:shceme://username:password@host:port/path:params?query#frag
DocumentRoot:/PATH/TO/SOMEDIR/
Location:URL
Alias
params:
key=value&key=value
query:
b、http事务
(1)、request:
<method><URL><VERSION>
HEADERS
<body>
(2)、response:
<VERSION><STATUS><REASON-PHRASE>
HEADERS
<body>
name:value
(3)、Method:GET/HEAD/POST,PUT/DELETE,TRACES,OPTIONS
(4)、Status Code:
1xx:
2xx:成功类响应码,200
3xx:重定向类的响应码,301,302,304
4xx:客户端错误:403,404
5xx:服务端错误,502
(5)、认证:
基于ip认证
基于用户认证:basic/digest
(6)、httpd MPM:
prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求
worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求
event:主进程master负责生成子进程,每个子进程响应多个请求
3、I/O模型:
a、阻塞型,非阻塞型,复用型,信号驱动型,异步
b、同步/异步:
(1)、关注消息通知机制
(2)、消息通知
同步:等待对方返回消息
异步:被调用者通过状态,通知或回调机制通知调用者被调用者的运行状态
c、阻塞/非阻塞型
(1)、阻塞:blocking,调用结果返回之前,调用者被挂起
(2)、非阻塞:nonblocking,调用结果返回之前,调用者不会被挂起
d、一次文件IO请求,都会由两阶段组成
(1)、第一步:等待数据,即数据从磁盘到内核内存
(2)、第二步:复制数据,即数据内核内存到进程内存
e、复用型IO调用
select():1024,即一个进程最多监控1024个IO。即最多在80上监控1024个请求。我们之所以监控1024个IO是因为研发人员经过多次测试发现监控超过了1024个IO没有意义。性能几乎不会上升。
poll():没有限制,因此他的性能不比select()好多少
event-driven:(信号驱动)
epoll(Linux):libevent这个包提供更多的网络依赖库
Kqueue(BSD):
Solaris:/dev/poll
4、Nginx
http服务器,反向代理服务器,邮件代理服务器,高性能服务器。