Як створити субдомени на основі імені virtualhost?


27

У мене є хостинговий хостинг, давайте його називати my.address.com. У мого друга є "звичайна" адреса address.comі мені дали віртуальну машину, до якої я можу отримати доступ через SSH.

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

Отже, питання полягає в тому, як я можу зробити такий субдомен test.my.address.com?

З Директивою про слухання Apache має бути якась магія , але я не можу це зрозуміти. Також я знаю, як створити місцеві доступні сайти за допомогою Apache, але це не те саме.


Вам не знадобиться Listen, подивіться на віртуальні хости Apaches: httpd.apache.org/docs/2.2/vhosts
Der Hochstapler

залишається головне питання - що написати в директиві ServerName?
scythargon

Відповіді:


33

Щоб створити субдомени, вам доведеться переконатися в кількох речах:

DNS

Щоб інші могли дістатися test.my.address.com, вони спочатку повинні мати змогу вирішити це ім'я за IP-адресою вашої віртуальної машини. Як це можна зробити?

Те, що ваш друг, швидше за все, вже робив, це створити запис A у address.comзоні, який вказує myна IP-адресу вашого VM.

Все йде нормально. А як же test.my? Можливо, ще немає запису.

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

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

Після того, як ваш VM можна отримати, Apache повинен знати, як обробляти запит. Тут ми використовуємо функцію Virtual Hosts на 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

@scythargon: Моє задоволення. Ми тут, щоб допомогти :)
Der Hochstapler

Поки мій друг не відповів на мій, чи можете ви, будь ласка? Що я думав про те, як це працює: http-запит на test.my.address.comйде my.address.comі потім мій сервер Apache у VM обробляє його. Але ви сказали, що DNS-сервер на address.com повинен знати про це, test.myперш ніж усе це, і незалежно від знань про те my, чому?
scythargon

@scythargon: Щоб будь-який запит HTTP дійшов до вашого сервера, будь-який клієнт спочатку повинен розібратися, на який сервер потрібно надіслати запит. Отже, ім'я хоста має бути дійсним. Інакше їм просто скажуть "цього імені не існує".
Der Hochstapler
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.