Apache Virtual Hosts - несколько сайтов на одном сервере
Допустим на нашем сервере должны располагаться несколько сайтов и необходимо, чтобы при переходе по имени сайта открывались соответствующие этому сайту страницы, а при переходе по IP-адресу или по любому другому имени, кроме избранных, открывался сайт-заглушка, например со списком имеющихся сайтов или просто предупреждением. Все это можно организовать с помощью так называемых виртуальных хостов.
-
Установка
- В Red-Hat-based дистрибутивах Apache называют httpd, в Debian и Ubuntu - apache2. Команды установки: Fedora
yum install httpd
Debian
apt-get install apache2
Основным конфигурационным файлом web-сервера является /etc/httpd/conf/httpd.conf и /etc/apache2/conf/apache2.conf соответственно.
* В конфигурационный файл свежеустановленного web-сервера можно внести некоторые косметические исправления. Для этого среди многочисленных (и полезных) комментариев находим и раскомментируем директивы
ServerAdmin admin@mysite.ru # почтовый адрес администратора
ServerName mysite.ru:80 # имя сервера
в строке LanguagePriority переставляем ru на первое место
LanguagePriority ru en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl...
-
Структура Сайты на сервере размещаются в отдельных каталогах. Удобнее, да и правильнее с точки зрения безпасности, создать для каждого сайта подкаталоги для хранения самих страниц, временных файлов, возможно cgi-скриптов и других полезностей. Можно пойти ещё дальше и организовать для каждого сайта отдельного SSH-пользователя. В таком случае удобно размещать сайт в домашнем каталоге этого пользователя. Соответственно каталоги сайта будут иметь вид:
/home/site_user/mysite.ru/httpdocs # для страниц /home/site_user/mysite.ru/tmp # для хранения сессий и временных файлов /home/site_user/user/mysite.ru/cgi-bin # для скриптов
Однако в небольших системах, где SSH-доступом обычно пользуется только администратор сервера, в этом нет необходимости. Поэтому сайты размещают внутри папки /var/www, которую по умолчанию использует web-сервер.
/var/www/vhosts/mysite.ru/httpdocs # для страниц
/var/www/vhosts/mysite.ru/tmp # для хранения сессий и временных файлов
/var/www/vhosts/mysite.ru/cgi-bin # для скриптов
-
Собственно HOW-TO Допустим наши сайты называются first.ru и second.ru.
- Раскомментируем директиву
NameVirtualHost *:80
в третьей секции конфигурационного файла.
* Создаем папки общую
$ mkdir /var/www/vhosts
для первого сайта
$ mkdir /var/www/vhosts/first.ru
$ mkdir /var/www/vhosts/first.ru/httpdocs
и для второго
$ mkdir /var/www/vhosts/second.ru
$ mkdir /var/www/vhosts/second.ru/httpdocs
* Для каждого сайта в конфигурационный файл добавляем отдельную секцию
<VirtualHost *:80>
ServerName first.ru
ServerAlias www.first.ru
DocumentRoot /var/www/vhosts/first.ru/httpdocs
ErrorLog logs/first.ru-error.log
</VirtualHost>
<VirtualHost *:80>
ServerName second.ru
ServerAlias www.second.ru
DocumentRoot /var/www/vhosts/second.ru/httpdocs
ErrorLog logs/second.ru-error.log
</VirtualHost>
* С реальными сайтами разобрались, теперь что произойдет с обращении к серверу по несуществующему адресу или при обращении по IP ? Если оставить все как есть, то будет открываться первый сайт first.ru , потому что, как ни странно:
The first VirtualHost section is used for requests without a known server name.
Поэтому перед секциями реальных сайтов добавляем секцию-ловушку, получается примерно так:
<VirtualHost *:80>
ServerName default
</VirtualHost>
Теперь все запросы с неправильными именами сайтов и обращения по IP направляются в папку /var/www/html, где можно разместить простейшую индексную страницу.
* Для вступления всех изменений в силу перезапускаем сервер
$ service httpd restart
или
$ /etc/init.d/apache2 restart
-
Дальше больше Приведенные выше секции содержат минимальный набор директив. Со временем возникает необходимость в дополнениях, которые описывают, например, свойства PHP или возможности .htaccess. Apache позволяет управлять достаточно большим количеством настроек. При необходимости следует обращаться к официальной документации http://httpd.apache.org Приведу пример секции VirtualHost для сайта domain.tld с синонимом another_domain.tld одного реально действующего сервера
AllowOverride All Options +Includes php_admin_value open_basedir /var/www/vhosts/domain.tld/ php_admin_value doc_root /var/www/vhosts/domain.tld/httpdocs php_admin_value upload_tmp_dir /var/www/vhosts/domain.tld/tmp/ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fphp-sender@domain.tld"
Комментарии:
Нет комментариев.
Пожалуйста войдите или зарегистрируйтесь чтобы оставлять комментарии.