Багатоликий 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