Rails上的多租户自定义域名

4

我正在创建一个类似Shopify的多租户应用程序,想知道如何在服务器上创建指向同一应用程序实例的自定义域名? 例如:

app1.mysystem.com == www.mystore.com
app2.mystem.com == www.killerstore.com

我需要像Google Apps那样在CNAME上进行配置吗?如果是这样,我该如何做?是否有一些好的文档展示了这个过程?

PS:app1和app2指向同一个应用程序!谢谢

2个回答

7

我有一个类似的设置,并且正在使用nginX。为了方便维护,我允许nginx接受所有连接,并在我的应用程序中进行过滤。

# application_controller.rb
before_filter :current_client

private
def current_client
  # I am using MongoDB with Mongoid, so change the syntax of query accordingly
  @current_client ||= Client.where(:host => request.host).first
  render('/public/404.html', :status => :not_found, :layout => false) unless @current_client
end

您可以让客户在其域名/子域名上设置指向your_ipyour_domain_pointing_to_your_ip.com的域名记录,并在表单中捕获并保存到数据库中。然后修改current_client中的查询,如下:

@current_client ||= Client.or(:host => request.host).or(:alias => request.host).first

尝试做同样的事情,但不确定如何接受所有连接。你能发布你的nginx配置吗? - Steven Garcia

1

我目前正在处理类似的问题,刚刚完成了Nginx配置。这是我做的方式。

server {
  listen 80;
  server_name domain1.com domain2.com domain3.com;
  rails_env production;
  passenger_enabled on;
  root /var/www/your_site_folder/current/public;
}

请确保在使用Passenger时运行passenger_pre_start。
例如:passenger_pre_start http://your_domain.com
对于添加到上述配置块中的每个域,请添加一行。
关键在于server_name。通常,我会将其用于使用www.domain.com或不带“www”的domain.com的域名。但在这种情况下,您可以从此处指向您想要访问应用程序的所有域,并且您的Nginx设置为多租户。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接