Apache RequestHeaders для программного обеспечения как услуга под Rails - PullRequest
1 голос
/ 22 января 2010

Несколько клиентских экземпляров приложения в одном приложении.

Мне нужно разрешить нескольким пользователям подключаться к моему веб-серверу Apache, передавая разные URL, например: customer1.myhost.com company1.myhost.com company2.myhost.com и т.д.

Я хочу, чтобы мой сервер Apache выполнял все запросы, которые не направлены на определенный список существующих хостов. (например, trac.myhost.com и https://myhost.com) для моего приложения на Rails, установив RequestHeader для идентификации запрошенного хоста, что-то вроде:

RequestHeader "INSTANCE_NAME" = customer1 # для customer1.myhost.com

Спасибо за вашу помощь!

Ps .: Конечная цель состоит в том, чтобы предлагать программные фрагменты как услугу, но все эти клиенты управляются под управлением 1 приложения. Не 1 приложение на клиента.

1 Ответ

2 голосов
/ 23 января 2010

Используя стандартную конфигурацию 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

До тех пор, пока у клиента правильно заполнено имя хоста, он будет обнаруживаться при каждой загрузке страницы.

...