反向代理终于搞明白了
最近在使用Apache,全称是Apache HTTP Server,是Apache Software Foundation机构下的一个项目。Apache是一个WEB服务软件,也称为中间件。这提供一个与具体语言无关的WEB服务平台。也就是说,可以用Apache来做ASP,ASPX,PHP,JSP等等。这也就是说,Apache也能像微软的IIS一样,运行不同语言的产品。但是Apache还可以配置为反向代理服务器,可以做负载平衡,这个是比较实在的功能。
但是没有接触Apache的新手,要配置好一台实用的Apache服务器也不是易事。例如让Apache运行Tomcat提供的JSP环境,该如何配置呢?上网GOOGLE之,出来一堆信息。使用MOD_JK,ApacheModuleJServ.DLL等等(关于ApacheModuleJServ可参考What is the WebApp Module),而新出来的Apache2.2又有Proxy(MOD_PROXY.SO)可用了。那么什么是Proxy模块呢?这就要行了解反向代理这一概念了。
先解说一下常用的代理服务,即转发代理服务,是客户端与原始服务器之间的一个中间服务器。为了从原始服务器获取内容,客户端发送请求到代理服务器,然后代理服务器从原始服务器中获取内容再返回给客户端。客户端必须专门地配置转发代理来访问其他站点,如在浏览器中配置代理服务器地址及端口号等。转发代理服务器的一个典型应用就是为处于防火墙后的内部客户端提供访问外部Internet网,比如校园网用户通过代理访问国外网站,公司内网用户通过公司的统一代理访问外部Internet网站等。转发代理服务器也能够使用缓存来缓解原始服务器负载,提供响应速度。
而使用Proxy可以配置Apache作为一台反向代理服务器。示意如图。在客户端来看它就像一个普通的 Web服务器。客户端不要做任何特殊的配置。客户端发送普通的请求来获取反向代理所属空间的内容。反向代理决定将这些请求发往何处,然后就好像它本身就是原始服务器一样将请求内容返回。反向代理服务器的一个典型应用就是为处于防火墙后的服务器提供外部 Internet用户的访问。反向代理能够用于在多个后端服务器提供负载均衡,或者为较慢的后端服务器提供缓存。此外,反向代理还能够简单地将多个服务器映射到同一个URL空间。
反向代理服务器(Reverse Proxy Server)可用于缓存客户的请求以提高客户访问速度,所以反向代理服务器又称为加速服务器。对于客户送过来的请求,反向代理服务器的工作方式如下:
客户端向反向代理服务器发出请求。
如果有配置缓存,反向代理服务器先查自己缓存的内容并送回()。
如果没有配置缓存,可做负载均衡处理,将请求进一步送到某个WEB服务器。
WEB服务器作处理后,反馈结果给反向代理服务器。
注意:WEB服务器不定具有Internet公网地址,通常它也可以称为后端服务器。
从反向服务器的工作过程来看,它主要有这些特点:
加快对客户的响应时间,减轻WEB服务器负载。
保障了WEB服务器的安全,因为WEB服务器可以放到代理的后端,并使用防火墙隔离。
对WEB服务器进行负载均衡(Load Balance)。
在使用Apache的过程中,发现了另一个强劲的工具,Nginx。 Nginx 读音为engine X,是一个高能小巧的WEB服务器软件,还支持IMAP/POP3/SMTP代理服务器。 是作者Igor Sysoev为俄罗斯一大型站点Rambler.ru开发的,据说它已经在该站点运行超过两年半了。 现在软件源代码以类BSD许可证的形式发布。尽管还是测试版,但是Nginx的用户总是在夸它稳定性、丰富的功能集、示例配置文件和低系统资源等等优点了。
这里是Nginx作为一个高性能的WEB服务器优越的特性收集:
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。
而另外一个web服务器是Lighttpd,它运行在Youtube的后台,知名度很高。Lighttpd特色在于它能做Flash streaming和对fastcgi的支持,这样对于Ruby on Rails之类的程序提速不少,比起Apache要好很多。但是 nginx 要比 Lighttpd 更稳定,功能上并不弱于Lighttpd,差不多什么都有,而且比Lighttpd对于URL rewrite的支持更完善一点。对于用来提供静态文件二者都要比Apache好很多,主要就是占用的内存小。