Перейти к содержимому

Web-сервер на Debian. Часть 1. Хостинг нескольких веб-сайтов при использовании сервера apache2.

by на 01.07.2010

Количество веб-сайтов с каждым годом увеличивается, а количество свободных IP-адресов больше не становится. Почему бы не привязать к одному адресу несколько сайтов? Итак, начнем. Надеюсь, что операционная система установлена (в моем случае GNU/Debian 5.0.4 lenny) и проделаны базовые настройки, если нет, рекомендуется посмотреть, например, тут. Команды, описанные в статье, начинающиеся с символа # следует выполнять из-под административной учетной записи root или через команду sudo, команды, начинающиеся с символа $, допускается выполнять обычным пользователем.

Установка

Собственно сначала нам потребуется установить сам веб-сервер.

# aptitude install apache2

Если были установлены только базовые компоненты Debian (что есть правильно для веб-сервера), то явно не помешает наличие консольного браузера. Мне лично нравится w3m:

# aptitude install w3m

Пришло время проверить работу нашего веб-сервера:

$ w3m 127.0.0.1

или

$ w3m localhost

Надпись «It works!» – хороший знак, наш веб-сервер работает. Можно выйти из браузера клавишей q или почитать справку w3m, нажав комбинацию Shift+H. По умолчанию в apache доступен только один сайт, который расположен в директории /var/www, именно там можно обнаружить файл index.html, который и содержит надпись «It works!». В эту директорию можно помещать другие html-файлы, и все они будут доступны из браузера.

Структура виртуальных хостов

Теперь займемся созданием дополнительных виртуальных сайтов. Сначала нужно определиться со структурой каждого из сайтов и определиться с их месторасположением. Можно оставить как есть и создавать структуры в /var/www, но будет удобнее создать их в домашнем каталоге пользователя в папке www. Для примера создадим структуру двух сайтов с именами aaa.local и bbb.local (невозбранно создавать и с любыми другими именами www.domain.com, www.supersite.ru и т.п.) в домашней директории пользователя user. Структура сайта будет иметь 3 директории: htdocs (для html и php -файлов сайта), cgi-bin (для cgi-скриптов) и logs (для логов).

$ cd /home/user
$ mkdir www
$ mkdir www/aaa.local
$ mkdir www/aaa.local/htdocs
$ mkdir www/aaa.local/cgi-bin
$ mkdir www/aaa.local/logs

Т.к. структура сайта bbb.local будет аналогичной, то просто копируем содержимое aaa.local

$ cp –R www/aaa.local www/bbb.local

Если сайтов нужно больше чем два, то ничто не мешает повторить последнюю команду, изменяя имя создаваемой структуры.

Настройка веб-сервера

Теперь нужно дать знать веб-серверу о наличии виртуальных хостов. Все настройки apache2 находятся в каталоге /etc/apache2, для начала откроем файл /etc/apache2/ports.conf в любом текстовом редакторе (я использую и рекомендую к использованию «странный» и «неудобный» vim, но подойдет и дефолтовый в Debian nano, далее в тексте статьи я буду использовать именно vim):

# nano /etc/apache2/ports.conf

или

# vim /etc/apache2/ports.conf

Вот его содержимое (без закомментированных строк):

NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>

Необходимо убедиться, что присутствует строка NameVirtualHost *:80, она подразумевает использование виртуальных хостов на стандартном 80 порту для всех * интерфейсов. Если этой строки нет или она закомментирована символом #, то ее нужно добавить/раскомментировать.

Если вывести содержимое каталога настроек веб-сервера /etc/apache2 командой:

# ls /etc/apache2

то среди прочего можно увидеть две интересные директории: sites-available и sites-enabled. Первая директория предназначена для описания всех виртуальных хостов веб-сервера, а вторая – для активных, т.е. включенных. Опишем наш первый хост aaa.local в директории sites-available, т.е создадим его конфигурацию, для этого командой:

# vim /etc/apache2/sites-available/aaa.local.conf

cоздаем конфигурационный файл aaa.local.conf такого содержания:

<VirtualHost *:80>
ServerAdmin user@aaa.local
ServerName www.aaa.local
ServerAlias aaa.local
# Путь к индексным файлам сайта
DirectoryIndex index.html
DocumentRoot /home/user/www/aaa.local/htdocs/
# Путь к CGI
ScriptAlias /cgi-bin/ /home/user/www/aaa.local/cgi-bin
<Location /cgi-bin>
Options +ExecCGI
</Location>
# Путь к файлам логов
ErrorLog /home/user/www/aaa.local/logs/error.log
CustomLog /home/user/www/aaa.local/logs/access.log combined
</VirtualHost>

