Установка і настройка веб-сервера Apache

  1. Завдання до роботи
  2. запуск Apache
  3. Налаштування Apache
  4. Директиви конфігурації Apache
  5. Налаштування віртуальних хостів
  6. Контрольні питання

Веб-сервер Apache - це відкрите програмне забезпечення , Що використовується на переважній більшості серверів www (за даними http://netcraft.com ). Популярність Apache обумовлена ​​його надійністю, гнучкістю і високою продуктивністю.

Мета роботи: Отримати практичні навички щодо розгортання веб-сервера під керуванням Apache (версія 2.x), включаючи установку httpd, основні настройки і конфігурація віртуальних хостів.

Завдання до роботи

  1. Встановити веб-сервер Apache в основний конфігурації в якості системного сервісу (runlevel 3 і 5).
  2. Налаштувати 2-3 іменованих віртуальних хоста, доступних з будь-якого комп'ютера в межах дисплейного класу, де проводиться лабораторна робота.

Вказівки до роботи

установка Apache

Установка веб-сервера Apache в сучасних дистрибутивах Linux не представляє особливих складнощів і виконується за допомогою системних утиліт управління пакетами. Так, наприклад, установку Apache в .deb-based дистрибутивах (Debian, Ubuntu і т.п.) можна виконати за допомогою apt-get:

sudo apt-get install apache2

Перевірити установку (на прикладі .deb-дистрибутива, з відображенням пов'язаних пакетів):

[email protected]: ~ $ dpkg --list apache2 * Desired = Unknown / Install / Remove / Purge / Hold | Status = Not / Inst / Cfg-files / Unpacked / Failed-cfg / Half-inst / trig-aWait / Trig-pend | / Err? = (None) / Reinst-required (Status, Err: uppercase = bad) || / Ім'я Версія Опис +++ - =================== - =================== - == ================================================== == ii apache2 2.2.12-1ubuntu2 Apache HTTP Server metapackage un apache2 -common (опис недоступно) un apache2-doc (опис недоступно) un apache2-mpm (опис недоступно) un apache2-mpm-event (опис недоступно) un apache2- mpm-itk (опис недоступно) ii apache2-mpm-prefork 2.2.12-1ubuntu2 Apache HTTP Server - traditional non-threaded model un apache2-mpm-worker (опис недоступно) un apache2-suexec (опис недоступно) un apache2-suexec- cust (опис недоступно) ii apache2-utils 2.2.12-1ubuntu2.1 utility programs for webservers ii apache2.2-bin 2.2.12-1ubuntu2 Apac he HTTP Server common binary files ii apache2.2-common 2.2.12-1ubuntu2 Apache HTTP Server common files [email protected]: ~ $

Установка в rpm-based система (RHEL, openSuSE, AltLinux, Fedora Core і т.п.) може бути виконана за допомогою, наприклад, установника zypper:

[email protected]: ~ $ sudo zypper install apache2

Перевірити установку можна, наприклад, так:

aag @ aag: /etc/apache2/sysconfig.d> zypper se apache2 Завантаження даних про репозиторіях ... Читання встановлених пакетів ... З | ім'я | висновок | Тип - + ------------------------------- + -------------- ------------------------------------ + ------------- ---------- i | apache2 | Веб-сервер Apache версії 2.2 | пакет | apache2 | Веб-сервер Apache версії 2.2 | пакет з вихідним кодом | apache2-devel | Файли заголовків Apache 2.2 | пакет | apache2-doc | Пакет з додатковою документацією. | пакет | apache2-event | Apache 2 event MPM (Multi-Processing Module) | пакет i | apache2-example-pages | Приклади сторінок для web-сервера Apache 2 | пакет | apache2-icons-oxygen | Значки Oxygen для Apache 2 | пакет | apache2-itk | Apache 2 "ITK" MPM (Multi-Processing Module) | пакет | apache2-mod_apparmor | AppArmor module for apache2 | пакет | apache2-mod_auth_ntlm_winbind | Enables Apache to authenticate users against M-> | пакет i | apache2-mod_dnssd | Модуль Apache2 для підтримки Zeroconf через DN-> | пакет | apache2-mod_fcgid | Alternative FastCGI module for Apache2 | пакет i | apache2-mod_jk | Connectors between Apache and Tomcat Servlet C-> | пакет | apache2-mod_macro | Define and Use Macros within the Apache Config-> | пакет | apache2-mod_mono | Run ASP.NET Pages on Unix with Apache and Mono | пакет | apache2-mod_perl | Вбудований Perl для Apache | пакет | apache2-mod_perl-devel | Embedded Perl for Apache - Development package | пакет i | apache2-mod_php5 | Модуль PHP5 для веб-сервера Apache 2.0 | пакет | apache2-mod_python | Модуль Python для веб-сервера Apache 2 | пакет | apache2-mod_scgi | Apache module named mod_scgi that implements t-> | пакет | apache2-mod_security2 | ModSecurity Open Source Web Application Firewall | пакет | apache2-mod_tidy | Apache Module using the Tidy Library to Clean -> | пакет | apache2-mod_wsgi | Python WSGI adapter module for Apache | пакет i | apache2-prefork | Apache 2 "prefork" MPM (Multi-Processing Module) | пакет i | apache2-utils | Утиліти Apache 2 | пакет | apache2-worker | Apache 2 worker MPM (Multi-Processing Module) | пакет | perl-Apache2-AuthCookieDBI | AuthCookie module backed by a DBI database | пакет | rubygem-passenger-apache2 | Passenger apache module | пакет

Подробиці установки пакетів для різних дистрибутивів наведені тут .

У наведених прикладах apache2-mpm-prefork і apache2-mpm-worker - різні збірки apache2, що підтримують мультіпотоковую обробку, реалізовану за допомогою модулів MPM (multy-processing modules, модулі мультіпоточной обробки).

  • Apache2 worker при запуску створює кілька дочірніх процесів, по кілька ниток в кожному (кількість задається у файлі httpd.conf). Така конфігурація знижує споживання пам'яті та рекомендується для високонавантажених веб-серверів.
  • Apache2 prefork створює задану кількість дочірніх процесів, по одній нитки в кожному. Тобто кожен процес обробляє тільки одне з'єднання.

Worker вимагає менше пам'яті, працює швидше, але з іншого боку, многонитевую конфігурацію набагато складніше налагоджувати.

У загальному випадку вибір необхідної конфігурації визначаться вирішуваних завдань, але модель prefork є більш стабільною.

Нижче наведені вибіркові дані з реального тестування :

Apache Bench results for prefork: -------------------------------------------- ----------------- ... Server Software: Apache / 2.2.4 ... Requests per second: 20.91 [# / sec] (mean) ... Transaction rate: 20.12 trans / sec ---------------------------------------------- --------------- Apache Bench results for worker: ----------------------------- -------------------------------- ... Server Software: Apache / 2.2.4 ... Requests per second: 40.94 [# / sec] (mean) ... Transaction rate: 36.72 trans / sec ------------------------------- ------------------------------

запуск Apache

Запуск встановленого (і налаштованого) web-сервера Apache вручну виконується такою командою (якщо використовується init.d):

sudo /etc/init.d/apache2 start

або:

sudo invoke-rc.d apache2 start

Для зупинки та перезапуску web-сервера використовуються, відповідно, такі команди: sudo /etc/init.d/apache2 stop, sudo /etc/init.d/apache2 restart, sudo invoke-rc.d apache2 stop.

Якщо в системі використовується скрипт service, то для запуску Apache можна виконати таку команду:

sudo service apache2 start

Автоматичний запуск Apache2 як системного сервісу встановлюється такою командою:

sudo chkconfig apache2 -s 35 // встановлюємо запуск на 3 та 5 рівнях

Перевірка результов установки:

[email protected]: ~ $ sudo service apache2 status * Apache is running (pid 1867). [email protected]: ~ $ chkconfig -l apache2 apache2 0: off 1: off 2: on 3: on 4: on 5: on 6: off

Якщо установка і запуск пройшли успішно, то Apache в базовій конфігурації вже можна використовувати: в цьому можна переконатися, відкривши в браузері адресу http: // localhost ( Мал. 1 )

Веб-сервер Apache - це   відкрите програмне забезпечення   , Що використовується на переважній більшості серверів www (за даними   http://netcraft

Мал. 1. Результат установки Apache

Налаштування Apache

Рідкісний випадок, коли веб-сервер використовується з дефолтними настройками. Зазвичай, перед запуском його потрібно налаштувати під конкретні завдання. Для цього потрібно відредагувати конфігураційний файл httpd.conf, в якому зберігаються всі налаштування.

Насправді httpd.conf - це основний, але не єдиний файл настройок. Справа в тому, що останні версії Apache підтримують модульну структуру httpd.conf і дозволяють гнучко управляти настройками шляхом підключення до нього додаткових конфігураційних файлів.

Так, конфігураційні файли Apache в збірці для OpenSuSE розміщені в директорії / etc / apache2. Спільнота розробників цього дистрибутива Linux виконав велику роботу з сортування директив конфігурації за призначенням і функцій і розміщення їх в різних файлах. Такий підхід покликаний полегшити управління веб-сервером Apache, що працює на різних версіях SuSE Linux. У табл. 1 наведено список файлів налаштувань, розміщених в каталозі / etc / apache2 OpenSuSE.

Табл. 1 Структура кофігураціонних файлів Apache в SuSE / OpenSuSE

Configuration Description uid.conf UserID / GroupID з чиїми правами працює веб-сервер server-tuning.conf Системні параметри (кількість процесів, тайм-аути, обсяг пам'яті ...) sysconfig.d / loadmodule.conf Список завантажуваних модулів розширення . listen.conf IP-адреси / порти на яких працює сервер mod_log_config.conf Розміщення і формат журналів sysconfig.d / global.conf Глобальні налаштування веб-сервера mod_status.conf Статус сервера (моніторинг) mod_info.conf Доступ до модуля mod_info. mod_usertrack.conf Умовчання для cookie-based спостереження за активністю користувачів. mod_autoindex-defaults.conf Умовчання для автоматичної генерації списків файлів в каталогах mod_mime-defaults.conf Умовчання для різних типів вмісту (mime-types). errors.conf настроюються повідомлення про помилки. ssl-global.conf Загальна конфігурація для захищених з'єднань (SSL). default-server.conf Налаштування для "сервера за замовчуванням", на який перенаправляються запити, звернені ні до віртуальним хостам.

Більш того, httpd.conf це звичайне, але не обов'язкове назву. Наприклад, в Apache2.2 з дистрибутива Ubuntu 9.10 файл настройок називається apache2.conf.

Так чи інакше, структура файлу httpd.conf достатня проста і детально описана в самому файлі і його модулях (якщо такі використовуються, як в прикладі з OpenSuSE). Тут наведемо дуже короткий фрагмент оригінального httpd.conf (рядки, що починаються зі знака # ( «решітка») - коментарі):

# Директиви конфігурації веб-сервера розділені на три основні групи: # 1. Директиви управління веб-сервером як таким ( "глобальне оточення"); # 2. Директиви, що визначають поведінку "головного" сервера, до якого виконуються # всі звернення, якщо відсутні віртуальні хости. Ці директиви визначають значення # за умовчанням для всіх віртуальних серверів # 3. Налаштування віртуальних хостів, які дозволяють управляти запитами, що входять # на різні мережеві адреси, або з різними доменними іменами # ... Далі йдуть інші опису і безпосередньо директиви веб-сервера

Всі директиви конфігурації задаються парами виду:

<Параметр> <роздільник> <значення>

тут:

<Параметр>: Рядок, що визначає ім'я параметра.

<Роздільник>: Один або кілька послідовних роздільників (прогалини, символи табуляції).

<Значення>: Фактичне значення параметра.

Кілька директив можуть бути укладені в контейнери виду:

<Імя_блока /> <спісок_діректів> </ імя_блока>

Прикладом такого блоку є контейнер Directory.

Наведені далі опису деяких директив не є вичерпними інструкціями з налаштування веб-сервера, проте зачіпають ті зміни, які, можливо, доведеться внести, щоб змусити сервер працювати так, як потрібно.

Директиви конфігурації Apache

ServerRoot: У цій директиві задається базовий каталог, в якому непосредсвенно встановлено програмне забезпечення HTTP-сервера.

ServerName: Директива ServerName дозволяє задати ім'я хоста, що повертається клієнтові. Ім'я, яке ви вказуєте тут, має бути зареєстрованим доменним ім'ям вашого хоста. Якщо сервер не має зареєстрованого імені, ви можете вказати тут його ip-адресу, за якою вам доведеться звертатися до нього і що може сильно ускладнити переадресацію ресурсів.

DocumentRoot: У цій директиві задається каталог, з якого беруться передаються клієнтам документи. Можна надавати клієнтам і файли, що знаходяться в інших каталогах, - для цього використовуються символічні посилання.

ServerAdmin: Офіційний електронну адресу адміністратора веб-вузла.

DirectoryIndex: Ця директива дозволяє задати назву документа, що повертається за запитом, який не містить в рядку URI назви документа. Якщо ви вказуєте декілька імен, розділяйте їх пробілами. приклад:

DirectoryIndex index.html index.php index.htm default.html

Сервер буде шукати перераховані файли у відповідному порядку.

ErrorLog і CustomLog: За допомогою цих двох директив задається шлях до log-файлів, в яких реєструються помилки і спроби доступу до сервера відповідно. У файлі, вказаному в директиві ErrorLog, сервер зберігає повідомлення діагностики, включаючи повідомлення про помилки, що видаються сценаріями CGI. У файлі, вказаному в директиві CustomLog, сервер зберігає всі запити клієнтів. Якщо включена опція HostnameLookups, то разом із запитами реєструються імена комп'ютерів.

ErrorDocument: Ця директива дозволяє перевизначити повідомлення про помилки, зіставивши у відповідність кодам помилок HTTP-сервера текстові повідомлення і / або адреси URL на тому ж сервері. наприклад:

ErrorDocument 404 "Цього файлу тут немає, не було і не буде."

Options: Ця директива перераховує список опцій, які застосовуються до зазначеного каталогу. Опції можуть мати значення "None", "All" або будь-яку комбінацію з "Indexes", "Includes", "FollowSymLinks", "ExecCGI" або "MultiViews". Наприклад, така конфігурація визначає порядок відображення індексного сторінки, дозволяє серверні включення (SSI) і перехід по символьних посиланнях:

Options Indexes Includes FollowSymLinks

AllowOverride: З параметром none блокує використання файлу .htaccess , З параметром all - дозволяє перекривати дефолние настройки директивами з .htaccess.

Order: Директива, разом з директивами Allow і Deny, яка визначає порядок звернення до ресурсів відповідно до прав доступу. приклад:

Order allow, deny Allow from all

Приклад використання блоку директив для налаштувань кореневого каталогу:

<Directory /> Options FollowSymLinks ExecCGI AllowOverride All </ Directory>

Див. також Основні директиви Apache , Коментарі в файлі /etc/apache2/httpd.conf (англ.) І офіційну документацію .

Налаштування віртуальних хостів

Apache підтримує можливість розміщення декількох сайтів на одному ip-адресу. Це називається віртуальний хостинг на основі імен, а такі сайти, кожен з яких має власне доменне ім'я, віртуальними хостами (name based virtual hosts). Для реалізації такої можливості, доменні імена віртуальних хостів повинні бути зареєстровані в системі DNS.

Для включення можливості роботи з віртуальними хостами перше, що необхідно зробити - змінити директиву NameVirtualHost в файлі конфігурації. У разі OpenSuSE потрібно відкрити файл /etc/apache2/listen.conf, знайти і розкоментувати наступний рядок:

# Дозволити іменовані звернення на 80-й порт будь-якого інтерфейсу NameVirtualHost *: 80

Після збереження змін перевіримо конфігурацію:

[email protected]: / etc / apache2 / # apache2ctl configtest [Mon Apr 21 9:45:51 2008] [warn] NameVirtualHost *: 80 has no VirtualHosts Syntax OK // синтаксис правильний

У цьому прикладі при перевірці синтаксису було отримано попередження про те, що сервер не має віртуальних хостів. Розглянемо процес створення віртуального хоста на прикладі OpenSuSE:

1. Перемістимося в каталог /etc/apache2/vhosts.d, в якому зберігається інформація про віртуальних хостах:

[email protected]: / etc / apache2 / #cd /etc/apache2/vhosts.d

2. Скопіюємо файл vhost.template (шаблон віртуального хоста) в новий файл з розширенням .conf (обов'язково!):

[email protected]: /etc/apache2/vhosts.d # cp vhost.template mysite.conf

Тепер у файлі mysite.conf можна відредагувати конфігурацію нового віртуального хоста. Приклад (зі скороченнями) для сайту mysite.local приведений в лістингу 1.

Лістинг 1. Приклад конфігурації

<VirtualHost *: 80> ServerAdmin [email protected] ServerName mysite.local DocumentRoot /srv/www/vhosts/mysite.local ErrorLog / var / log / apache2 / mysyte_error_log CustomLog / var / log / apache2 / mysite_access_log combined HostnameLookups Off UseCanonicalName Off ServerSignature On # інші опції <directory "/srv/www/vhosts/mysite.local"> Options All # або той набір опцій, який необхідний AllowOverride None # перекриття опцій у файлі .htaccess Order allow, deny # порядок доступу Allow from all # інші опції </ directory> </ virtualHost>

Після внесення змін в конфігурацію виконуємо рестарт веб-сервера. Якщо помилок не було, то створений сайт повинен стати доступним за адресою http: //mysite.local. Ще раз відзначимо, що ім'я сайту має бути зареєстровано в системі доменних імен. У разі локального сайту, це можна зробити шляхом редагування файлу / etc / hosts, в який потрібно додати запис виду:
ip-address sitename [sitealias].

Аналогічним чином додаємо інші віртуальні хости, не забуваючи після зміни конфігурації перезавантажувати веб-сервер.

Контрольні питання

  1. В якому випадку сервер може повернути повідомлення "Server is busy"?
  2. Що станеться з веб-сервером, якщо в конфігурації допущена помилка?
  3. Як змусити Apache працювати на порту, що відрізняється від прийнятого за замовчуванням?
  4. Як налаштувати Apache для роботи з "ip-based" віртуальними хостами? (Для самостійного вивчення)
  5. Чи можна змусити Apache працювати на декількох портах? (Для самостійного вивчення)

Постійна адреса цієї сторінки:

Що станеться з веб-сервером, якщо в конфігурації допущена помилка?
Як змусити Apache працювати на порту, що відрізняється від прийнятого за замовчуванням?
Як налаштувати Apache для роботи з "ip-based" віртуальними хостами?