Nginx服务器模块、Web请求处理机制及事件驱动模型

一:Nginx的模块化结构设计:

1、核心模块:指的是nginx服务器运行当中必不可少的模块,这些模块提供了最基本最核心的服务,比如权限控制、进程管理、错误日志、事件驱动、正则表达式解析等,nginx的源码模块位于/root/nginx-1.8.1/src目录:

[root@Server1 src]# pwd /root/nginx-1.8.1/src [root@Server1 src]# ls core #核心模块
event #事件模块
http #http模块
mail #邮件模块
misc #其他模块
os #系统模块

2、标准HTTP模块:默认即被编译到了Nginx当中,除非使用--with-out-module_name参数声明不编译,如:

ngx_http_core #配置端口、URL分析、服务器响应错误处理,别名控制以及其他HTTP核心事物。 ngx_http_auth_basic_module #基于http的认证 ngx_http_access_module #基于IP地址的访问控制策略 ngx_http_autoindex_module #处理以“/”结尾的请求并自动生成目录列表。 ngx_http_browser_module #解析HTTP请求头中的”User-Agent“ 的值。 ngx_http_charset_module#指定网页的编码。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

3、可选HTTP模块:

ngx_http_perl_module #在nginx 的配置文件中可以使用perl脚本。 ngx_http_flv_module #支持flash多媒体信息文件传输。 ngx_http_gzip_module #支持时时压缩 ngx_http_image_filter_module #支持JPEG,GIF和PNG的图片的尺寸和旋转方向 ngx_http_ssl_module #支持对HTTPS/SSL的支持 ngx_http_sub_module #支持使用指定的字符串替换相应信息的中的信息

4、邮件模块;默认没有编译,使用的场景也不多。

ngx_mail_auth_http_module.c ngx_mail.c ngx_mail_core_module.c ngx_mail.h ngx_mail_handler.c ngx_mail_imap_handler.c ngx_mail_imap_module.c ngx_mail_imap_module.h ngx_mail_parse.c ngx_mail_pop3_handler.c ngx_mail_pop3_module.c ngx_mail_pop3_module.h ngx_mail_proxy_module.c ngx_mail_smtp_handler.c ngx_mail_smtp_module.c ngx_mail_smtp_module.h ngx_mail_ssl_module.c ngx_mail_ssl_module.h

5、第三方模块:

echo-nginx-module #支持在配置文件中使用echo、sleep、time即exec等类似shell命令。 memc-nginx-module #对标准http模块ngx_http_memcached_module的扩展,支持set、add、delete等命令 lua-nginx-module #支持lua脚本语言

6、安装 echo-nginx-module 模块:

6.1:模块地址: https://github.com/openresty/echo-nginx-module.git

6.2:进到在nginx源码目录下,执行编译安装echo-nginx-module模块:

cd nginx-1.8.1 ./configure --prefix=/usr/local/nginx/ --add-module=/home/tianqi/echo-nginx-module-master make make install

6.3:配置nginx.conf:

server { listen 80; server_name hfnginx.chinacloudapp.cn; location / { root html; index index.html index.htm; echo $remote_addr; echo $remote_port; echo "zhangjie"; }

6.4:访问测试:

Nginx服务器模块、Web请求处理机制及事件驱动模型

6.5:Nginx模块组织工作图:

Nginx服务器模块、Web请求处理机制及事件驱动模型

 

二:web请求处理机制:

1、多进程方式:服务器没接受到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。

2、多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

三:同步和异步、阻塞与非阻塞:

1、同步与异步:主要是针对应用程序与内核的交互方式而言的:

同步:进程发出数据后,等内核返回响应以后才继续下一个请求,即如果内核一直不返回数据,那么进程就一直等,直到天荒地老,死机error。

异步:进程发出数据后,不等内核返回响应,接着处理下一个请求,Nginx是异步的。

Nginx服务器模块、Web请求处理机制及事件驱动模型

2、阻塞与非阻塞:

可以理解为内核与IO设备的交互方式,当内核收到进程请求IO数据时候的处理方式:

也可以简单理解为内核需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6144e5b8c332544771baf9676dc74432.html