如何反向代理activeadmin应用程序?

时间:2013-04-11 16:01:39

标签: ruby-on-rails nginx activeadmin

我希望我的rails / activeadmin应用程序的2个部分可以直接从2个不同的子域访问:

admin.domain.tld => http://localhost:9999/admin/login
api.domain.tlp => http://localhost:9999

我想出了这个配置,但这不起作用:

server {
    listen 80;
    server_name admin.domain.tld;

    location / {
        proxy_pass http://localhost:9999/admin;
        proxy_set_header Host $host;
    }
}

注意:在ActiveAdmin中,/ admin会自动重定向到/ admin / login

server {
    listen 80;
    server_name api.domain.tld;

    location / {
        proxy_pass http://localhost:9999;
        proxy_set_header Host $host;
    }
}

关于如何设置它的任何想法?

1 个答案:

答案 0 :(得分:1)

如果您将子域重定向到您的应用,我认为解决这个问题的一个好方法是检查请求子域,如果它等于admin,则重定向到/ admin。您可以在应用程序控制器上对默认操作执行此操作 EX:

if request.subdomain.present? && request.subdomain == 'admin' 
  redirect_to admin_path
end

在admin_path中我指的是activeadmin默认路由的路径... 我从未使用过那颗宝石......

我认为您可以处理应用中的子域名,您只需将它们重定向到应用程序,然后在第一个控制器中检查您要重定向的位置..但这只是解决这个问题的一种方法。当然,虚拟主机配置可以做到这一点...

如果您不想在application_controller.rb中执行此操作,则可以在应用程序根目录负责的第一个控制器上执行此操作。想象一下你有:

class HomeController < ApplicationController
  before_filter :check_subdomains, :only=>[:index]

  def index 

  end

  private

  def check_subdomains
    if request.subdomain.present? && request.subdomain == 'admin' 
      redirect_to admin_path
    elsif  request.subdomain.present? && request.subdomain == 'api'
      redirect_to api_path
    end
  end

end