Багатоликий Apache
Архів номерів / 2005 / Випуск №12 (37) / Багатоликий Apache. Розміщуємо кілька сайтів на одному веб-сервері
ПАВЕЛ МАЛАХІВ
Багатоликий Apache Розміщуємо кілька сайтів на одному веб-сервері
Встановивши веб-сервер Apache і надавши через нього на загальний огляд свій сайт, деякі й не підозрюють, яким потужним інструментом вони володіють. З його допомогою можна керувати сотнями сайтів з різними іменами та рівнями доступу. Грошова вартість та тимчасові витрати на додавання кожного сайту при цьому мінімальні.
- Комп'ютер із встановленим пакетом Apache 1.3 або 2.0.
- Адреса сервера в Інтернеті: 10.0.10.15 та ім'я: teo.mynetwork.ru.
- Адреса сервера у локальній мережі: 192.168.100.18.
- Декілька сайтів.
- Декілька імен для одного сайту.
- Розмістити усі сайти на одному сервері.
- Зробити доступ до кожного сайту на окремому URL.
- Обмежити доступ до деяких сайтів.
- Зробити перенаправлення кількох імен на один сайт.
Ходімо від простого до складного. Для початку розглянемо випадок, коли у нас два сайти та два імені 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:
CustomLog /var/log/httpd/teo/access_log combined
CustomLog /var/log/httpd/logos/access_log combined
Це можна здійснити двома способами: створення синонімів або перенаправлення всіх звернень з іншого сайту.
Синоніми задаються директивою ServerAlias, можуть містити маску і розділяються пробілом. Ось кілька прикладів створення синонімів:
ServerAlias www.teo.mynetwork.ru god.mynetwork.ru pantheon.ru
Перенаправлення задається директивою Redirect. Створюємо новий пустий сайт pantheon.ru. Як і для попередніх сайтів, це робиться в три кроки: створення каталогу для документів, для журналів та додавання конфігурації до httpd.conf:
CustomLog /var/log/httpd/pantheon/access_log combined
Можна перенаправляти не з усього сайту, а лише з певного каталогу або навіть документа:
Redirect /samag http://samag.ru
Redirect /ftp/ ftp://citkit.ru/pub/
Redirect /find/ya.htm http://yandex.ru
При цьому Apache сприймає перший параметр директиви Redirect не як URL, а як набір символів, при збігу з яким відбувається перенаправлення. Звідси випливає, що він не перевіряє наявність зазначених каталогів та файлів, а посилання /samag та /samag/ не вважає однаковими.
Обмежуємо доступ до сайтів
# This should be changed to whatever you set DocumentRoot to
Тепер перейдемо безпосередньо до роздачі правдоступу. Існує два способи вказати права доступу до каталогу веб-сайту засобами Apache: помістити в каталог файл .htaccess або використовувати директиву у конфігураційному файлі. У обох випадках правила поширюються і вкладені каталоги.
Перерахуємо переваги використання файлу .htaccess:
Є й недоліки:
- щоб відповісти на запитання: «які обмеження доступу існують на сайті?» - адміністратору необхідно пам'ятати, у яких каталогах лежать ці файли та посилання;
- якщо сайт буде переноситися на інший сервер і, що дуже ймовірно, буде розміщений в іншому каталозі, то для коригування посилань піде багато часу;
- збільшується навантаження сервера, т.к. при кожному запиті на ресурс він звертається до. запит на ресурс http://teo.mynetwork.ru/olimp/staff/zeus.htm ініціює перевірку .htaccess-файлів у каталогах "./", "./olimp/", "./olimp/staff/".
Визначаючи налаштування доступу до каталогів сайту за допомогою директиви в одному конфігураційному файлі всього сайту, ми отримаємо такі переваги:
- можна бути впевненим, що нічого не пропустимо, якщо раптом потрібно змінити рівень доступу до якогось ресурсу;
- підвищуємо швидкість реакції сервера запити, т.к. всі налаштування завантажуються під час старту Apache.
Ну, а миритися доведеться з тим, що для кожного каталогу необхідно описувати права окремо (пам'ятаємо, що для підкаталогів права успадковуються), навіть якщо вони однакові.
Щоправда, є підтримка масок, наприклад:
буде відповідати іменам каталогів в /www/, що складаються з трьох цифр, але це не завжди може полегшити ситуацію.
Ми розглянемо обидва способи та змінимо права доступудо двох каталогів сайту logos.
Перший. Описуємо права доступу до каталогів у головному файлі конфігурації httpd.conf:
CustomLog /var/log/httpd/logos/access_log combined