Автоматически размещать контент на определенных серверах имен

По сути, это, вероятно, невероятно общий и плохо продуманный вопрос. Я заранее извиняюсь за это и надеюсь, что вы сможете забыть об этом и потенциально предложить некоторые решения/помощь.

Я собираюсь начать новый проект, который, я думаю, в некотором роде похож на Shopify. Пользователи будут платить ежемесячную плату, а затем получат свой собственный веб-сайт, на котором есть вещь в стиле магазина.

Мне комфортно с большинством аспектов создания этого, однако, одна вещь, которую я не совсем уверен, как это сделать, - это если они хотят иметь собственный домен (что, я полагаю, большинство клиентов хотели бы). Основываясь на моем опыте работы с такими сервисами, как Spotify и Tictail, для этого мне придется заставить их изменить свои серверы имен на мои серверы имен. После этого я не совсем уверен, как он будет функционировать и как его настроить. Все файлы для сайтов будут практически одинаковыми, поэтому мне не нужно много менять.

Итак, в основном мой главный вопрос заключается в том, как мне разработать его для автоматического размещения определенного контента, когда кто-то устанавливает свои серверы имен в качестве моих серверов имен? Я хотел бы, чтобы это было полностью автоматическим, если это возможно, но я не возражаю, если будет небольшой ручной ввод.

Мне очень жаль, если вопрос сформулирован неправильно или если он сбивает с толку, поскольку я никогда не разрабатывал что-то подобное. Простая точка в правильном направлении была бы высоко оценена, поскольку я не слишком уверен, с чего начать с этого.

Спасибо


person Hydrone    schedule 24.05.2018    source источник


Ответы (1)


Это зависит от серверной технологии, которую вы используете для предоставления таких связанных с пользователями серверов имен. Если я вас правильно понял, вы хотите получить что-то вроде:

# Your service runs here:
http://yourdomain.com

# For the user account (user specific application)
http://{unique_username}.yourdomain.com/

# Then you would have (for N users)
http://username0.yourdomain.com/
http://username1.yourdomain.com/
...
http://usernameN.yourdomain.com/

Чтобы избежать перехвата DNS, нужно указать сервер имен в конфигурации хоста сервера. Существует множество серверов, которые предоставляют конфигурации виртуального хоста, позволяющие использовать множество разных доменных имен с одним и тем же IP-адресом.

Например, в nginx это можно сделать с помощью виртуальных хостов. В вашем случае вам нужно будет создать их программно. Для этого необходимо добавить файл в папку /etc/nginx/sites-available. Это может быть файл с именем: /etc/nginx/sites-available/username0 с таким содержимым:

server {
  listen 80 
  server_name username0.yourdomain.com;
  root /path/to/app/;
  ...
}

Итак, для вашего решения вы должны создать файл для каждого пользователя клиента. Чтобы активировать вновь созданный виртуальный хост (блок сервера), привяжите его к папке с путем: /etc/nginx/sites-enabled

ln -s /etc/nginx/sites-avaible/username1 /etc/nginx/sites-enabled/username1
sudo service nginx reload

Узнайте больше о перехвате DNS здесь и посмотрите на реализации виртуальных хостов, такие как серверные блоки nginx, показанные выше, или apache виртуальные хосты.

Удачи!

person Evhz    schedule 24.05.2018
comment
Спасибо за помощь! Я обязательно посмотрю на это и посмотрю, смогу ли я это решить - person Hydrone; 27.05.2018