【问题标题】:Apache RequestHeaders for Software-As-a-Service under RailsRails 下用于软件即服务的 Apache RequestHeaders
【发布时间】:2011-01-08 06:45:45
【问题描述】:

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

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

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

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

感谢您的帮助!

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

【问题讨论】:

    标签: ruby-on-rails apache saas


    【解决方案1】:

    使用标准的 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
    

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

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多