use*_*220 12 mongrel ruby-on-rails nginx
我经常读到关于Nginx和Mongrel一起使用的内容.有人可以向我解释他们是如何不同的吗?为什么需要Mongrel?为什么让Nginx直接与许多Rails服务器通信是不可取的?
jhc*_*ran 22
两者都是Web服务器,但它们不共享相同的焦点:
要清楚,你的rails应用程序本身不能直接使用,它需要你可以称之为容器(我建议你阅读一些关于http://rack.github.com/),在这种情况下是Mongrel.当你运行rails console时,它通常是webrick,我们在Ruby中拥有的最基本的web"app"服务器(它是标准库的一部分).
那我们为什么要在前面使用Nginx呢?让我们考虑一下我们只使用Mongrel:我们触发一个mongrel实例,监听端口80.如果你的请求需要500毫秒才能完成,你可以每秒处理2个客户端.但等等,显然还不够.让我们解雇另一个mongrel实例.但是我们不能在端口80上听它,因为它已经被第一个实例使用了,我们无能为力.
所以我们需要一些可以处理多个Mongrel实例的东西,通过仍然监听端口80.你输入一个Nginx服务器,它将(代理)将请求分派给你的许多mongrel实例,你现在可以添加更多实例来提供更多服务客户同时.
回到回答你的问题,让NGinx与rails服务器通信,意味着解雇一个或多个Mongrel(或Thin/Unicorn,无论服务器是什么)并通知NGinx它必须将请求传递给它们.它是一种流行的模式,用于在使用Passenger之后托管rails服务,它基本上为Apache工作者提供了处理ruby代码的方法.
Dip*_*hal 11
Nginx和Mongrel之间的区别
两者都是HTTP服务器,但它们的重点不同.Mongrel是一个快速的HTTP服务器,主要针对基于Ruby的应用程序.它可以使用Ruby代码轻松扩展.但是,它在提供静态文件方面不是很好,即它比Apache和nginx慢.此外,Rails是单线程的,这意味着在请求过程中(调用控制器方法直到实际渲染),mongrel被锁定.
要解决Mongrel和Rails的上述缺点,生产应用程序中的首选设置是将Apache或nginx作为主Web服务器,如果收到非静态Rails页面的请求,则将其传递给数字对于底层的杂种,让mongrel将渲染的页面交还给Apache/nginx并提供该页面,以及静态文件,例如images/stylesheets/ - 一开始看起来有点令人生畏和复杂,但是一旦你实际实现了它,它非常强大和稳定(我有几个应用程序已在服务器上运行数月至数年而没有一次重启).归结起来,让Apache/nginx尽其所能,让mongrel集群尽其所能,每个人都很开心.
在Apache上选择nginx主要是基于内存考虑因素.Apache是一个非常庞大的网络服务器,特别是如果你真正做的就是用它来提供一些静态文件,并在一堆杂种上平衡其余部分.Nginx非常轻巧,高性能,可以像Apache一样完成同样的工作.但是,如果您熟悉Apache,不希望得到nginx配置,并且在服务器上有大量内存,那么您仍然可以使用Apache.在基本的VPS上,nginx是一种更合适的方法.
他们都是网络服务器.它们可以提供静态文件,但是 - 使用正确的模块 - 也可以提供动态Web应用程序,例如用PHP编写的应用程序.Apache更受欢迎,功能更多,Nginx体积更小,速度更快,功能更少.
Apache和Nginx都无法提供开箱即用的Rails应用程序.为此,您需要将Apache/Nginx与某种附加组件结合使用,稍后将对此进行介绍.
Apache和Nginx也可以充当反向代理,这意味着它们可以接收传入的HTTP请求并将其转发到另一个也说HTTP的服务器.当该服务器响应HTTP响应时,Apache/Nginx会将响应转发回客户端.稍后您将了解为什么这是相关的.
Mongrel是一个Ruby"应用程序服务器".具体而言,这意味着Mongrel是一个应用程序:
WEBrick做同样的事情.与Mongrel的差异:
属于同一类别的另一个Ruby应用程序服务器是Thin.虽然它与Mongrel和WEBrick在内部不同,但在使用及其在服务器堆栈中的整体角色时,它属于同一类别.
| 归档时间: |
|
| 查看次数: |
4809 次 |
| 最近记录: |