Web-сервер на Debian. Часть 1. Хостинг нескольких веб-сайтов при использовании сервера apache2.
Количество веб-сайтов с каждым годом увеличивается, а количество свободных 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
Первые две строчки были, я добавил еще две. Закончили с подготовительными работами.
Активировать/деактивировать виртуальные хосты можно двумя путями:
- С помощью создания/удаления символических ссылок в директории /etc/apache2/sites-enabled на созданные конфигурации хостов.
- С помощью команд 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 на виртуальных хостах и др.
Комментарии и спасибы приветствуются 🙂 При копировании статьи просьба оставлять ссылку на оригинал.
Все очень доходчиво, спасибо.
Заканчиваю вторую часть статьи, буду посвободнее выложу.
Спасибо! Класс! Главное — точно и лаконично. Раздражает у других пустопорожняя «вода» в статьях (особенно, когда надо что-то сделать очень быстро)! С позволения возьму статью «к себе» 🙂 Ссылку гарантирую !!
Пожалуйста, пользуйтесь на здоровье.
Да, статейка действительно стоящая! Спасибо!
Я прошу прощения, но может подскажите начинающему юзеру, который только осваивает Линух, как сделать так, например, если у меня домен 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) Полученные конфиг-файлы полезны для изучения.
Т.е. как сделать так, чтобы хост olga.od.ua не был локальным, как в вашем примере?:)
Кратко — правильно описать зону od.ua.
Спасибо за статью очень понравилось.
Единственное не понял как запустить тот сайт который создал с другого компа.
Работаю на серваке по ssh в терминале при мопощи w3m открываеться и пишет что работает …
а вот как в браузере его теперь запустить на другом компе в этой же сети ?????
в браузере ввожу http://(ip сервера) выдает сообщение apach и говорит что он работает :))
Без настроек dns не обойтись. Пожалуй, в этом плане действительно статья не полная, попробую выбрать время дописать эту часть, раз интерес есть.
конечно есть интерес .. если будет время дополняйте DNSами будем ждять 🙂
Всё отлично, только чисел ни где нет, актуальность не понятна.
Пардон… увидел ))
Написано давненько, но в deb 7-ке еще актуально
все работает, только по адресу http://www.сайт.сайт не заходит, а по сайт.сайт заходит. В первом случае пишет You don’t have permission to access / on this server.
Для локального доступа добавьте в /etc/hosts запись с www.
Для полноценного доступа нужна настройка dns.
Приветствую, вопрос такой, все установил все работает, но про копировании файлов на фтп файл копируется с размером 0 ???что это может быть?
Странно видеть вопрос по фтп в комментариях к статье по веб-серверу 🙂
Вероятно дело в правах доступа. Например, владелец файла может его создать, но не может его изменить.
Здравствуйте, предлагаем Вам услуги комплексного продвижения вашего сайта, подробнее с нашими услугами Вы можете ознакомиться по ссылке http://www.anacron.ru/ Извините за беспокойство.
Ирина иди на хуй со своим спамом! Сами справимся! А автору огромное спасибо! Начинающим будет очень интересно и полезно.
Создание сайтов под ключ — Filandor
Filandor объединил истинных мастеров своего дела в дружную, целенаправленную команду, которая делает работу высококачественно и в кратчайший временной срок.
Web-студия «Filandor» имеет длительный практический опыт в области разработки веб-сайтов под ключ, раскрутка веб сайтов и обслуживания. Мы проявили себя в реализации многих успешных проектов, таких как cargo.ua, sercedoserca.com.ua, cinta.bio и другие. Наша команда предоставляет особенно рациональные решения в данной области.
Раскрутка интернет сайта. У вас существует товар или услуги, а также функциональный и современный веб-сайт. Но этого не достаточно, чтобы ваш товар легко находили в мировой сети интернет. Благодаря продвижению интернет-сайта, или, как говорят SEO-мастера, «раскрутке сайта» ваш товар а следовательно и бизнес выйдет на лидирующие позиции, в рейтинге поиска и его начнут находить скорее, чем предложения соперников. Возрастут продажи и бизнес начнет расти.
У нас есть нужные грамотные специалисты для всех без исключения этапов создания, продвижения и обслуживания Вашего вебсайта от планирования и дизайна до подготовки и размещения контента. В связи с чем выбирают нас? — Мы высококачественно и честно работаем в области изготовления, обслуживания и продвижения сайтов свыше 10 лет.
Подробнее https://filandor.com/kontekstnaya-reklama-stoimost-v-mesyac
more info here https://hydra2020zerkalo.com