1

我的问题是我如何在 Debian 6 下使用 Phusion Passenger + Nginx 将端口 80 的所有实例与适当的相同子域映射到以下场景。

注意:我是 ruby​​ on rails 和服务器托管的新手,我无法表达我的愿景作为问题,如果我错了或纠正我,请原谅我。

嗨,我有一个使用 ruby​​ on rails 开发的产品,将托管在具有 32 GB 内存和 8 核服务器处理器的专用服务器中。每个客户端都应该有单独的数据库和单独的 rails 实例。我正在复制 - 使用单独的文件夹为每个客户端复制代码并提供不同的数据库名称,因此每个都用作不同的实例。基本上所有客户端的源代码都是相同的,但只有数据库名称不同,所以我将源代码放在不同的文件夹中,并作为每个客户端的单独 Rails 应用程序。

例如:

我有一个主临时域

www.product.com

对于每个客户端,我需要将单独的子域映射到具有相同端口(80)但具有不同 rails 实例名称的同一服务器

www.client1.product.com
www.client2.product.com
www.clientn.product.com

据我所知,如果我启动 rails 实例,每个实例都将从单独的端口号开始

client1 with start at port 3001
client2 with start at port 3002
client3 with start at port 3003

我的问题是如何在 Debian 6 下使用 Phusion Passenger + Nginx 将所有实例与端口 80 映射到适当的相同子域

如果我访问

www.client4.product.com ,我需要让应用程序在端口 3004 中运行

4

1 回答 1

1

我希望您现在已经找到了解决方案,但是为了 stackoverflow 存档,我将提供一个答案。

一般来说,您应该在 nginx 中使用反向代理 ( http://wiki.nginx.org/RubyonRailsMongrel ),而您的上游将是运行您的专用 Rails 应用程序 (我将使用重复的代码来隔离您的客户端运行环境。)您将能够使用此方法提供负载平衡。

现在,你规定了乘客的使用,如果你编译带有乘客扩展的 nginx,你可以使用一个非常简单的设置。(请访问http://www.modrails.com/documentation/Users%20guide%20Nginx.html以获得更好的解释)

server {
  listen 80;
  listen [::]:80 default_server ipv6only=on; # please for a better world be IPv6 compliant !
      server_name www.client1.product.com;
  root /my/rails/app1;
      passenger_enabled on;
}
server {
  listen 80;
  listen [::]:80 default_server ipv6only=on;
      server_name www.client2.product.com;
  root /my/rails/app2;
      passenger_enabled on;
}

…………

于 2013-09-15T17:00:25.287 回答