我希望我的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;
}
}
关于如何设置它的任何想法?
答案 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