[Nginx] 关键概念解读
1、正向代理服务器VS反向代理服务器
我们知道,万维网的相互访问必须是外部网络间的相互访问,也就是访问的必须是外网IP或者映射为外网IP的域名。诸如192.168.1.11这样的内网IP是无法直接请求访问的。如果外网需要访问内网IP,需要通过一个媒介,这个媒介能代理外网对内网的访问。所有外网对某内网的访问都需要通过这个代理的Web服务器来过滤分发处理。这种服务器就叫反向服务器。常见的反向服务器有:Nginx、Apache、Lighttpd。其中,Apache目前的市场占有率最高。Nginx有种后来者居上的感觉,而且Nginx具有高并发,CPU和内存消耗少,稳定性好,配置简单、支持热部署等优点,受到诸如新浪、网易、豆瓣等很多公司的青睐。
正向代理服务器:只能代理内部网络对Internet的连接请求。不支持外部对内部网络的访问请求。客户机必须指定代理服务器。也就是我们通常说的通过代理服务器上网。很多同学也常用这种正向代理服务器方式“FQ”。
反向代理服务器:特指能够代理外部Internet网络上的主机来访问内部网络(比如IP地址为内网192.168.1.11)的服务器。外部网络不需要额外的配置。特别需要注意的是:反向代理服务器不保存任何网页的真实数据,所有的网页和程序,都保存在内部的Web服务器上。所以针对反向代理服务器的攻击不会使网页信息遭到破坏,从而进一步增强了Web服务器的安全性。最后要说明的是:1)反向代理负载均衡服务器是内部网络与外网交流通信的唯一通道,所以如果通道被阻断了,则内部就再也无法为外部提供任何服务,这时候需要考虑至少两台以上的反向代理负载均衡服务器,实现故障转移与高可用。2)反向代理服务器实现了负载均衡后,一般情况下用户可能用户的请求可能分发给了不同的服务器去处理,这时候就必然需要考虑session共享的问题了。
2、Rewrite规则
Rewrite的主要功能就是实现URL的重写
Nginx的Rewrite规则采用Perl兼容正则表达式的语法进行规则匹配
通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向和选择配置。
举例:
1)一些使用MVC框架的程序只有一个入口,可以通过Rewrite实现 2)将动态URL地址要伪装成静态HTML,便于搜索引擎抓取。 3)由于目录结构、域名变化的旧URL需要跳转到新的URL上,需要Rewrite处理
3、Nginx配置文件的组成部分
main全局配置
server虚拟主机配置
upstream反向代理负载均衡配置
location目录匹配配置
4、Nginx模块
Nginx的模块不能够像Apache一样动态的添加,所有的模块都需要预先编译进Nginx的二进制可执行文件中。 #cd nginx-1.4.2 #./configure --prefix=/usr/local/ --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.34 --with-zlib=/usr/local/src/zlib-1.2.8 --with-openssl=/usr/local/src/openssl-1.0.1c #make #make install
按角色分有3种
1)Handlers - 处理模块 - 用于处理HTTP请求并输出内容 2)Filters - 过滤模块 - 用于过滤Handler输出的内容 3)Load-balancers - 负载均衡模块 - 选取多个后台服务器之一并将HTTP请求转发到该服务器。
模块间的相互配合处理流程:
--->客户端发送HTTP请求到Nginx服务器 --->Nginx基于配置文件中的位置选择一个合适的处理模块 --->负载均衡模块选择一台后端服务器(反向代理时) --->处理模块进行处理并把输出缓冲放在第一个过滤模块上 --->第一个过滤模块处理后输出给第二个过滤模块处理 --->第2个交给第3个,... 第n个交给第n+1个 --->最后过滤完毕后,把处理结果发送给客户端
按类型分有6种
1)核心模块 -> 主模块 + 事件模块 2)标准HTTP模块 3)可选HTTP模块 4)邮件模块 5)第三方模块 6)补丁
5、Nginx实现Web缓存
web缓存位于web服务器和客户端之间 【客户端】--->【web缓存】--->【web服务器】 当客户端第一次访问一个URL时,Web缓存会去后端Web源服务器取回要输出的内容。 当客户端再次访问该URL时,Web缓存会直接输出内容给客户端,不再访问web源服务器。
好处:
降低内容源服务器、数据库的负担
减少网络延迟
提高用户访问的响应速度
增强用户体验
nginx本身的proxy_cache指令支持Web缓存服务。
新浪基于Nginx开发了一个NCACHE模块,也可以支持Web缓存服务。
这使得Nginx可同时作为负载均衡服务器与Web缓存服务器使用。