Имя файла настроек aaa.local.conf можно выбирать любое другое, но такой выбор мне видится наиболее наглядным: хост — aaa.local, конфигурация – aaa.local.conf. Думаю понятно, что то же самое нужно проделать для хоста bbb.local. Очевидно, что проще не набивать bbb.local.conf с нуля, а скопировать aaa.local и отредактировать уже его, изменяя упоминания aaa.local на bbb.local в названиях и путях:

# cp /etc/apache2/sites-available/aaa.local.conf /etc/apache2/sites-available/bbb.local.conf
# vim /etc/apache2/sites-available/bbb.local.conf

Отлично, конфигурации созданы, прежде чем активировать виртуальные хосты проведем некоторые подготовительные работы. Можно создать индексный файл для каждого из хостов. Например, так:

$ echo "Хост aaa.local работает" > /home/user/www/aaa.local/htdocs/index.html
$ echo "Хост bbb.local работает" > /home/user/www/bbb.local/htdocs/index.html

Конечно, в обоих случаях index.html не является полноценным html-файлом в виду отсутствия в нем каких-либо тегов, но для теста работы хостов этого достаточно.

Осталось сделать, чтобы веб-сервер отзывался по именам aaa.local и bbb.local. Т.к. настройка DNS – тема для отдельной статьи, считаем хосты локальными и добавляем их в файл /etc/hosts c помощью текстового редактора.

# vim /etc/hosts

Должно получиться что-то такое:

127.0.0.1 localhost
192.168.0.1 server.domain.net server
127.0.0.1 www.aaa.local aaa.local
127.0.0.1 www.bbb.local bbb.local

Первые две строчки были, я добавил еще две. Закончили с подготовительными работами.

Активировать/деактивировать виртуальные хосты можно двумя путями:

  1. С помощью создания/удаления символических ссылок в директории /etc/apache2/sites-enabled на созданные конфигурации хостов.
  2. С помощью команд a2ensite и a2dissite.

По сути оба метода эквивалентны, первый чуточку сложнее, но отражает смысл происходящего, поэтому рассмотрим сначала его. Создадим символические ссылки в каталоге /etc/apache2/sites-enabled на конфигурации aaa.local.conf и bbb.local.conf:

# ln -s /etc/apache2/sites-available/aaa.local.conf /etc/apache2/sites-enabled/aaa.local.conf
# ln -s /etc/apache2/sites-available/bbb.local.conf /etc/apache2/sites-enabled/bbb.local.conf

Можно перезапускать веб-сервер командой

# /etc/init.d/apache2 restart

и проверять работу виртуальных хостов

$ w3m aaa.local

Если при этом отображается содержимое созданного нами индексного файла «Хост aaa.local работает», то все получилось. Можно проверить работу второго виртуального хоста таким же образом. Чтобы деактивировать виртуальный хост, нужно просто удалить соответствующую символическую ссылку и перезапустить веб-сервер, например, для хоста bbb.local

# rm /etc/apache2/sites-enabled/bbb.local.conf
# /etc/init.d/apache2 restart

Упомянутый второй способ в принципе делает то же самое (создает и удаляет символические ссылки на конфигурации в каталоге /etc/apache2/sites-enabled) с помощью специальных команд a2ensite — apache2 enable site (включить сайт апача) и a2dissite – apache2 disable site (выключить сайт апача). Активируем повторно хост bbb.local

# a2ensite bbb.local.conf

После выполнения команды появится сообщение:

Enabling site bbb.local.conf.
Run '/etc/init.d/apache2 reload' to activate new configuration!

которое говорит о том, что нужно активировать новую конфигурацию командой reload, что и делаем:

# /etc/init.d/apache2 reload

На этом все. В следующих статьях будут рассмотрены вопросы связки веб-сервера apache2 с php и СУБД, использования SSL на виртуальных хостах и др.

Комментарии и спасибы приветствуются 🙂 При копировании статьи просьба оставлять ссылку на оригинал.

From → Linux

