1.nginx是啥
Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。
产生原因:apache的限制:发展周期长,重量级,不支持高并发;进程和线程切换消耗大量资源。急需高性能Web服务器进行替代。
2.nginx的优点
(1)Nginx 使用基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接;
(2)开源
(3)跨平台
3.nginx作用
(1)正向代理;代理客户端去访问,例如:访问原本不能访问的网站、做缓存、隐藏访问用户信息
(2)反向代理;代理服务端接收访问;对用户透明、公网内网转换、负载均衡;
两者共同运用场景:
4.nginx模块分类
虽然Nginx模块有很多,并且每个模块实现功能各不相同,但是根据模块功能性质,可以分为如下四类:
1.handlers:处理客户端请求并产生带相应内容,比如返回静态文件等。
2.filters:对handlers产生的响应内容做各种过滤处理,例如可以根据时间戳判断出前后两次请求的相应内容变化,如果没有变化,那么直接响应304,让客户端使用缓存即可。
3.upstream:主要用户nginx的反向代理功能,把客户端请求转发给后端真实服务器,真实服务器做出处理,通过反向代理服务器转发给客户端,ngx_http_proxy_module就是标准的代理模块。
4.load-balance:当nginx做反向代理服务器时,通常真实服务器有多个,这时如何选择对应的后端真实服务器来进行处理,就是该模块起到的作用,使用不同的算法达到负载均衡。
5.内存池使用
ngx_pool_data_t(内存池数据块结构)
1: typedef struct {
2: u_char *last;
3: u_char *end;
4: ngx_pool_t *next;
5: ngx_uint_t failed;
6: } ngx_pool_data_t;
ngx_pool_s(内存池头部结构)
1: struct ngx_pool_s {
2: ngx_pool_data_t d;
3: size_t max;
4: ngx_pool_t *current;
5: ngx_chain_t *chain;
6: ngx_pool_large_t *large;
7: ngx_pool_cleanup_t *cleanup;
8: ngx_log_t *log;
9: };
6.基本数据类型
(1)ngx_array 使用内存池封装的数组
(2)ngx_queue_s 双向队列
(3)ngx_hash
(4)ngx_list