Несколько сайтов на одном сервере

    И вот мы сделали один сайт, но в голове держим, что будем делать ещё. Для этого подготовим наш сервер. Поможет нам в этом Apache, который мы уже установили по этой статье.

Исходные данные у нас такие:
1) Адрес сервера в интернете: 10.10.10.10 и имя test.mydomain.ru
2) Адрес сервера в локальной сети: 192.168.218.18
3) 2 сайта - test.mydomain.ru и test2.mydomain.ru

Наша задача: разместить оба сайта на одном сервере, сделать доступ к каждому сайту по отдельному URL

Делаем:
Пойдём от простого к сложному. Для начала рассмотрим случай, когда у нас два сайта в одном домене с именами test.mydomain.ru и test2.mydomain.ru. Предварительно мы должны прописать в зону домена mydomain.ru два узла test.mydomain.ru и test2.mydomain.ru. Для каждого сайта создаём каталог в корневом каталоге документов Apache /usr/local/www/test и /usr/local/www/test2. На всякий случай проверяем значение директивы DocumentRoot в /usr/local/etc/apache22/httpd.conf. Должно быть так:

DocumentRoot "/usr/local/www"

Мы будем разделять логи для каждого сайта, поэтому создадим соответствующие каталоги:

# mkdir /var/log/mydomain/test /var/log/mydomain/test2

Если у нас уже был создан сайт, то всё его содержимое переносим в созданный для него каталог в /usr/local/www/test. Другой сайт test2.mydomain.ru размещаем в /usr/local/www/test2.

Теперь настраиваем Apache. Раскоментируем строчку в файле /usr/local/etc/apache22/httpd.conf:

Include etc/apache22/extra/httpd-vhosts.conf

т.е. даем возможность Apache подгрузить файл где у нас будут прописаны виртуалхосты. Переходим в /usr/local/etc/apache22/extra/httpd-vhosts.conf и вставляем в конце файла

NameVirtualHost 10.10.10.10
<VirtualHost test.mydomain.ru>
DocumentRoot /usr/local/www/test
ServerName test.mydomain.ru
ErrorLog /var/log/mydomain/test/error_log
CustomLog /var/log/mydomain/test/access_log combined
</VirtualHost>
<VirtualHost test2.mydomain.ru>
DocumentRoot /usr/local/www/test2
ServerName test2.mydomain.ru
ErrorLog /var/log/mydomain/test2/error_log
CustomLog /var/log/mydomain/test2/access_log combined
</VirtualHost>

Все настройки не заданные для сайта явным образом в директиве VirtualHost, наследуются от глобальных настроек Apache, указанных выше в файле /usr/local/etc/apache22/httpd.conf
Перезапускаем Apache:

# /usr/local/etc/rc.d/apache22 restart
 
Теперь, обращаясь по DNS именам, мы будем получать разные сайты. Если обратиться по IP адресу, то получим сайт test.mydomain.ru, т.к. он подключен первым. Ну вот задача выполнена. Таким способом можно прописать хоть сотню сайтов, всё будет упираться только в железо и канал провайдера.

Кое что на память.

Очень удобно поместить каждый сайт в отдельный файл, и подключить их в httpd.conf:

Include /etc/httpd/conf/vhosts/test1.conf
Include /etc/httpd/conf/vhosts/test2.conf
Include /etc/httpd/conf/vhosts/test3.conf

   Мы получаем удобство в быстром подключении и отключении сайта, путём добавления/снятия символа комментария “#” в начале строки. Это особенно актуально, когда настройка каждого сайта раздувается на несколько десятков строк. Также нелишне будет настроить ротацию логов.

Особенности директив Listen и NameVirtualHost

В конце хочу кратко рассказать о двух директивах - Listen и NameVirtualHost. Многие не знают, что директива Listen имеет больший приоритет чем, NameVirtualHost. Она говорит, откуда принимать запросы. В то время как последняя определяет, как обрабатывать полученный запрос. Это значит, что если указано значение

Listen 80

то Apache будет прослушивать порт 80 на всех IP адресах и директива

NameVirtualHost 10.10.10.10

не ограничивает запросы, пришедшие на другие адреса, и они будут обрабатываться наравне с указанным адресом, а если указано значение

Listen 10.10.10.10:80

то

NameVirtualHost 192.168.218.10

не возымеет действия, и сайт будет не доступен из локальной сети.

Категории:

Рейтинг: 
Средняя: 4.4 (9 оценок)

Комментарии

Спасибо за хорошо рассписанные основы! A+++

Добавить комментарий

Filtered HTML

Plain text