22 комментария
  1. norel permalink

    Все очень доходчиво, спасибо.

  2. Заканчиваю вторую часть статьи, буду посвободнее выложу.

  3. Спасибо! Класс! Главное — точно и лаконично. Раздражает у других пустопорожняя «вода» в статьях (особенно, когда надо что-то сделать очень быстро)! С позволения возьму статью «к себе» 🙂 Ссылку гарантирую !!

  4. Сергей permalink

    Да, статейка действительно стоящая! Спасибо!
    Я прошу прощения, но может подскажите начинающему юзеру, который только осваивает Линух, как сделать так, например, если у меня домен vanya.od.ua, а я хочу чтобы был сайт был по адресу olga.od.ua. Все проделал по вашей инструкции, но как я понимаю, чтобы попасть на сайт olga.od.ua из вне требуется настроить верно ДНС, чтобы данный сайт запингался из вне. Т.е. не прописывать в /etc/hosts, а настроить DNS. Подскажите, пожалуйста! Буду вам весь признателен!)

    • Понимаете правильно, но как уже писалось, настройка dns — тема для отдельной статьи, а времени особо нет.
      Если требуется детально разобраться с вопросом, то рекомендую ознакомится со стандартами (RFC 1034 и 1035) освоить принципы службы, форматы записей dns и пр. Если говорить о Linux, то dns-сервером де-факто является bind. Вот тут есть описание процесса настройки для виртуальных хостов, вроде похоже на правду.
      Если цель быстро развернуть и запустить в работу, то можно присмотреться к проекту vestacp Это касается не только dns, а вообще всей инфраструктуры для веб-сервера (dns, httpd, sql, mail, и т.п.), т.е. скрипты выполняют все рутинные операции по настройке и установке. Поддерживаются основные дистрибутивы (я проверял на centos) Полученные конфиг-файлы полезны для изучения.

  5. Сергей permalink

    Т.е. как сделать так, чтобы хост olga.od.ua не был локальным, как в вашем примере?:)

  6. pol permalink

    Спасибо за статью очень понравилось.
    Единственное не понял как запустить тот сайт который создал с другого компа.
    Работаю на серваке по ssh в терминале при мопощи w3m открываеться и пишет что работает …
    а вот как в браузере его теперь запустить на другом компе в этой же сети ?????
    в браузере ввожу http://(ip сервера) выдает сообщение apach и говорит что он работает :))

    • Без настроек dns не обойтись. Пожалуй, в этом плане действительно статья не полная, попробую выбрать время дописать эту часть, раз интерес есть.

      • pol permalink

        конечно есть интерес .. если будет время дополняйте DNSами будем ждять 🙂

  7. Всё отлично, только чисел ни где нет, актуальность не понятна.

  8. Пардон… увидел ))

  9. Дима permalink

    все работает, только по адресу http://www.сайт.сайт не заходит, а по сайт.сайт заходит. В первом случае пишет You don’t have permission to access / on this server.

    • Для локального доступа добавьте в /etc/hosts запись с www.
      Для полноценного доступа нужна настройка dns.

  10. Приветствую, вопрос такой, все установил все работает, но про копировании файлов на фтп файл копируется с размером 0 ???что это может быть?

    • Странно видеть вопрос по фтп в комментариях к статье по веб-серверу 🙂
      Вероятно дело в правах доступа. Например, владелец файла может его создать, но не может его изменить.

  11. Здравствуйте, предлагаем Вам услуги комплексного продвижения вашего сайта, подробнее с нашими услугами Вы можете ознакомиться по ссылке http://www.anacron.ru/ Извините за беспокойство.

    • dont permalink

      Ирина иди на хуй со своим спамом! Сами справимся! А автору огромное спасибо! Начинающим будет очень интересно и полезно.

  12. Создание сайтов под ключ — Filandor

    Filandor объединил истинных мастеров своего дела в дружную, целенаправленную команду, которая делает работу высококачественно и в кратчайший временной срок.

    Web-студия «Filandor» имеет длительный практический опыт в области разработки веб-сайтов под ключ, раскрутка веб сайтов и обслуживания. Мы проявили себя в реализации многих успешных проектов, таких как cargo.ua, sercedoserca.com.ua, cinta.bio и другие. Наша команда предоставляет особенно рациональные решения в данной области.

    Раскрутка интернет сайта. У вас существует товар или услуги, а также функциональный и современный веб-сайт. Но этого не достаточно, чтобы ваш товар легко находили в мировой сети интернет. Благодаря продвижению интернет-сайта, или, как говорят SEO-мастера, «раскрутке сайта» ваш товар а следовательно и бизнес выйдет на лидирующие позиции, в рейтинге поиска и его начнут находить скорее, чем предложения соперников. Возрастут продажи и бизнес начнет расти.

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

    Подробнее https://filandor.com/kontekstnaya-reklama-stoimost-v-mesyac

Оставьте комментарий