Как создать поддомен на виртуальном хосте на основе имени?


27

У меня есть хостинг на основе имени, давайте позвоним my.address.com. У моего друга есть «простой» адрес address.comи он дал мне виртуальную машину, к которой я могу получить доступ через SSH.

Он также сделал немного магии с портами, и теперь, после установки Apache, я смог получить доступ /var/wwwчерез my.address.com.

Итак, вопрос в том, как сделать подобранный поддомен test.my.address.com?

Должна быть какая-то магия с Директивой Слушания Apache , но я не могу понять это. Также я знаю, как создавать локально доступные сайты с Apache, но это не одно и то же.


Вам не понадобится Listen, посмотрите виртуальные хосты Apache
Der Hochstapler

главный вопрос остался - что писать в директиве ServerName?
скитаргон

Ответы:


33

Чтобы иметь возможность создавать субдомены, вам нужно убедиться в нескольких вещах:

DNS

Чтобы другие могли связаться test.my.address.com, они должны сначала разрешить это имя в IP-адресе вашей виртуальной машины. Как это можно сделать?

Скорее всего, ваш друг уже создал запись A в address.comзоне, которая указывает myна IP-адрес вашей виртуальной машины.

Все идет нормально. Но как насчет test.my? Возможно, еще нет записи.

Ваш друг может просто добавить *.myв зону (и указать его на тот же IP-адрес). Тогда все запросы something.my.address.comбудут отправлены на вашу виртуальную машину. Большой!

Виртуальные хосты Apache

Как только ваша виртуальная машина будет доступна, Apache должен знать, как обрабатывать запрос. Здесь мы используем функцию виртуальных хостов HTTP-сервера Apache.

Я обычно работаю на Debian, поэтому я объясню это на примере конфигурации в /etc/apache2/sites-available. Давайте назовем там файл test.my.address.comи заполним его информацией.

<VirtualHost *:80>
        ServerName test.my.address.com
        ServerAdmin webmaster@my.address.com

        DocumentRoot /var/www/test.my.address.com/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/test.my.address.com/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/test.my.address.com.error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/test.my.address.com.access.log combined
</VirtualHost>

Ключевой параметр внутри этого файла является ServerNameдиректива . Это сообщает Apache, под каким именем этот сервер должен быть доступен. Дополнительные имена могут быть даны с помощью директивы ServerAlias .

Если вы также используете Debian, не забудьте sudo a2ensite test.my.address.comпосле того, как вы создали файл и sudo invoke-rc.d apache2 restart.


Большое спасибо! :) Я сделал свою часть, и написал электронное письмо другу о его части.
Еще

@scythargon: мое удовольствие. Мы здесь, чтобы помочь :)
Der Hochstapler

Пока мой друг не ответил на мой, не могли бы вы, пожалуйста? Что я думал о том, как это работает: http-запрос test.my.address.comидет, my.address.comа затем мой сервер Apache на ВМ обрабатывает его. Но вы сказали, что DNS-сервер на address.com должен знать обо test.myвсем этом раньше и независимо от того my, почему?
scythargon

@scythargon: для того, чтобы любой HTTP-запрос достиг вашего сервера, любой клиент сначала должен выяснить, на какой сервер должен быть отправлен запрос. Таким образом, имя хоста должно быть действительным. В противном случае им просто скажут, что «этого имени не существует».
Der Hochstapler
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.