Как правильно сделать поддержку доменов 3-го уровня (RoR)?

Собственно страницы создаются из админки заполнением пункта Alias, который является именем страницы.
Есть необходимость сделать для страниц каталога домены 3-го уровня.
Сейчас выглядит как:
domain.com/foo (foo - алиас)
domain.com/bar
Надо:
foo.domain.com
bar.domain.com

Вопросы:
1) Каким образом надо настраивать DNS сервер? Я правильно же понимаю что не надо будет для каждого домена прописывать настройки в DNS.
2) Какой лучше использовать гем.

Страниц каталога будет очень много. Редирект с domain.com/foo на foo.domain.com будет 301
  • Вопрос задан
  • 3246 просмотров
Решения вопроса 3
@tahoa_cleo
1) нет, достаточно добавить запись вида
* IN A IP_ADDRESS
и все запросы типа *.domain.com буду идти на сервер с IP-адресом IP_ADDRESS.
Ну и web-сервер тоже необходимо будет настроить для работы в таком режиме.
Ответ написан
Комментировать
Able1991
@Able1991
Пишу на рельсах
1) Каким образом надо настраивать DNS сервер? Я правильно же понимаю что не надо будет для каждого домена прописывать настройки в DNS.


Просто добавьте следующую запись формата A («A record» в англоязычной версии): *.example.com
Потом настраиваете nginx

server {
    server_name   www.example.com;

    location / {
         proxy_pass 11.22.33.44:8080;
    }
}

server {
    server_name   ~^(?<sub_domain>[a-z0-9\-]+)\.example.com$;

    location / {
        proxy_pass 11.22.33.44:8080/$sub_domain$uri$is_args$args;
    }
}
Ответ написан
viktorvsk
@viktorvsk
DNS отправляет все запросы на айпишник хоста
Nginx отправляет все запросы к рельсам
в config/routes.rb используете constraints (guides.rubyonrails.org/routing.html#http-verb-cons...

P.S. Не надо программировать на nginx
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gejarufu
@gejarufu Автор вопроса
Сделал следующее на локальной машине. Поставил Passenger.
В итоге при попытке зайте как на адрес admin.example.com так и на динамический адрес foo.example.com выдает "Server not found".

nginx.conf
server {
  listen 80;
  server_name www.example.com;
  rewrite ^(.*) http://example.com$1 permanent;
}

server {
  listen 80;
  server_name example.com *.example.com;
  root my/public;

  rails_env development;
  passenger_enabled on;

  charset utf-8;
}


Hosts file
127.0.0.1 example.com
127.0.0.1 *.example.com

routes.rb
constraints :subdomain => 'admin' do
  namespace :admin, path: '' do
    root 'blogs#index'
  end
end

get ':link', to: 'blogs#show', constraints: { subdomain: /.+/ }

в routes.rb :link это friendly_id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы