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

Для каждого сайта в конфигурационный файл добавляем отдельную секцию


ServerName first.ru
ServerAlias www.first.ru
DocumentRoot /var/www/vhosts/first.ru/httpdocs
ErrorLog logs/first.ru-error.log


ServerName second.ru
ServerAlias www.second.ru
DocumentRoot /var/www/vhosts/second.ru/httpdocs
ErrorLog logs/second.ru-error.log


С реальными сайтами разобрались, теперь что произойдет с обращении к серверу по несуществующему адресу или при обращении по IP ?

Если оставить все как есть, то будет открываться первый сайт first.ru , потому что, как ни странно:

The first VirtualHost section is used for requests without a known server name. 

Поэтому перед секциями реальных сайтов добавляем секцию-ловушку, получается примерно так:


ServerName default


Теперь все запросы с неправильными именами сайтов и обращения по 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 одного реально действующего сервера


ServerName domain.tld
ServerAlias www.domain.tld another_domain.tld www.another_domain.tld
DocumentRoot /var/www/vhosts/domain.tld/httpdocs
ErrorLog logs/domain.tld.error_log
CustomLog logs/domain.tld.access_log
SymLinksBaseDir /var/www/vhosts/
ScriptAlias /cgi-bin/ /var/www/vhosts/domain.tld/cgi-bin//

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”


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

Войти с помощью: