
- •Тема 1. Мережеві операційні системи, ос FreeBsd
- •Контрольні питання
- •Література
- •Тема 2. Ядро ос FreeBsd і управління програмним забезпеченням
- •Література
- •Тема 3. Мережева підсистема FreeBsd
- •Література
- •Тема 4. Маршрутизація трафіку в ос FreeBsd
- •Література
- •Тема 5. Динамічне налаштування мережевих інтерфейсів
- •Література
- •Тема 6. Засоби фільтрації трафіку
- •Література
- •Тема 7. Трансляція мережевих адрес
- •Література
- •Тема 8. Служба доменних імен
- •Література
- •Тема 9. Поштові служби. Протоколи smtp, pop3
- •Література
- •Тема 10. Протокол imap
- •Література
- •Тема 11. Обмін файлами у мережах. Протокол ftp
- •Література
- •Тема 12. Обмін файлами у мережах. Nfs, smb, BitTorrent
- •Література
- •Тема 13. Веб-сервер на основі ос FreeBsd
- •Література
- •Тема 14. Проксі –сервер. Сервіси моніторингу
- •Література
- •Тема 15. Захищені віртуальні канали. Стек протоколів ipSec
- •Література
Література
1. Одом У. Компьютерные сети. Первый шаг = Computer Networking: First-step / Пер. В. Гусев. — СПб.: «Вильямс», 2006. — 432 с. — (Первый шаг). — 3 000 экз. — ISBN 5-8459-0881-7
Тема 13. Веб-сервер на основі ос FreeBsd
Глобальна мережа Інтернет
Інтернет – найбільша глобальна комп'ютерна мережа, що зв'язує десятки мільйонів абонентів у більш як 150 країнах світу. Щомісяця її поширеність зростає на 7-10%. Інтернет утворює немовби ядро, яке забезпечує, взаємодію інформаційних мереж, що належать різним установам у всьому світі. Якщо раніше вона використовувалася виключно як середовище для передачі файлів і повідомлень електронної пошти, то сьогодні вирішуються більш складні завдання, які підтримують функції мережного пошуку та доступу до розподілених інформаційних ресурсів й електронних архівів. Таким чином, Інтернет можна розглядати як деякий глобальний інформаційний простір.
Мережа Інтернет, що служила спочатку дослідницьким і навчальним групам, стає все популярнішою в ділових колах. Компанії спокушують дешевий глобальний зв'язок і його швидкість, зручність для проведення сумісних робіт, доступні програми, унікальна база даних цієї мережі. Вони розглядають глобальну комп'ютерну мережу як доповнення до своїх власних локальних мереж. Уже кілька років розвиваються і встигли широко ввійти в практику в розвинених країнах технології Інтернет, що є інформаційними технологіями "великої" мережі в корпоративних мережах і навіть у дуже невеликих мережах ПК підприємств малого бізнесу. При низькій вартості послуг (часто це тільки фіксована щомісячна плата за лінії зв'язку або телефон) користувачі можуть дістати доступ до комерційних і некомерційних інформаційних служб США, Канади, Австралії, європейських країн, а тепер уже України та Росії. В архівах вільного доступу мережі Інтернет можна знайти інформацію практично з усіх сфер людської діяльності, починаючи з нових наукових відкриттів до прогнозу погоди на завтра. В Інтернет можна знайти рекламу багатьох тисяч фірм і розмістити (часто безкоштовно!) свою рекламу. Крім того, Інтернет надає унікальні можливості дешевого, надійного та конфіденційного глобального зв'язку. Це виявляється дуже зручним для фірм, що мають свої філіали по всьому світу, транснаціональних корпорацій і структур управління. Як правило, використання інфраструктури Інтернет для міжнародного зв'язку коштує набагато дешевше від прямого комп'ютерного зв'язку через супутниковий канал або телефон.
Електронна пошта - найпоширеніша послуга мережі Інтернет. Сьогодні свою адресу в системі електронної пошти мають сотні мільйонів чоловік. Вартість пересилання листа електронною поштою значно нижча за пересилання звичайного листа. Крім того, повідомлення, передане електронною поштою, досягає адресата протягом кількох хвилин, тоді як звичайний лист він одержує через кілька днів, а то і тижнів.
Стандарти Інтернет забезпечують можливість групової роботи над спільним проектом за допомогою електронної пошти, гіпертекстових документів (служба WWW), а також за допомогою теле-, аудіо- і навіть відеоконференцій у масштабі реального часу. Для забезпечення інформаційної безпеки в мережі застосовуються різні протоколи шифрування конфіденційної інформації, електронні підписи, сертифікація інформації. Заборона на несанкціоноване переміщення даних між локальною мережею підприємства і глобальною мережею може забезпечуватися спеціальними комп'ютерами або програмами (брандмауерами).
Практично всі послуги мережі Інтернет побудовані на принципі "клієнт-сервер".
Сервер (у мережі Інтернет) - це комп'ютер або програма, здатні надавати клієнтам (у міру надходження від них запиту) деякі мережні послуги.
Клієнт - прикладна програма, завантажена в комп'ютер користувача, яка забезпечує передачу запитів до сервера й одержання відповідей від нього.
Різні сервіси мають різні прикладні протоколи. У міру розвитку мережі з'являються нові протоколи (сервіси), змінюючи її вигляд і стрімко розширюючи коло користувачів. Таким чином, щоб скористатися якоюсь із служб мережі Інтернет, необхідно встановити на комп'ютері клієнтську програму, здатну працювати за протоколом цієї служби. Деякі клієнтські програми входять до складу ОС Windows 98, NT, а також до складу програм-броузерів, наприклад, Microsoft Internet Explorer та Netscape Communicator. Розглянемо деякі сервіси, які забезпечує Інтернет.
Сервіс FTP (File Transfer Protocol). Це протокол передачі файлів, один із перших сервісів Інтернет. Цей сервіс дає можливість абоненту обмінюватися двійковими і текстовими файлами з будь-яким комп'ютером мережі. Встановивши зв'язок із віддаленим комп'ютером, користувач може скопіювати файл із нього на свій комп'ютер або скопіювати файл із свого на віддалений комп'ютер. Для вузлів FTP характерною є наявність процедури входу (login). Як "гостьові" ім'я й пароль часто використовуються імена anonymous, ftp, а також адреса електронної пошти. При цьому користувачеві надається доступ до безкоштовно поширюваної інформації. Для зручності роботи з цим сервісом розроблено цілий ряд прикладних програма, що забезпечують зручний Windows-подібний інтерфейс для FTP-сервісу. Даний сервіс може бути використаний для комерційного поширення програмних продуктів, баз даних, моделей, рекламних презентацій, великих за обсягом документів (книг) тощо.
Електронна пошта (E-mail). Вона є одним із перших і, мабуть, найпоширенішим сервісом Інтернет. Цей сервіс забезпечує обмін поштовими повідомленнями з будь-яким абонентом мережі Інтернет. Існує можливість відправлення як текстових, так і двійкових файлів. Електронна пошта є найдешевшим і доступним Інтернет-сервісом в Україні. Можна навести такі переваги електронної пошти в організації ділової діяльності:
реалізується дешеве і майже моментальне розсилання;
не витрачається час на візити до посадових осіб із дрібних питань;
не треба переписувати (передруковувати) копії для розсилання;
дуже просто використати цитати, відповідаючи на повідомлення;
архів листування зберігається в комп'ютері в зручному вигляді;
можна задавати списки розсипки, псевдоніми (alias), вести адресні записники;
можна передавати двійкові файли (схеми, ілюстрації, програми, архіви тощо).
Поштові сервери одержують повідомлення від клієнтів і пересилають їх по ланцюжку до поштових серверів адресатів, де ці повідомлення накопичуються. При встановленні сполучення між адресатом і його поштовим сервером, за командою відбувається передача повідомлень, що надійшли на комп'ютер адресата. Серед клієнтських поштових програм можна виділити The Bat, Microsoft Outlook та інші.
Сервіс Мail Lists (списки розсилки). Його створено на підставі протоколу електронної пошти. Підписавшись (безкоштовно) на списки розсилки, можна регулярно одержувати електронною поштою повідомлення про певні теми (науково-технічні й економічні огляди, презентація нових програмних та апаратних засобів і т. д.).
Сервіс Usenet (групи новини або телеконференції). Він забезпечує обмін інформацією (повідомлення, статті) між усіма, хто користується ним. Це щось на зразок електронної дошки оголошень, на яку будь-який бажаючий може помістити своє повідомлення, і воно стає доступним для всіх інших. Цей сервіс дає змогу поширювати й одержувати комерційну інформацію, дізнаватися про новини ділового світу. Новини поділяються за темами на групи, що якоюсь мірою їх упорядковує. На певні групи можна оформити підписку і періодично, як і електронною поштою, одержувати всі повідомлення, що проходять за темою групи. Для реалізації цього сервісу існують клієнтські програми, наприклад, Microsoft Internet News.
Сервіс WWW (World Wide Web - всесвітня павутина). WWW - це єдиний інформаційний простір, який складається із сотень мільйонів взаємозв'язаних гіпертекстових електронних документів, що зберігаються на Web-серверах. Окремі документи всесвітньої павутини називаються Web-сторінками. Групи тематично об'єднаних Web-сторінок утворюють Web-вузол (жаргонний термін - Web-сайт, або просто сайт). Web-сторінка - це текстовий файл, що містить опис зображення мультимедійного документа на мові гіпертекстової розмітки - HTML (Hyper-Text Markup Language). Сторінка може містити не тільки форматований текст, а й графічні, звукові та відео об'єкти.
Найважливішою рисою Web-сторінок є гіпертекстові посилання. З будь-яким фрагментом тексту або, наприклад, із малюнком, можна пов'язати інший Web-документ, тобто встановити гіперпосилання. У цьому разі під час клацання лівою клавішею миші на тексті або рисунку, що є гіперпосиланням, відправляється запит на доставку нового документа. Цей документ, у свою чергу, також може мати гіперпосилання на інші документи. Таким чином сукупність величезного числа гіпертекстових електронних документів, які зберігаються в серверах WWW, утворює своєрідний гіперпростір документів, між якими можливе переміщення.
Для передачі інформації у WWW використовується протокол HTTP (HyperText Transfer Protocol - протокол передачі гіпертексту). Перегляд Web-сторінок і переміщення через посилання користувачі здійснюють за допомогою програм браузерів (від слова "to browse" - переглядати). Найпопулярнішими Web-браузерами в Україні є Microsoft Internet Explorer та Netscape Communicator.
Сервіс IRC (Internet Relay Chat). Він забезпечує проведення телеконференцій у режимі реального часу. Переваги: можна анонімно поговорити на цікаву тему або швидко одержати консультацію. На відміну від системи телеконференцій, в якій спілкування між учасниками обговорення теми відкрито для всього світу, в системі IRC беруть участь, як правило, лише кілька чоловік. Іноді службу IRC називають чат-конференціями, або просто чатом. Існує кілька популярних клієнтських програм для роботи з серверами і мережами, що підтримують сервіс IRC, наприклад, програми mIRC і mIRC32 для Windows. Ці, а також подібні до них програми застосовуються для ділового й особистого спілкування персоналу фірм у реальному часі, для проведення групових консультацій і нарад.
Служба ICQ. Вона призначена для пошуку мережної IP-адреси людини, комп'ютер якої приєднано в даний момент до мережі Інтернет. Назва служби є акронімом виразу І seek you - я тебе шукаю. Необхідність у подібній послузі пов'язана з тим, що більшість користувачів не мають постійної IP-адреси. Їм видається динамічна ІР-адреса, що діє тільки протягом цього сеансу. Цю адресу видає той сервер, через який відбувається приєднання. У різних сеансах динамічна IP-адреса може бути різною, причому заздалегідь невідомо якою. При кожному приєднанні до мережі Інтернет програма ICQ, встановлена на комп'ютері користувача, визначає поточну IP-адресу і повідомляє його центральній службі, яка, в свою чергу, оповіщає партнерів користувача. Далі партнери (якщо вони також є клієнтами цієї служби) можуть встановити з користувачем прямий зв'язок. Після встановлення контакту зв'язок відбувається в режимі, аналогічному сервісу IRC.
Сервіс Telnet (віддалений доступ). Він дає можливість абоненту, працювати на будь-якому комп'ютері мережі Інтернет, як на своїй власній. Часто використовується режим роботи - доступ до віддаленого сервера бази даних. У минулому цей сервіс також широко використовувався для проведення складних математичних розрахунків на віддалених суперкомп'ютерах. У наші дні у зв'язку зі швидким збільшенням обчислювальної потужності ПК необхідність у подібній послузі скоротилася, але служби Telnet у мережі Інтернет продовжують існувати. Часто протоколи Telnet застосовують для дистанційного керування технічними об'єктами, наприклад, телескопами, відеокамерами, промисловими роботами. Прикладом програми, що реалізує доступ до Telnet-сервісу, може бути програма Net Term.
Для роботи в мережі необхідно:
фізично приєднати комп'ютер до одного з вузлів мережі Інтернет;
одержати IP-адресу на постійній або тимчасовій основі;
встановити і настроїти програмне забезпечення - програми-клієнти тих сервісів, послугами яких мається намір скористатися.
Організаційно доступ до мережі користувачі дістають через провайдери.
Провайдер - це організація (юридична особа), що надає послуги у приєднанні користувачів до мережі Інтернет.
Як правило, провайдер має постійно ввімкнений досить продуктивний сервер, сполучений з іншими вузлами каналами з відповідною пропускною здатністю, і засоби для одночасного підключення кількох користувачів (багатоканальний телефон, багатопортова плата тощо).
Провайдери роблять подібну послугу на договірній основі, найчастіше орієнтуючись на час роботи користувача або обсяг даних, які пересилаються по мережі. При укладанні договору провайдер повідомляє клієнту всі атрибути, необхідні для підключення та настройки з'єднання (ідентифікатори, номери телефонів, паролі тощо). Як правило, користувачі навчальних закладів, великих організацій, фірм, підприємств приєднуються до мережі Інтернет через свою локальну мережу. На один із комп'ютерів локальної мережі покладається вирішення завдань proxy-сервера - управління локальною мережею й виконання функцій "посередника" між комп'ютерами користувачів та мережею Інтернет (proxy - представник, довірена особа).
Всі технічні й організаційні питання взаємодії з провайдером вирішує адміністратор мережі. Для користувачів розробляється інструкція, в якій наводиться перелік дій, які треба виконати для приєднання до мережі Інтернет. Технічно для приєднання до комп'ютера провайдера потрібні ПК, відповідне програмне забезпечення й модем - пристрій, що перетворює цифрові сигнали від комп'ютера на сигнали для передачі по телефонних лініях і навпаки. Комп'ютер провайдера може виконувати функції хост-машини або звертатися до більш потужних хост-машин для доступу до глобальних ресурсів мережі Інтернет через високопродуктивний канал передачі даних - магістраль.
Хост-машина (від англ. host - господар) - це комп'ютер, що виконує мережні функції, реалізуючи повний набір протоколів. Крім мережних функцій, хост-машина може виконувати завдання користувача (програми, розрахунки, обчислення). Деякі хост-машини можуть виконувати функції шлюзів - апаратних і програмних засобів для передачі даних між несумісними мережами, наприклад, між мережею Інтернет та мережами FidoNet. Роль шлюзу між мережею Інтернет і локальними мережами відіграє рroху-сервер.
Система адрес у мережі Internet.
Адреси потрібні для ідентифікації об'єктів, які можуть цікавити користувача в мережі. Найчастіше такими об'єктами є вузли мережі (сайти), поштові скриньки, файли, Web-сторінки. Для кожного з них існує свій формат адреси. Однак, оскільки об'єкти зосереджено у вузлах мережі, в їхніх ідентифікаторах обов'язково присутня адреса вузла.
Для ідентифікації вузлів і маршрутизації пакетів служить IP-адреса. IP-адреса - це чотирибайтне число, перших два байти якого визначають адресу підмережі, а два інших - адресу вузла в ній. За допомогою IP-адреси можна ідентифікувати більш як 4 млрд. вузлів. На практиці ж через особливості адресації до деяких типів локальних мереж кількість можливих адрес становить понад 2 млрд. Для користувача працювати з числовим зображенням IP-адреси незручно, тому йому пропонується більш проста логічна система доменних імен DNS (Domain Name System) - послідовність імен, сполучених крапками, наприклад, microsoft.com, rambler.ru, itl.net.ua, lviv.ua і т.д.
Домен - група вузлів, об'єднаних за деякою ознакою (наприклад, вузли навчальних закладів, вузли якої-небудь країни, вузли однієї організації і т. д.). Система доменів має ієрархічну деревоподібну структуру, тобто кожний домен проміжного рівня містить групу інших доменів. Кореневий домен є умовним, на верхньому рівні можуть бути розташовані початкові (територіальні) домени різних країн. Ім'я вузла (машини) становить нижній рівень доменного імені та позначається крайнім лівим доменом (див. рисунок 8.1).
Наведемо доменні імена деяких країн та організацій: us- США, au- Австралія, fr- Франція, са- Канада, jp- Японія, ru- Росія, uа- Україна, de- Німеччина, com- комерційні організація, edu - навчальні заклади, gov - урядові установи, net - постачальники мережних послуг, org - неприбуткові організації. Слід зазначити, що IP та DNS - різні форми запису адреси одного й того самого мережного комп'ютера. Для переведення доменних імен у IP-адресу служить сервіс DNS.
Для ідентифікації ресурсів мережі (файлів, Web-сторінок) використовується адреса URL (Uniform Resource Locator - уніфікований покажчик ресурсу), яка складається з трьох частин:
зазначення сервісу, що забезпечує доступ до ресурсу (як правило, це ім'я протоколу). Після імені йдуть двокрапка: і два знаки/(коса риска): http://... ;
зазначення DNS імені комп'ютера: http://www.itl.net.ua... ;
зазначення повного шляху доступу до файлу на даному комп'ютері: http://www.itl.net.ua/Faes/Arcbiv/pagel.html
Як роздільник у повному імені використовується знак /. Вводячи ім'я, потрібно точно дотримувати регістр символів, оскільки в Інтернет малі та великі літери вважаються різними. В електронній пошті адреса складається з імені одержувача (поштової скриньки), знака "@" та доменної адреси поштового сервера (локальної мережі), до якого приєднано одержувача. Наприклад: kovalenko@polynet.lviv.ua.
Протокол передачі гіпертексту HTTP
HTTP (HyperText Transfer Protocol - протокол передачі гіпертексту) був розроблений як основа World Wide Web.
Робота по протоколу HTTP відбувається наступним чином: програма-клієнт встановлює TCP-з'єднання з сервером (стандартний номер порту-80) і видає йому HTTP-запит. Сервер обробляє цей запит і видає HTTP-відповідь клієнту.
Структура HTTP-запиту
HTTP-запит складається з заголовка запиту і тіла запиту, розділених порожнім рядком. Тіло запиту може бути відсутнім.
Тема запиту складається з головної (першої) рядка запиту і наступних рядків, уточнюючих запит у головній рядку. Наступні рядки також можуть бути відсутні.
Запит у головній рядку складається з трьох частин, розділених пробілами:
Метод (інакше кажучи, команда HTTP):
GET - запит документа. Найбільш часто вживається метод; в HTTP/0.9, кажуть, він був єдиним.
HEAD - запит заголовка документа. Відрізняється від GET тим, що видається тільки заголовок запиту з інформацією про документ. Сам документ не видається.
POST - цей метод застосовується для передачі даних CGI-скриптів. Самі дані слідують у наступних рядках запиту у вигляді параметрів.
PUT - розмістити документ на сервері. Наскільки я знаю, використовується рідко. Запит з цим методом має тіло, в якому передається сам документ.
Ресурс - це шлях до певного файлу на сервері, який клієнт хоче отримати (або розмістити - для методу PUT). Якщо ресурс - просто якийсь файл для зчитування, сервер повинен по цьому запиту видати його в тілі відповіді. Якщо ж це шлях до якого-небудь CGI-скрипту, то сервер запускає скрипт і повертає результат його виконання. До речі, завдяки такій уніфікації ресурсів для клієнта практично байдуже, що він являє собою на сервері.
Версія протоколу-версія протоколу HTTP, з якою працює клієнтська програма.
Таким чином, найпростіший HTTP-запит може виглядати наступним чином:
GET/HTTP/1.0
Тут запитується кореневої файл з кореневої директорії web-сервера.
Рядки після головної рядка запиту мають наступний формат:
Параметр: значеніe.
Таким чином задаються параметри запиту. Це є необов'язковим, всі рядки після головної рядка запиту можуть бути відсутні; в цьому випадку сервер приймає їх значення за замовчуванням або за результатами попереднього запиту (при роботі в режимі Keep-Alive).
Перерахую деякі найбільш вживані параметри HTTP-запиту:
Connection (з'єднання) - може приймати значення Keep-Alive і close. Keep-Alive ("залишити в живих") означає, що після видачі даного документа з'єднання з сервером не рвуться, і можна видавати ще запити. Більшість браузерів працюють саме в режимі Keep-Alive, так як він дозволяє за одне з'єднання з сервером "скачати" html-сторінку і малюнки до неї. Будучи якось встановленим, режим Keep-Alive зберігається до першої помилки або до явного вказівки в черговому запиті Connection: close. close ("закрити") - з'єднання закривається після відповіді на даний запит.
User-Agent - значенням є "кодове позначення" браузера, наприклад:
Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt)
Accept - список підтримуваних браузером типів вмісту в порядку їх переваги даними браузером, наприклад для мого IE5:
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*
Це, очевидно, потрібно для випадку, коли сервер може видавати один і той же документ в різних форматах.
Значення цього параметра використовується в основному CGI-скриптами для формування відповіді, адаптованого для даного браузера.
Referer - URL, з якого перейшли на цей ресурс.
Host - ім'я хоста, з якого запитується ресурс. Корисно, якщо на сервері є декілька віртуальних серверів під одним IP-адресою. У цьому випадку ім'я віртуального сервера визначається по цьому полю.
Accept-Language - підтримуваний мову. Має значення для сервера, який може видавати один і той же документ в різних мовних версіях.
Формат HTTP-відповіді
Формат відповіді дуже схожий на формат запиту: він також має заголовок і тіло, розділене порожнім рядком.
Тема також складається з основного рядка і рядків параметрів, але формат основного рядка відрізняється від такої в заголовку запиту.
Основна рядок запиту складається з 3-х полів, розділених пробілами:
Версія протоколу - аналогічний відповідному параметру запиту.
Код помилки - кодове позначення "успішності" виконання запиту. Код 200 означає "все нормально" (OK).
Словесний опис помилки - "розшифровка" попереднього коду. Наприклад для 200 це OK, для 500 - Internal Server Error.
Найбільш вживані параметри http-відповіді:
Connection - аналогічний відповідному параметру запиту.
Якщо сервер не підтримує Keep-Alive (є й такі), то значення Connection у відповіді завжди close.
Тому, правильною тактикою браузера є наступна:
1. видати у запиті Connection: Keep-Alive;
2. про стан з'єднання судити по полю Connection у відповіді.
Content-Type ("тип вмісту") - містить позначення типу вмісту відповіді.
Залежно від значення Content-Type браузер сприймає відповідь як HTML-сторінку, картинку gif або jpeg, як файл, який треба зберегти на диску, або як-небудь ще і робить відповідні дії. Значення Content-Type для браузера аналогічно значенню розширення файлу для Windows.
Деякі типи вмісту:
text/html - текст у форматі HTML (веб-сторінка);
text/plain - простий текст (аналогічний "блокнотовскому");
image/jpeg - картинка у форматі JPEG;
image/gif - те ж, у форматі GIF;
application/octet-stream - потік "октетів" (тобто просто байт) для запису на диск.
Насправді типів вмісту набагато більше.
Content-Length ("довжина вмісту") - довжина вмісту відповіді в байтах.
Last-Modified ("Модифікований востаннє") - дата останньої зміни документа.
Веб-сервер Apache
Apache HTTP-сервер (вимовляється /ə.pæ.ʧi/, названий ім'ям групи племен північноамериканських індіанців апачів; крім того, є скороченням від англ. A patchy server; серед українських користувачів загальноприйнято спотворене апач) - вільний веб-сервер (див. рисунок 13.1).
Apache є кросплатформним ПО, підтримує операційні системи Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.
Основними достоїнствами Apache вважаються надійність і гнучкість конфігурації. Він дозволяє підключати зовнішні модулі для надання даних, використовувати СУБД для аутентифікації користувачів, модифікувати повідомлення про помилки і т. д. Підтримує IPv6.
Рисунок 13.1 – Логотип Apache
Сервер був написаний на початку 1995 року і вважається, що його ім'я сходить до жартівливого назвою «a patchy» (англ. «латочку»), так як він усував помилки популярного тоді сервера Всесвітньої павутини NCSA HTTPd 1.3. Надалі, з версії 2.х, сервер був переписаний заново і тепер не містить коду NCSA. На даний момент розробка ведеться в гілці 2.2, а у версіях 1.3 і 2.0 виробляються лише виправлення помилок безпеки. На поточний момент остання версія гілки 2.4 - 2.4.3 (21 серпня 2012), для першої версії це 1.3.42.
Веб-сервер Apache розробляється і підтримується відкритим співтовариством розробників під егідою Apache Software Foundation і включений в багато програмні продукти, серед яких СУБД Oracle і IBM WebSphere.
З квітня 1996 і до теперішнього часу є найпопулярнішим HTTP-сервером в Інтернеті. Статистика Netcraft показує наступні дані про використання Apache:
в серпні 2007 року він працював на 51% всіх веб-серверів світу;
у травні 2009 року - на 46%;
у січні 2011 року - на 59%, тобто більш ніж на 160 млн. сайтів.
Ядро Apache включає в себе основні функціональні можливості, такі як обробка конфігураційних файлів, протокол HTTP і система завантаження модулів. Ядро (на відміну від модулів) повністю розробляється Apache Software Foundation, без участі сторонніх програмістів.
Теоретично, ядро apache може функціонувати в чистому вигляді, без використання модулів. Однак, функціональність такого рішення вкрай обмежена.
Ядро Apache повністю написано на мові програмування C.
Система конфігурації Apache заснована на текстових конфігураційних файлах. Має три умовних рівня конфігурації:
Конфігурація сервера (httpd.conf).
Конфігурація віртуального хоста (httpd.conf c версії 2.2, extra/httpd-vhosts.conf).
Конфігурація рівня директорії (.htaccess).
Має власну мову конфігураційних файлів, заснований на блоках директив. Практично всі параметри ядра можуть бути змінені через конфігураційні файли, аж до управління MPM. Велика частина модулів має власні параметри.
Частина модулів використовує у своїй роботі конфігураційні файли операційної системи (наприклад /etc/passwd і /etc/hosts).
Крім цього, параметри можуть бути задані через ключі командного рядка.
Для веб-сервера Apache існує безліч моделей симетричної мультипроцесорності, деякі з них наведено в таблиці 13.1.
Таблиця 13.1 – Мультипроцесувальні моделі (MPM)
Назва |
Розробник |
Підтримувані OS |
Опис |
Призначення |
Статус |
worker |
Apache Software Foundation |
Linux,FreeBSD |
Гібридна мультипроцесорна-багатонитева модель. Зберігаючи стабільність мультипроцесорних рішень, вона дозволяє обслуговувати велику кількість клієнтів з мінімальним використанням ресурсів. |
Середньонавантажені веб-сервери. |
Стабільний. |
pre-fork |
Apache Software Foundation |
Linux,FreeBSD |
MPM, заснована на попередньому створенні окремих процесів, не використовує механізм threads. |
Велика безпека і стабільність за рахунок ізоляції процесів один від одного, збереження сумісності зі старими бібліотеками, що не підтримують threads. |
Стабільний. |
perchild |
Apache Software Foundation |
Linux |
Гібридна модель, з фіксованою кількістю процесів. |
На високонавантажених серверах, можливість запуску дочірніх процесів використовуючи інше ім'я користувача для підвищення безпеки. |
У розробці, нестабільний. |
netware |
Apache Software Foundation |
Novell NetWare |
Багатонитева модель, оптимізована для роботи в середовищі NetWare. |
Сервери Novell NetWare |
Стабільний. |
winnt |
Apache Software Foundation |
Microsoft Windows |
Багатонитева модель, створена для операційної системиMicrosoft Windows. |
Сервери під керуванням Windows Server. |
Стабільний. |
Apache-ITK |
Steinar H. Gunderson |
Linux,FreeBSD |
MPM, заснована на моделі prefork. Дозволяє запуск кожного віртуального хоста під окремими uid та gid. |
Хостингові сервери, сервери, критичні до ізоляції користувачів і обліку ресурсів. |
Стабільний. |
peruser |
Sean Gabriel Heacock |
Linux,FreeBSD |
Модель, створена на базі MPM perchild. Дозволяє запуск кожного віртуального хоста під окремими uid та gid. Не використовує ниті. |
Забезпечення підвищеної безпеки, робота з бібліотеками, не підтримуються ниті. |
Стабільна версія від 4 жовтня 2007 року, експериментальна - від10 вересня 2009 року. |
Apache HTTP Server підтримує модульність. Існує більше 500 модулів, що виконують різні функції. Частина з них розробляється командою Apache Software Foundation, але основна кількість – окремими open source-розробниками.
Модулі можуть бути як включені до складу сервера в момент компіляції, так і завантажені динамічно, через директиви конфігураційного файлу.
У модулях реалізуються такі речі, як:
Підтримка мов програмування.
Додавання функцій.
Виправлення помилок або модифікація основних функцій.
Посилення безпеки.
Частина веб-додатків, наприклад панелі керування ISPmanager і VDSmanager реалізовані у вигляді модуля Apache.
Apache має вбудований механізм віртуальних хостів. Він дозволяє повноцінно обслуговувати на одному IP-адресі безліч сайтів (доменних імен), відображаючи для кожного з них власне вміст.
Для кожного віртуального хоста можна вказати власні настройки ядра і модулів, обмежити доступ до всього сайту або окремих файлів. Деякі MPM, наприклад Apache-ITK дозволяють запускати процес httpd для кожного віртуального хоста з окремими ідентифікаторами uid і guid.
Також, існують модулі, що дозволяють враховувати і обмежувати ресурси сервера (CPU, RAM, трафік) для кожного віртуального хоста.
Існує безліч модулів, що додають до Apache підтримку різних мов програмування і систем розробки.
До них відносяться:
PHP (mod_php).
Python (mod python, mod wsgi).
Ruby (apache-ruby).
Perl (mod perl).
ASP (apache-asp).
Tcl (rivet).
Крім того, Apache підтримує механізми CGI і FastCGI, що дозволяє виконувати програми на практично всіх мовах програмування, в тому числі C, C++, Lua, sh, Java.
Apache має різні механізми забезпечення безпеки та розмежування доступу до даних. Основними є:
Обмеження доступу до певних директорій або файлів.
Механізм авторизації користувачів для доступу до директорії на основі HTTP-аутентифікації (mod_auth_basic) і digest-аутентифікації (mod_auth_digest).
Обмеження доступу до певних директорій або всьому серверу, засноване на IP-адресах користувачів.
Заборона доступу до певних типів файлів для всіх або частини користувачів, наприклад заборона доступу до конфігураційним файлів і файлів баз даних.
Існують модулі, що реалізують авторизацію через СУБД або PAM.
У деяких MPM-модулях присутня можливість запуску кожного процесу Apache використовуючи різні uid і gid з відповідними цим користувачам і групам користувачів.
Також, існує механізм suexec, використовуваний для запуску скриптів і CGI-додатків з правами та ідентифікаційними даними користувача.
Для реалізації шифрування даних, що передаються між клієнтом і сервером використовується механізм SSL, реалізований через бібліотеку OpenSSL. Для посвідчення справжності веб-сервера використовуються сертифікати X.509.
Існують зовнішні засоби забезпечення безпеки, наприклад mod_security.
Починаючи з версії 2.0 з'явилася можливість визначення сервером локалі користувача. Повідомлення про помилки і події, що посилаються браузеру, тепер представлені на декількох мовах і використовують SSI технологію.
Також, можна реалізувати засобами сервера відображення різних сторінок для користувачів з різними Локаль. Apache підтримує безліч кодувань, у тому числі Unicode, що дозволяє використовувати сторінки, створені в будь-яких кодуваннях і на будь-яких мовах.
Адміністратор може встановити власні сторінки і обробники для всіх HTTP помилок і подій, таких як 404 (Not Found) або 403 (Forbidden). У тому числі існує можливість запуску скриптів і відображення повідомлень на різних мовах.
Конфігурація Apache, додавання і налаштування модулів
FreeBSD використовується в якості платформи для багатьох з найбільш навантажених серверів у світі. Більшість серверів в Інтернет використовують Apache HTTP сервер. Пакети Apache повинні бути включені в постачання FreeBSD. Якщо ви не встановили їх разом з системою, скористайтеся портами www/apache13 або www/apache22.
Як тільки Apache був успішно встановлений, його необхідно налаштувати.
Нижче буде розповідається про версії 1.3.X Apache HTTP сервера, оскільки ця версія найбільш широко використовується в FreeBSD. Apache 2.X містить багато нових технологій, але тут вони не обговорюються. За додатковою інформацією про Apache 2.X, звертайтеся до http://httpd.apache.org/.
У FreeBSD основний файл налаштування Apache HTTP сервера встановлюється в /usr/local/etc/apache/httpd.conf. Це звичайний текстовий UNIX ® файл налаштування з рядками коментарів, що починаються з символу #. Вичерпний опис всіх можливих параметрів налаштування знаходиться за межею розгляду цієї книги, тому тут будуть описані тільки найбільш часто модифікуються директиви.
ServerRoot "/usr/local"
Вказує верхній каталог установки Apache за замовчуванням. Бінарні файли знаходяться в bin і sbin , підкаталоги розташовані щодо кореневого каталогу сервера, файли налаштування знаходяться у etc/apache .
ServerAdmin you@your.address
Адреса, на який повинні будуть відправлятися повідомлення про проблеми з сервером. Ця адреса виводиться на деякі генеруються сервером сторінки, наприклад з повідомленнями про помилки.
ServerName www.example.com
ServerName дозволяє вам встановлювати ім'я хоста, яке відправляється назад клієнтам, якщо воно відрізняється від того, з яким налаштований хост (наприклад, використання www замість реального імені хоста).
DocumentRoot "/usr/local/www/data"
DocumentRoot : Каталог, всередині якого будуть зберігатися документи. Типово, всі запити обробляються всередині цього каталогу, але символічні посилання і синоніми можуть використовуватися для вказівки на інші каталоги.
Непоганою ідеєю буде зробити резервні копії налаштувань Apache перед внесенням змін. Як тільки ви будете задоволені первісної налаштуванням, можна запускати Apache.
Apache Не запускайте з inetd, як це роблять багато інших мережеві сервери. Він налаштований для автономного запуску, щоб забезпечувати більшу продуктивність при обробці HTTP запитів від браузерів клієнтів. Для спрощення запуску, зупинки та перезапуску сервера існує shell скрипт. Для запуску Apache в перший раз просто виконайте:
# /usr/local/sbin/apachectl start
Ви можете зупинити сервер в будь-який момент, виконавши:
# /usr/local/sbin/apachectl stop
Після внесення будь-яких змін у файл налаштувань, вам буде потрібно перезапустити сервер:
# /usr/local/sbin/apachectl restart
Для перезапуску Apache без переривання наявних з'єднань, виконайте:
# /usr/local/sbin/apachectl graceful
Додаткова інформація знаходиться на сторінці довідкового керівництва apachectl.
Для запуску Apache при старті системи, додайте в /etc/rc.conf наступний рядок:
apache_enable="YES"
або для Apache 2.2:
apache22_enable="YES"
Якщо ви хочете передати програмі Apache httpd додаткові параметри командного при завантаженні системи, вони можуть бути поміщені в додатковий рядок rc.conf:
apache_flags=""
Тепер, коли веб сервер запущений, ви можете переглянути свій веб сайт, задавши в рядку браузера адресу http://localhost/. За замовчуванням відображається веб сторінка /usr/local/www/data/index.html.
Apache підтримує два різних типи віртуального хостингу (Virtual Hosting). Перший метод заснований на іменах (Name-based Virtual Hosting). Він використовує отримані від клієнта заголовки HTTP/1.1 для визначення імені хоста. Це дозволяє багатьом різним доменам використовувати один і той же IP адресу.
Для налаштування Apache на використання цього типу хостингу додайте в httpd.conf запис подібну до наступного:
NameVirtualHost *
Якщо веб сервер називався www.domain.tld і ви хочете налаштувати віртуальний домен для www.someotherdomain.tld , необхідно додати в httpd.conf такі записи:
<VirtualHost *>
ServerName www.domain.tld
DocumentRoot /www/domain.tld
</VirtualHost>
<VirtualHost *>
ServerName www.someotherdomain.tld
DocumentRoot /www/someotherdomain.tld
</VirtualHost>
Замініть адреси та шляхи до документів на ті, що ви будете використовувати.
За додатковою інформацією з налаштування віртуальних хостів звертайтеся до офіційної документації Apache: http://httpd.apache.org/docs/vhosts/.
Існують безліч різних модулів Apache, які додають функціональність до основного сервера. Колекція портів FreeBSD надає простий спосіб установки Apache з деякими найбільш популярними додатковими модулями.
Модуль mod_ssl використовує бібліотеку OpenSSL для сильної криптографії через протоколи Secure Sockets Layer (SSL v2/v3) і Transport Layer Security (TLS v1). Цей модуль містить все необхідне для запиту підписаного сертифіката з центру сертифікації для захищеного веб сервера на FreeBSD.
Якщо ви ще не встановили Apache, версія Apache 1.3.X з mod_ssl може бути встановлена через порт www/apache13-modssl. Підтримка SSL також доступна для Apache 2.X через порт www/apache22, де вона включена за замовчуванням.
Для більшості скриптових мов створені модулі Apache. На базі таких модулів можливе створення інших модулів Apache, написаних повністю на скриптовій мовою. Вони також часто використовуються як вбудовані в сервер інтерпретатори, що виключає накладні витрати на запуск зовнішнього інтерпретатора і скорочує час побудови динамічних сторінок.
В останнє десятиліття все більше число компаній звертає увагу на Інтернет як майданчик для ведення та розширення бізнесу. Серед іншого, цей процес підкреслює потребу в інтерактивному вмісті сайтів. Деякі компанії, такі як Microsoft ®, представляють свої закриті рішення; співтовариство розробників відкритих програм відповідає на виклик. Серед сучасних рішень для надання динамічного контенту слід зазначити Django, Ruby on Rails, mod_perl і mod_php.
Django – це розповсюджувана під ліцензією BSD інфраструктура, що дозволяє розробникам швидко створювати елегантні, високопродуктивні веб-додатки. Вона надає в розпорядження розробника об'єктно-реляційне відображення (object-relational mapper), таким чином типи даних розробляються як об'єкти Python. Для цих об'єктів надається багатий інтерфейс доступу до баз даних, при цьому у розробника не виникає необхідності написання SQL-запитів. Django також надає розширювану систему шаблонів, так що логіка програми відокремлена від його HTML-вистави.
Для Django потрібні наступні компоненти: mod_python, Apache і одна з декількох можливих SQL СУБД. Вкажіть відповідні опції збірки, і порт встановить все необхідне.
Установка Django спільно з Apache2, mod_python3 і PostgreSQL
# cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQL
Після установки Django і всіх необхідних йому компонентів вам буде потрібно створити каталог для проекту Django. Далі буде потрібно налаштувати Apache для певних URL адрес на вашому сайті виконувати ваш додаток вбудованим інтерпретатором Python.
Щоб налаштувати Apache відправляти запити для певних URL адрес вашого веб-додатку, вам буде потрібно внести кілька рядків у конфігураційний файл httpd.conf:
<Location "/">
SetHandler python-program
PythonPath "['/dir/to/your/django/packages/'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAutoReload On
PythonDebug On
</Location>
Ruby on Rails це ще одна веб інфраструктура з відкритим вихідним кодом, яка надає повний стек розробки та яка оптимізована для продуктивного і швидкого створення потужних веб-додатків. Ruby on Rails може бути легко встановлена з колекції портів.
# cd /usr/ports/www/rubygem-rails; make all install clean
Проект інтеграції Apache/Perl об'єднує міць мови програмування Perl і HTTP сервера Apache. З модулем mod_perl можливе написання модулів Apache повністю на Perl. Крім того, постійно запущений вбудований в сервер інтерпретатор дозволяє не витрачати ресурси на запуск зовнішнього інтерпретатора і час на запуск Perl.
mod_perl можна використовувати різними способами. Пам'ятайте, що mod_perl 1.0 працює тільки з Apache 1.3, тоді як mod_perl 2.0 сумісний тільки з Apache 2.X. mod_perl 1.0 доступний як порт www/mod_perl , а також у вигляді статично компільованою версії в www/apache13-modperl. mod_perl 2.0 доступний як www/mod_perl2.
PHP, також відомий як «Препроцесор гіпертексту» («Hypertext Preprocessor»), - це скриптова мова загального призначення, в основному призначений для веб розробки. Ця мова може бути вбудований в HTML, його синтаксис запозичений з C, Java ™ і Perl, і він дозволяє веб розробникам швидко писати динамічно генеруються сторінки.
Додавання підтримки PHP 5 до веб сервера Apache проводиться шляхом установки порту lang/mod_php5.
Якщо порт lang/php5 встановлюється вперше, то автоматично відобразяться всі доступні опції (OPTIONS). Якщо меню не відображається, оскільки порт lang/php5 встановлювався раніше, завжди можна повторно викликати діалог меню виконавши наступну команду в каталозі порту:
# make config
Виберіть у меню опцію APACHE, тим самим ви побудуєте завантажуваний модуль mod_php5 для веб сервера Apache.
Безліч сайтів з різних причин (наприклад, через проблеми сумісності або через наявність вже розгорнутих веб додатків) все ще використовують PHP 4. Якщо потрібно mod_php4 замість mod_php5, то скористайтеся портом lang/php4 . Порт lang/php4 підтримує багато з конфігураційних і настановних опцій порту lang/php5.
Цей порт встановлює і налаштовує модулі, необхідні для підтримки динамічних PHP веб сторінок. Переконайтеся, що у файл /usr/local/etc/apache/httpd.conf були додані наступні секції:
LoadModule php5_module libexec/apache/libphp5.so
AddModule mod_php5.c
<IfModule mod_php5.c>
DirectoryIndex index.php index.html
</IfModule>
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
Для завантаження модуля PHP після цього просто викличте команду apachectl з параметром graceful:
# apachectl graceful
При подальших оновленнях PHP команда make config більше не буде потрібно; обрані опції зберігаються автоматично інфраструктурою портів FreeBSD.
Підтримка PHP в FreeBSD побудована за модульним принципом, тому базова установка володіє дуже обмеженою функціональністю. Додаткова функціональність може бути легко добавлена за допомогою порту lang/php5-extensions, керуючого набором розширень PHP через меню, або просто шляхом установки додаткових портів.
Наприклад, для додавання підтримки MySQL до PHP 5, просто встановіть порт databases/php5-mysql.
Після установки нових розширень сервер Apache повинен бути перезавантажено, щоб зміни в конфігурації набули чинності:
# apachectl graceful
Віртуальні хости
Віртуальний хостинг (англ. shared hosting) - вид хостингу, при якому безліч веб-сайтів розташоване на одному веб-сервері. Це найекономічніший вид хостингу, відповідний для невеликих проектів.
Зазвичай кожен веб-сайт розташований на своєму власному розділі веб-сервера, але вони всі разом користуються одним і тим же програмним забезпеченням.
Існує два основні методи реалізації доступу до веб-сайтів:
по імені (також званий англ. shared IP hosting), коли всі веб-сайти використовують один загальний IP-адресу. Згідно з протоколом HTTP/1.1 веб-браузер при запиті до веб-сервера вказує доменне ім'я веб-сайту в полі Host заголовка поточного запиту, і веб-сервер використовує його для правильного виконання запиту, а також копіює це ім'я в клітинку [HTTP_HOST] суперглобального масиву $ _SERVER.
за IP-адресою (також званий англ. dedicated IP hosting), при якому у кожного веб-сайту є власний IP-адреса, а веб-сервер має кілька фізичних або віртуальних мережевих інтерфейсів.
Віртуальний хостинг як послугу порівнюють і описують по кількісним обмеженням:
розмір дискового простору;
кількість місячного трафіку;
кількість сайтів, які можна розмістити в рамках хостингу як однієї послуги;
кількість баз даних і кількість місця під бази даних;
кількість поштових скриньок і FTP-акаунтів;
якісним обмеженням;
вільні ресурси CPU, оперативної пам'яті, які впливають на швидкодію сервера.
У зв'язку з тим, що на такому сервері зазвичай знаходиться дуже багато різних сайтів, навантаження дуже непропорційна і деякі хостери обмежують ресурси сервера (в основному CPU) для скриптів користувача.
Одним з важливих критеріїв вибору хостингу є використовувана операційна система, оскільки від цього залежить програмне забезпечення, яке буде підтримувати функціональність тих чи інших сервісів. Для організації послуги віртуального хостингу використовуються сервери, що працюють під управлінням ОС Unix, наприклад, FreeBSD, GNU/Linux, а також під управлінням ОС Windows. Таким чином, послугу віртуального хостингу можна розділити на дві групи: UNIX/Linux-хостинг і Windows-хостинг.
Представник «легких» веб-серверів – nginx
nginx (англ. engine x) (по-українськи вимовляється як енжін-ікс) - веб-сервер і поштовий проксі-сервер, що працює на Unix-подібних операційних системах (тестувалася збірка і робота на FreeBSD, OpenBSD, Linux, Solaris, Mac OS X, AIX і HP-UX). Починаючи з версії 0.7.52 з'явилася бінарна збірка під Microsoft Windows.
Ігор Сисоєв почав розробку в 2002-му році. Восени 2004 року вийшов перший публічно доступний реліз. Станом на 2013 рік, підтримка та доопрацювання nginx триває.
nginx – простий, швидкий і надійний сервер, не переобтяжений функціями. Застосування nginx доцільно насамперед для статичних веб-сайтів і як проксі-сервера перед динамічними сайтами.
HTTP-сервер:
обслуговування статичних запитів, індексних файлів, автоматичне створення списку файлів, кеш дескрипторів відкритих файлів;
акселерований проксінг без кешування, простий розподіл навантаження і відмовостійкість;
підтримка кешування при акселерованому проксінгу і FastCGI;
акселерована підтримка FastCGI і memcached серверів, простий розподіл навантаження і відмовостійкість;
модульність, фільтри, в тому числі стиск (gzip), byte-ranges (докачка), chunked відповіді, HTTP-аутентифікація, SSI-фільтр;
кілька підзапитів на одній сторінці, оброблювані в SSI-фільтрі через проксі або FastCGI, виконуються паралельно;
підтримка SSL;
підтримка PSGI, WSGI;
експериментальна підтримка вбудованого Perl.
SMTP/IMAP/POP3-проксі сервер:
перенаправлення користувача на SMTP/IMAP/POP3-бекенд з використанням зовнішнього HTTP-сервера аутентифікації;
проста аутентифікація (LOGIN, USER/PASS);
підтримка SSL і STARTTLS.
У nginx робочі процеси обслуговують одночасно безліч сполук, мультиплексуючи їх викликами операційної системи select, epoll (Linux) і kqueue (FreeBSD). Робочі процеси виконують цикл обробки подій від дескрипторів (див. Подієво-орієнтоване програмування). Отримані від клієнта дані розбираються з допомогою кінцевого автомата. Розібраний запит послідовно обробляється ланцюжком модулів, що задається конфігурацією. Відповідь клієнту формується в буферах, які зберігають дані або в пам'яті, або вказують на відрізок файлу. Буфери об'єднуються в ланцюжки, що визначають послідовність, в якій дані будуть передані клієнту. Якщо операційна система підтримує ефективні операції введення-виведення, такі як writev і sendfile, то nginx застосовує їх по можливості.
Конфігурація HTTP-сервера nginx поділяється на віртуальні сервери (директива server). Віртуальні сервери поділяються на location'и (location). Для віртуального сервера можливо задати адреси і порти, на яких будуть прийматися з'єднання, а також імена, які можуть включати * для позначення довільній послідовності в першій і останній частині, або задаватися регулярним виразом.
location'и можуть задаватися точним URI, частиною URI, або регулярним виразом. location'и можуть бути налаштовані для обслуговування запитів із статичного файлу, проксінг на fastcgi/memcached сервер.
Для ефективного управління пам'яттю nginx використовує пули. Пул - це послідовність попередньо виділених блоків динамічної пам'яті. Довжина блоку варіюється від 1 до 16 кілобайт. Спочатку під пул виділяється тільки один блок. Блок поділяється на зайняту область і незайняту. Виділення дрібних об'єктів виконується шляхом просування покажчика на незайняту область з урахуванням вирівнювання. Якщо незайнятої області в усіх блоках не вистачає для виділення нового об'єкта, то виділяється новий блок. Якщо розмір виділяється об'єкта перевищує значення константи NGX_MAX_ALLOC_FROM_POOL, чи довжину блоку, то він повністю виділяється з купи.
Таким чином, дрібні об'єкти виділяються дуже швидко і мають накладні витрати тільки на вирівнювання.
nginx містить модуль географічної класифікації клієнтів за IP-адресою. У його основу входить база даних відповідності IP-адрес географічного регіону, представлена у вигляді Radix tree (стислий префіксних дерево або стиснене бор) в оперативній пам'яті. nginx попередньо розподіляє перші кілька рівнів дерева, таким чином, щоб вони займали рівно 1 сторінку пам'яті. Це гарантує, що при пошуку IP-адреси для перших декількох вузлів при трансляції адреси завжди знайдеться запис в TLB.
За даними Netcraft на травень 2012 року, число сайтів, що обслуговуються nginx, перевищує 70 мільйонів, що робить його третім за популярністю веб-сервером в світі. При цьому, відсоток активних сайтів, що використовують nginx, становить 12,49% від загальної кількості активних сайтів, що робить nginx другим у світі за популярністю веб-сервером серед активних сайтів, поступаючись лише веб-серверу Apache.
За даними W3Techs, nginx найбільш часто використовується на високонавантажених сайтах, займаючи друге місце за частотою використання серед 1000 найбільш відвідуваних сайтів у світі - майже четверта частина таких сайтів працює на nginx.
За даними 1stat.RU, nginx є найпопулярнішим веб-сервером доменної зони. Ru, обслуговуючи більше половини всього сегмента.
Серед відомих проектів, що використовують nginx: Rambler, Yandex, Mail.ru, Ukr.net, Begun, Wordpress.com, SourceForge.net, vk.com, Facebook, Groupon, Diary.ru, Rutracker.org і багато інших.
У зв'язку зі зростаючою популярністю керівництво проекту nginx вирішило почати пропонувати комерційний сервіс для своїх клієнтів. Для цього були введені три пакети технічної підтримки - Premium, Advanced і Essential. Ці пакети включають в себе установку, підвищення продуктивності, конфігурацію, супровід програмного забезпечення, реалізацію, сприяння у проектуванні та фінальної оптимізації.
Конфігурація nginx
Встановлюємо останню стабільну версію nginx з портів:
# cd /usr/ports/www/nginx
# make install clean
Додаємо рядок 'nginx_enable=«YES»' в файл '/etc/rc.conf'.
Основні налаштування nginx по-замовчуванню, щоб знати де шукати:
Конфіг: /usr/local/etc/nginx/nginx.conf
Порти: http/https:80/443
Логи помилок: /var/log/nginx-error.log
Логи доступу: /var/log/nginx-access.log
Конєва папка: /usr/local/www/nginx/
Спочатку ставимо сам php, в конфігураційному меню обовязково обераємо модуль php-fpm (PHP-FPM (FastCGI Process Manager) - PHP реалізація FastCGI):
# cd /usr/ports/lang/php5
# make install clean
Підтримка PHP в FreeBSD побудована за модульним принципом, тому базова установка має обмеженою функціональністю. Додаткові розширення можуть бути легко додані за допомогою порту php5-extensions. Встановимо розширення, які нам необхідні (наприклад: mbstring, gd, mysql ...):
# cd /usr/ports/lang/php5-extensions
# make install clean
Додаємо рядок 'php_fpm_enable="YES"' в файл '/etc/rc.conf'.
Заходимо в конфігураційний файл нашого http-сервера. За замовчуванням він знаходиться тут '/usr/local/etc/nginx/nginx.conf'. Стираємо все. Для початку він буде таким з мінімумом налаштувань:
user www;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
charset utf-8;
location/{
root /usr/local/www/nginx;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_para SCRIPT_FILENAME /usr/local/www/nginx$fastcgi_script_name;
include fastcgi_params;
}
}
}
Детальний опис налаштувань конфігураційного файлу можна знайти на http://nginx.org/ru/, тому докладно зупинятися не будемо.
Далі можна відредагувати конфігураційний файл php-fpm. За замовченням він знаходиться тут '/usr/local/etc/php-fpm.conf', але для прикладу його початковий вид цілком підійде.
Запускаємо php і nginx:
# /usr/local/etc/rc.d/php-fpm start
# /usr/local/etc/rc.d/nginx start
Для перевірки роботи php створюємо файл '/usr/local/www/nginx/info.php' з вмістом "<?php phpinfo(); ?> . І дивимося результат в браузері: httр://ваш-домен/info.рhр – в результаті на екрані повинно відобразитись інформація PHP.