Установив, веб-сервер Apache и предоставив через него на всеобщее обозрение свой сайт, некоторые и не подозревают, каким мощным инструментом они владеют. С его помощью можно управлять сотнями сайтов с разными именами и уровнями доступа. Денежная стоимость и временные затраты на добавление каждого сайта минимальны.
Веб-сервер Apache, популярный благодаря своей прозрачности для программистов и администраторов и не в последнюю очередь благодаря бесплатности, реализован под все более-менее популярные операционные системы. Его настройки для всех ОС одинаковы, различаются только пути, где хранятся конфигурационные файлы. На одном сервере может быть запущено несколько экземпляров Apache, прослушивающих разные адреса и/или порты. Один экземпляр может обслуживать несколько сайтов (подробнее об этом ниже). Проект настолько популярен, что постоянно обрастает новой функциональностью. О степени популярности можно судить либо по статистике, что, на мой взгляд, довольно опрометчиво, либо по конкретным фактам. Фактов популярности Apache мы приведём два. Во-первых, его наличие в качестве веб-сервера по умолчанию в большинстве UNIX-подобных операционных систем. Во-вторых, такой гигант в области ИТ как компания Oracle приняла его в состав своего продукта Oracle Application Server 10g, где он играет одну из ключевых ролей.
У нас есть: 1) Компьютер с установленным пакетом Apache 1.3 или 2.0 2) Адрес сервера в интернете: 10.0.10.15 и имя: teo.mynetwork.ru 3) Адрес сервера в локальной сети: 192.168.100.18 4) Несколько сайтов. 5) Несколько имён для одного сайта
Хотим: 1) Разместить все сайты на одном сервере 2) Сделать доступ к каждому сайту по отдельному URL 3) Ограничить доступ к некоторым сайтам 4) Сделать перенаправление нескольких имён на один сайт
Делаем: Пойдём от простого к сложному. Для начала рассмотрим случай, когда у нас два сайта и два имени teo.mynetwork.ru и logos.mynetwork.ru. Эти имена должны быть доступны, т.е. держатель зоны mynetwork.ru должен прописать в ней узлы teo и logos - Для каждого сайта создаём каталог в корневом каталоге документов Apache (teo и logos, соответственно). Для Linux это по умолчанию /var/www/html, но чтобы убедиться, где он расположен на нашем сервере, смотрим значение директивы DocumentRoot в /etc/httpd/conf/httpd.conf. Итак, создаём: # mkdir /var/www/html/teo /var/www/html/logos - Мы будем разделять журналы для каждого сайта, поэтому создадим соответствующие каталоги: # mkdir /var/log/httpd/teo /var/log/httpd/logos - Если у нас уже был создан сайт, то всё его содержимое переносим в созданный для него каталог, т.е. из /var/www/html в /var/www/html/teo. Новый сайт logos.mynetwork.ru размещаем в /var/www/html/logos. Теперь настраиваем Apache. Добавляем в конец файла /etc/httpd/conf/httpd.conf:
Все настройки не заданные для сайта явным образом в директиве VirtualHost, наследуются от глобальных настроек Apache, указанных выше в этом же файле. - Перезапускаем Apache: # /etc/init.d/httpd restart - Теперь, обращаясь по DNS именам, мы будем получать разные сайты. Если обратиться по IP адресу, то получим сайт teo.mynetwork.ru, т.к. он подключен первым.
Создаём ссылки с нескольких DNS адресов на один сайт
Это можно осуществить двумя способами: созданием синонимов, или перенаправлением всех обращений с другого сайта. 1) Синонимы задаются директивой ServerAlias, могут содержать маску, и разделяются пробелом. Вот несколько примеров создания синонимов:
Синоним - это DNS-имя. Имена могут быть абсолютно любыми, в том числе и из разных доменов, но все они должны разрешаться в IP-адреса, то есть их предварительно нужно зарегистрировать в DNS. 2) Перенаправление задаётся директивой Redirect. Создаём новый пустой сайт pantheon.ru. Как и для предыдущих сайтов, это делается в три шага: создание каталога для документов, для журналов и добавление конфигурации в httpd.conf:
При этом Apache воспринимает первый параметр директивы Redirect не как URL, а как набор символов, при совпадении с которым происходит перенаправление. Отсюда следует, что он НЕ проверяет наличие указанных каталогов и файлов, а ссылки /samag и /samag/ НЕ считает одинаковыми.
Ограничиваем доступ к сайтам
Теперь, если пользователь обратится к нам по IP-адресу, либо по имени, на которые наш сервер откликается (см. Приложение), то Apache сначала определяет, не удовлетворяет ли запрос описанным директивами VirtualHost сайтам и если не находит ни один из них, то выдаёт сайт по умолчанию, который находится в каталоге, заданном глобальной директивой DocumentRoot, т.е. уровнем выше остальных. Таким образом, получается, что пользователь может попасть на любой из виртуальных сайтов не тем путём, какой мы для него приготовили, т.е. http://logos.mynetwork.ru/. Например, набрав в адресной строке браузера «http://192.168.100.18/logos/», он получит сайт logos.mynetwork.ru. Правда в этом случае документы, использующие ссылки на ресурсы этого же сайта, будут некорректно отображаться, потому что ссылки делаются относительно корня сайта и, если это была ссылка /img/picture.jpg, то во втором случае этот же файл уже нужно искать по ссылке /logos/img/picture.jpg, этого же браузер не знает. Таким образом, здесь все зависит от того, догадывается ли пользователь, в каких каталогах мы храним наши сайты. В принципе, в этом нет ничего плохого, ведь мы в любом случае выложили сайты, чтобы их посещали (правила по ограничению доступа к ресурсу всё равно будут действовать, о них мы поговорим чуть позже), но как-то это выглядит не красиво (для того и двери, чтоб в окна не лазить). Чтобы устранить эту некрасивость можно поместить сайт по умолчанию на тот же уровень, что и остальные сайты, т.е. создать каталог /var/www/html/default и указать его в двух директивах глобальных настроек (т.е. до описания виртуальных сайтов)
DocumentRoot "/var/www/html/default" ... # This should be changed to whatever you set DocumentRoot to. <Directory "/var/www/html/default">
Теперь перейдём непосредственно к раздаче прав доступа. Существует два способа указания прав доступа к каталогу веб-сайта средствами Apache: поместить в каталог файл .htaccess, либо использовать директиву <Directory> в файле конфигурации. В обоих случаях правила распространяются и на вложенные каталоги. Перечислим преимущества использования файла .htaccess: а) при его изменении не нужно перезапускать Apache; б) при одинаковом уровне доступа к разным ресурсам можно пользоваться ссылками на один файл .htaccess; в) можно предоставить пользователю право редактирования этого файла, что удобно, если у нас сервер с множеством клиентских сайтов. Есть и недостатки: а) для того, чтобы ответить на вопрос: «какие ограничения доступа существуют на сайте?» - администратору необходимо помнить, в каких каталогах лежат эти файлы и ссылки; б) если сайт будет переноситься на другой сервер, и, что очень вероятно, будет размещён в другом каталоге, то для корректировки ссылок уйдёт много времени; в) повышается нагрузка сервера, т.к. при каждом запросе на ресурс он обращается к .htaccess в этом каталоге и всех верхних по иерархии, наследуя их настройки т.е. запрос на ресурс http://teo.mynetwork.ru/olimp/staff/zeus.htm инициирует проверку .htaccess файлов в каталогах ./ ./olimp/ ./olimp/staff/
Определяя настройки доступа к каталогам сайта с помощью директивы <Directory> в одном конфигурационном файле всего сайта, мы получим следующие преимущества: а) можно быть уверенным, что ничего не пропустим, если вдруг нужно изменить уровень доступа к какому-нибудь ресурсу; б) повышаем скорость реакции сервера на запросы, т.к. все настройки загружаются при старте Apache. Ну а мириться придётся с тем, что для каждого каталога необходимо описывать права отдельно (помним, что для подкаталогов права наследуются), даже если они одинаковые. Правда, есть поддержка масок, например:
<Directory ~ "^/www/.*/[0-9]{3}">
будет соответствовать именам каталогов в /www/ состоящим из трёх цифр, но это не всегда может облегчить ситуацию. Мы рассмотрим оба способа и изменим права доступа к двум каталогам сайта logos. 1) Описываем права доступа к каталогам в главном конфигурационном файле httpd.conf:
<VirtualHost logos.mynetwork.ru> DocumentRoot /var/www/html/logos ServerName logos.mynetwork.ru ErrorLog /var/log/httpd/logos/error_log CustomLog /var/log/httpd/logos/access_log combined <Directory /var/www/html/logos/info1> Options +Indexes Order deny,allow Deny from all Allow from 192.168.100.11 Allow from 192.168.100.17 </Directory> <Directory /var/www/html/logos/info2> AuthType Basic AuthName "Boss" AuthUserFile "/var/www/main_users" Require valid-user </Directory> </VirtualHost>
2) Чтобы предоставить такие же права с помощью файлов .htaccess, нужно создать соответственно файл /var/www/html/logos/info1/.htaccess:
Options +Indexes Order deny,allow Deny from all Allow from 192.168.100.11 Allow from 192.168.100.17
Оба варианта настройки равноправны и создают следующие ограничения: Доступ к ресурсу http://logos.mynetwork.ru/info1/ смогут получить только два пользователя из локальной сети с указанными IP адресами (хотя такие ресурсы лучше хранить на внутренних веб-серверах), ещё мы дали разрешение Apache, в случае отсутствия в каталоге начальной страницы, генерировать html документ с содержимым каталога. Для доступа к ресурсу http://logos.mynetwork.ru/info2/ будут запрошены имя пользователя и пароль, которые будут сверены с данными в файле /var/www/main_users. Создадим этот файл: # touch /var/www/main_users # chown root.webmaster /var/www/main_users Добавим в него пользователя chef: # /usr/bin/htpasswd /var/www/main_users chef Остальных пользователей добавляем аналогичным способом. Такие файлы создаём для каждой группы пользователей с одинаковыми правами доступа к ресурсу. Одни и те же группы можно использовать во всех сайтах.
Последние штрихи.
В заключении можно для изящности выделить настройку каждого сайта в отдельный файл, и подключить их в httpd.conf:
Include /etc/httpd/conf/vhosts/teo.conf Include /etc/httpd/conf/vhosts/logos.conf Include /etc/httpd/conf/vhosts/pantheon.conf
Кроме изящности мы получаем удобство в быстром подключении и отключении сайта, путём добавления/снятия символа комментария “#” в начале строки. Это особенно актуально, когда настройка каждого сайта раздувается на несколько десятков строк. Также нелишне будет настроить ротацию журналов с помощью logrotate.
Приложение. Особенности директив Listen и NameVirtualHost
Директива Listen имеет больший приоритет чем, NameVirtualHost. Она говорит, откуда принимать запросы. В то время как последняя определяет, как обрабатывать полученный запрос. Это значит, что если указано значение
Listen 80
то Apache будет прослушивать порт 80 на всех IP адресах и директива
NameVirtualHost 10.0.10.15
не ограничивает запросы, пришедшие на другие адреса, и они будут обрабатываться наравне с указанным адресом, а если указано значение
Listen 10.0.10.15:80
то
NameVirtualHost 192.168.100.18
не возымеет действия, и сайт будет не доступен из локальной сети.
Большинство из нас, наверное, не сможет ответить на простые вопросы: где жили и кем были его предки. Конечно, если речь идет не о дедушке и бабушке, а о более далеких прародителях. Между тем сведения об этом содержатся в…
в международном научно-популярном журнале "Нексус" за апрель-май 2000 года появился материал известного калифорнийского гипнотерапевта и уфолога Ричарда Бойлана. Ученый рассказывает об отставном полковнике ВВС США…
С помощью всего лишь нескольких простых изменений в вашем образе жизни, вы можете сэкономить сотни гривен на отоплении. Конечно же можно купить экономный котел по доступной цене, но что делать если всё уже давно…
Если ваша собака очень часто чешет ухо или мотает головой, обратите внимание на возможность инфекции уха. В данном случае нужно выполнить более детальный осмотр. Игнорирование ушной инфекции может привести к…
Как-то раз один человек вернулся поздно домой с работы, как всегда усталый и задёрганный, и увидел, что в дверях его ждёт пятилетний сын.- Папа, можно у тебя кое-что спросить?- Конечно, что случилось?- Пап, а сколько ты…
В январе 1798 года, когда императрица Мария Федоровна готовилась стать матерью десятого младенца, императору Павлу представлялась в Зимнем дворце депутация петербургских старообрядцев для выражения ему чувств…
серия Need For Speed издавна славится своей уникальной формулой – чем больше однотипных гонок мы выпускаем, тем лучше. Здесь, пожалуй, на ум приходит только Assassin’s Creed с похожей формулой игры. Но в отличии от последнего, у…
Тем кто любит фантазировать следует ознакомиться с историей, которую рассказал Г. Петров из Москвы. Все это было очень давно, в 56-м году - я тогда только школу окончил А ровно год спустя мы, выпускники школы ?…
В 1933 году Лео Фробениус, знаменитый немецкий исследователь Северной Африки, во время одной из своих экспедиций обнаружил в Ливии, на скалах Фецца-на в сердце безводной пустыни Сахара, изображения быков, слонов,…