使用Passenger Standalone(由Nginx核心提供支持)是否意味着我们根本不需要像Apache或Nginx这样的面向Web的HTTP服务器?

最佳答案

简短的回答是"is",这确实是它的工作原理。基本上乘客独立允许你通过 passenger start 运行你的应用程序,它在幕后使用 nginx 来实际服务 rails 请求。

然而,将乘客独立运行作为唯一的网络服务器存在一个大问题。如果您想运行多个基于 ruby​​ 的网站,您必须在不同的端口上运行它们,因为无法通过单独的乘客将请求代理到单个应用程序。

在我的环境中,我需要使用多个不同版本的 ruby​​(不仅仅是不同版本的 rails)运行多个站点。例如,我有一个站点运行带有 Ruby 企业版的 Rails 2.3.x,另一个站点运行运行 Ruby 1.9.2 的 Rails 3.0.x。我使用带有单独 Nginx 代理的独立乘客来解决这个问题:

  • 每个网站都独立运行乘客,我已将其配置为监听本地 UNIX 套接字。我使用 RVM 来为我加载我的 ruby​​ 版本,所以我的 passenger start 命令有点冗长,但它看起来像这样:
  • cd /path/to/my/app; rvm use ree-1.8.7-2011.03@gemset; export GEM_HOME=/usr/local/rvm/gems/ree-1.8.7-2011.03@gemset; /usr/local/rvm/gems/ree-1.8.7-2011.03@gemset/bin/passenger start -d -S /tmp/mysite.com.sock -e production --pid-file /path/to/my/app/shared/pids/passenger.pid
  • 现在我的应用程序正在运行并监听 /tmp/mysite.com.sock ,我有另一个运行在端口 80 上的 Nginx 实例,它只使用简单的 proxy_pass 规则分别向每个站点发送请求。

  • 抱歉这篇长文章,可能信息有点多……但我发现这个组合非常有效,而且我编写了一些不错的 init.d 样式脚本来启动我的个人乘客独立应用程序。 Nginx 内存使用量非常低,以至于运行 3 个实例(每个站点 1 个,端口 80 1 个)实际上并没有任何成本。

    希望这可以帮助!

    关于apache - 乘客独立,不需要 HTTP 服务器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6362906/

    10-11 03:25