WEB服务器 & 应用服务器



当你搜索如何发布你的rails应用时,会发现很多名词 Apache, Unicorn, Puma, Phusion Passenger, Nginx, Rainbows等等,看起来好像都差不多,都可以用来发布,但是他们是有区别的,一些是"web servers" , 一些是"app servers".

如果你知道他们属于哪一种类型,哪一种适合你的系统,对于发布来说就轻松了很多,但是区分他们往往心里没有那么清晰。

什么是web server?它和app server到底哪里不同?可以单独使用一个吗?哪个是在Rack基础上做的封装?通过下面的讲解,这些问题就会得到解答。

什么是web server?

一个web server是一个用来接收来自站点请求,并做一些处理的程序,它可能会把请求转发给你的Rails应用,Nginx和Apache就是两个比较常见的web server。

如果你请求不经常变,例如请求静态资源css,js,imgages,你的Rails应用可能不需要关心这些,web server不要与Rails应用交互,而自己来处理这些请求。

web server可以处理SSL请求,静态文件,做一些大多数站点需要处理的事情,如果你的Rails应用需要处理某个请求,那么web server会转发给你的app server。

什么是app server?

一个app server是真正运行Rails应用的程序,app server来加载你的代码运行在内存中,当app server接收到来自web server的请求,它会告诉你的Rails应用,当你的Rails应用处理完后,app server返回response给web server,web server返回给最终用户。

没有web server,你同样可以运行大部分app server,但是大多数是在开发环境下,在生产环境中通常需要一个web server在前面,web server可以同时处理多个应用,快速的返回资源文件。

Rails有很多app server,比如Mongrel(现在已经很少用了)Unicorn, Thin, Rainbows, and Puma,每一个都有各自的优点和缺点,但是他们都会完成一个事情,就是运行你的Rails应用并处理请求。


Passenger是做什么的?

Passenger有一些特别,它可以作为app server使用。也可以内置到web server中,所以你不需要一个单独的app server来运行你的Rails应用。这非常方便,尤其是当你准备运行多用应用的,但是又不想花费时间为每一个应用设置一个app server的时候,就可以使用Passenger, 安装完Passenger,只需要指定Rails应用的目录即可,而不要再设置app server。

Passenger是一个不错的选择,但是有单数的app server还是最好的,你可以选择更适合你的应用的app server,自己来管理和运行Rails应用。

Rack是做什么的?

Rack可以使的这些app server能够运行我们的Rails应用或者Sinatra应用,Padrino应用等,Rack就像Ruby web框架(Rails,Sinatra)与app server之间通信的一种通用语言,底层上的通信规范是统一的。

他们是如何联系的?

一个web请求会先到达web server,如果这个请求需要Rails应用处理,那么web server先做一些处理后,再交给app server,app server通过Rack与Rails应用通信,当应用完成请求处理后,Rails应用返回处理结果给app server,最后 web server再返回给用户。
再具体一点,Nginx把请求转发给Unicorn,Unicorn通过Rack转发给Rails, Rails通过路由找到对应的控制器,控制器进行最终的处理

当你理解了app server与web server是如何协同工作的,再处理服务器问题的时候就会容易很多,如果以后更新了更牛的app server,你也会轻松的切换过去。

你可能感兴趣的:(应用服务器,Web,nginx,Ruby,rack)