1

一个应用程序的多个客户实例,在一个应用程序下。

我需要的是允许多个用户连接到我的 Apache Web 服务器,方法是传递不同的 URL,例如:customer1.myhost.com company1.myhost.com company2.myhost.com 等。

我希望我的 Apache 服务器做的是,通过设置 RequestHeader将所有未定向到特定现有主机列表(如 trac.myhost.com 和https://myhost.com )的请求传递给我的 Rails 应用程序识别请求的主机,例如:

RequestHeader "INSTANCE_NAME" = customer1 #for customer1.myhost.com

谢谢你的帮助!

Ps.:最终目标是提供软件切片即服务,但让所有这些客户在 1 个应用程序下运行。每个客户不是 1 个应用程序。

4

1 回答 1

2

使用标准的 VirtualHost 配置,您可以这样做:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName app.example.com
  ServerAlias *.example.com

  DocumentRoot /web/app.example.com/public
</VirtualHost>

这将捕获其他 VirtualHost 条目尚未捕获的所有请求。

当您的应用程序收到请求时,您将使用提供的主机名设置请求变量。这适用于任何 ActionController:

request.host

从那里您可以在某种 before_filter 中加载适当的数据,通常这样做如下:

before_filter :load_client

def load_client
  @client = Client.find_by_hostname!(request.host)
rescue ActiveRecord::RecordNotFound
  render(:partial => 'client_not_found', :status => :not_found)
end

只要客户端正确填充了主机名,它就会在每次页面加载时找到它们。

于 2010-01-22T21:37:49.970 回答