RSS
 

Apache Virtual Hosts — несколько сайтов на одном сервере. UBUNTU / DEBIAN

24 Дек

Допустим на нашем сервере должны располагаться несколько сайтов и необходимо, чтобы при переходе по имени сайта открывались соответствующие этому сайту страницы, а при переходе по IP-адресу или по любому другому имени, кроме избранных, открывался сайт-заглушка, например со списком имеющихся сайтов или просто предупреждением. Все это можно организовать с помощью так называемых виртуальных хостов.

  1. Установка
    • В 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...
  2. Структура
    Сайты на сервере размещаются в отдельных каталогах. Удобнее, да и правильнее с точки зрения безпасности, создать для каждого сайта подкаталоги для хранения самих страниц, временных файлов, возможно 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        # для скриптов
    
  3. Собственно 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
  4. Дальше больше
    Приведенные выше секции содержат минимальный набор директив. Со временем возникает необходимость в дополнениях, которые описывают, например, свойства PHP или возможности .htaccess.
    Apache позволяет управлять достаточно большим количеством настроек. При необходимости следует обращаться к официальной документации http://httpd.apache.org
    Приведу пример секции VirtualHost для сайта domain.tld с синонимом another_domain.tld одного реально действующего сервера

    <VirtualHost *\>
      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//
      <Directory "/var/www/vhosts/domain.tld/httpdocs">
        AllowOverride All
        Options +Includes
      </Directory>
      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"
    </VirtualHost>
    

 
Комментарии к записи Apache Virtual Hosts — несколько сайтов на одном сервере. UBUNTU / DEBIAN отключены

Рубрика: Apache, Debian, Linux, Ubuntu

 

Comments are closed.