代码之家  ›  专栏  ›  技术社区  ›  user62605

Rails下软件即服务的Apache请求头文件

  •  1
  • user62605  · 技术社区  · 16 年前

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

    我需要的是允许多个用户通过如下不同的URL连接到我的ApacheWeb服务器: 客户1.myhost.com 公司1.myhost.com 公司2.myhost.com 等。

    我想让我的Apache服务器做的是,传递所有未定向到某个现有主机列表的请求。 (如trac.myhost.com和 https://myhost.com )转到我的Rails应用程序,通过设置请求头来标识请求的主机,如下所示:

    requestheader“instance_name”=customer1对于customer1.myhost.com

    谢谢你的帮助!

    附言:最终的目标是提供软件片作为服务,但是让所有这些客户在1个应用程序下运行。不是每个客户一个应用程序。

    1 回复  |  直到 16 年前
        1
  •  2
  •   tadman    16 年前

    使用标准的虚拟主机配置,您可以执行以下操作:

    NameVirtualHost *:80
    
    <VirtualHost *:80>
      ServerName app.example.com
      ServerAlias *.example.com
    
      DocumentRoot /web/app.example.com/public
    </VirtualHost>
    

    这将捕获其他虚拟主机条目尚未捕获的所有请求。

    当应用程序收到请求时,您将使用提供的主机名设置请求变量。这可用于任何操作控制器:

    request.host
    

    从那里,您可以在某种类型的“筛选前”中加载适当的数据,通常这样做:

    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
    

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