Чому сервер Apache HTTP настільки складний?


14

Сервер Apache HTTP - це досить великий проект - набагато більший, ніж, скажімо, lighthttpабо, nginxзвичайно, "прості сервери HTTP", які ви бачите, що плавають у навчальних програмах C / C ++.

Для чого потрібний додатковий код? Чи додає це безпека / стабільність (і якщо так, то як?) Чи це просто для таких дій, як аналіз confфайлів Apache / .htaccessтип речей (і, я думаю, VirtualHostsтощо).

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


Це допомагає вилучити всіх тих, хто не пакує спорядження, щоб впоратися з цим.
Джоель Етертон

6
Це не справжня відповідь, - але я чув, що назва походить від того, що вона мала багато учасників ще на початку розвитку. Багато патчів було внесено, що зробило його Patchy сервером. Правдива історія.
Джеремі

+1 @Joel Etherton: Гарна історія, особливо, що це правда. Але ніколи не дозволяйте істині перешкодити гарній історії :)
therobyouknow

+1 @aharon для прикладу сумніву в статусі. Але "писати веб-сервер"? Хіба ми не винаходили колесо тут, коли є багато пропозицій, а також Apache?
therobyouknow

Відповіді:


20

Це набагато складніше, тому що:

  • вона старша ,
  • у нього є більший набір функцій ( Порівняння набору функцій ),
  • це модульно ,
  • у нього ширша підтримка платформи ( Порівняння підтримки ОС ),
  • у нього є кілька режимів роботи (багатопроцесовий, багатопотоковий тощо).

Але також:

  • Це більш активно розвивається ( Порівняння статусу . Станом на 2011-05-28, Apache httpd має останнє оновлення, хоча його притаманний процес випуску повинен бути утруднений його значною складністю на відміну від конкурентів.)

Це , так би мовити, R. в відповідь містить дійсні пункти про його архітектурі і чому деякі інші веб-сервери користь відносної популярності , як добре. Це залежить від того, що ви хочете.

Ви також можете подивитися на /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer для ще кількох матеріалів. Хоча не відповідає прямо на ваше запитання, ціла нитка вказує на багато відмінностей.


Якщо вам цікаво писати веб-сервер з нуля, я б сказав, що вивчення Apache httpd - це гарна річ, особливо якщо ви можете озирнутися на те, як воно розвивалося з часом. Він також показує, що вам потрібно уникати (і в питаннях, на які він добре розглядався, і в місцях, де це перевершує інші). Однак код може бути трохи складним для початку, і ви можете віддати перевагу більш дрібним, легким серверам для цього. Але вивчіть його загальну архітектуру та порівняйте її з іншими.


1
+1: Просто читання історії змін може бути неймовірно повчальним у вивченні того, як розвивався сам веб-сервер та які проблеми переживала команда за ці роки.
Джоел Етертон

1
+1 @haylem "деякі інші веб-сервери виграють відносною славою" - це заспокоєння читати про альтернативи Apache, які, як кажуть, сумісні з Apache, тобто виконають приблизно таку ж роботу.
therobyouknow

3

На мою особисту думку, це все через всі особливості, які він має. Ви можете робити речі з Apache, які ви не могли зробити зараз, ні nginx, ні lighthttpd. Apache - це платформа, яка постачається з підтримкою HTTP. Ви можете мати майже будь-який реалізований протокол, наприклад FTP або SMTP (див., Наприклад, mod_echo). Він має підтримку фільтрів, що дозволяє: наприклад: обслуговувати базу даних PHP-коду замість файлів (оскільки mod_php - це модуль фільтра, а не виробник вмісту). Це може здатися не дуже корисною ідеєю, але загалом ви можете використовувати фільтри для зміни будь-якого вмісту, що надходить або виходить, не потребуючи налаштування оригінального виробника вмісту. У ньому є налаштування для HTTP-клієнтів, яких вже немає, але тоді Apache був єдиним способом послідовно обслуговувати їх. Значна частина цього дня не використовується.

Додатковий код також використовується для безпеки, оскільки mod_log_forensics разом з CoreDumpDirectory надають справжній інструмент, коли ви відчуваєте, що хтось використовує вразливість безпеки. Я не чув про щось подібне для інших веб-серверів. Що стосується стабільності, то вона походить від добре архітектурного ядра, а не якогось додаткового коду. У списку розсилки Apache Dev є хлопці, яких називають "основними стабілізаторами". Вони дуже прискіпливі до будь-яких змін в ядрі і прагнуть підштовхувати їх до модулів, що насправді робить Apache досить стабільним. Якщо вона виходить з ладу, то в більшості випадків це збій модуля, а не помилка в ядрі сервера.


3

Я використовую Apache більше дванадцяти років як адміністратор і розробник для великих веб-додатків Perl, Python та Ruby. Apache - це надійний веб-сервер, який має чіткий / модульний дизайн і сильний UNIX зігнутий. Однією з найпотужніших його можливостей є суцільна модульність та хороша документація. Це дуже керований веб-сервер. Він зрілий і доведений, як добре видно за 15 років домінуючої частки ринку .

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

Щодо того, що це занадто інженерно - багряно. Він має відмінний дизайн. Так, десь там є бородавки, але це справедливо для всього програмного забезпечення. Використання пулів пам’яті є фантастичним, його можливість підключати різні зворотні сторони говорить про те, наскільки він чистий і модульний, він має чудовий C-API, і APR робить багато речей набагато простішими не тільки для проекту Apache для розробники в інших проектах. Якщо вас взагалі щось не хвилює портативність, ви оціните КВІТ. Це може бути не ідеально, але все-таки солідне, добре продумане та дуже зручне.

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


-2

Це надмірно розроблений / перероблений. Найгірше те, що він використовує APR (Apache Portable Runtime), шар шару, який закінчує витрачати багато рівнів функціональних викликів та динамічного розподілу пам'яті та звільнення для здійснення еквіваленту одного printfвиклику. Це все призводить до того, що це:

  • дуже повільно
  • дуже голодний на ресурси
  • неможливо перевірити на предмет безпеки
  • важко зрозуміти і модифікувати

5
Ви в основному вказуєте на підводні камені його складності і (сперечається, залежить від того, які частини) поганий дизайн; Хоча ці твердження можуть бути дійсними, вони не є причиною його складності.
хайлем

1
-1 за квітень квітня. Я працював з APR в епоху до попереднього періоду і назад, тоді він не вводив більше, ніж це було в кодовій базі 1.3. Також динамічний розподіл пам'яті в APR - це більш-менш точна копія коду пам'яті 1,3. І навіть якщо ви маєте рацію ... як будь-який потік унеможливлює аудит?
Яцек Прусія

згоден з @haylem (+1), а також: ці чотири пункти у відповіді @R ..: як ти знаєш? З чим ви порівнюєте Ви можете мати рацію, але ваші бали будуть відносними, тобто "дуже повільними" - але порівняно з чим? Ще один сервер на зразок згаданих тут? Якщо так, будь ласка, цитуйте їх.
therobyouknow

Я вважаю, що на веб-сайті thttpd є хороші показники щодо статичного вмісту. Що ще дивніше - це те, що з особистого досвіду роботи веб-домашньої системи студентів Apache також був набагато повільніше, mod_perlніж thttpd просто запускав новий екземпляр perl для кожного клієнта. Це було давно, і я ніколи не робив суворих випробувань, щоб виявити всі причини; департамент щойно купив новий сервер ...
R .. GitHub ЗАСТОСУЄТЬСЯ ДОПОМОГАТИСЯ

@ R .: ще раз, чому б ти запустив це з mod_perl :)
haylem
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.