HTTP-сервер Apache - это довольно большой проект, намного больше, чем, скажем, lighthttp
или, nginx
конечно, «простые HTTP-серверы», которые вы видите в учебниках по C / C ++.
Для чего нужен дополнительный код? Добавляет ли это безопасность / стабильность (и если да, то как?) Или это просто для таких вещей, как разбор conf
файлов Apache / .htaccess
типа (и, я думаю, и VirtualHosts
т. Д.).
Я прошу не критиковать Apache, а потому, что я заинтересован в написании своего рода веб-сервера и хотел бы знать вещи, которые, возможно, неочевидны, которые важно помнить для безопасного, стабильного и быстрого веб-сервера.
Ответы:
Это намного сложнее, потому что:
Но и:
При этом ответ Р. содержит достоверные замечания о его архитектуре и о том, почему некоторые другие веб-серверы также пользуются относительной известностью. Это зависит от того, что вы хотите.
Вы также можете посмотреть на /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer еще несколько материалов. Хотя и не отвечая непосредственно на ваш вопрос, весь поток указывает на множество различий.
Если я заинтересован в написании веб-сервера с нуля, я бы сказал, что изучение Apache httpd - это хорошая вещь, особенно если вы можете вспомнить, как он развивался с течением времени. Он также показывает вам, чего вам следует избегать (как по точкам, к которым он адресован, так и по местам, в которых он превосходит другие). Тем не менее, код может быть немного сложным для начала, и вы могли бы предпочесть взглянуть на меньшие, более легкие серверы для этого. Но изучите его общую архитектуру и сравните с другими.
источник
По моему личному мнению, это все из-за всех особенностей, которые это имеет. Вы можете делать вещи с Apache, которые вы не могли бы сделать сейчас ни с nginx, ни с lighthttpd. Apache - фактически платформа, которая поставляется с поддержкой HTTP. Вы можете использовать практически любой протокол, например, FTP или SMTP (см., Например, mod_echo). Он поддерживает фильтры, которые позволяют вам, например: обслуживать PHP-код вне базы данных вместо файлов (поскольку mod_php является модулем фильтра, а не производителем контента). Это может показаться не очень полезной идеей, но в целом вы можете использовать фильтры для изменения любого контента, входящего или выходящего без необходимости настраивать оригинального производителя контента. У него есть настройки для HTTP-клиентов, которых больше нет, но в то время Apache был единственным способом обслуживать их согласованно и без ошибок. Многое из этого не используется в наши дни.
Дополнительный код также используется для безопасности, потому что mod_log_forensics вместе с CoreDumpDirectory предоставляют реальный инструмент, когда вы чувствуете, что кто-то использует уязвимость безопасности. Не слышал ничего подобного в случае других веб-серверов. Что касается стабильности, то она исходит из хорошо сконструированного ядра, а не из какого-то дополнительного кода. В списке рассылки Apache dev есть ребята, которых называют «стабилизаторами ядра». Они очень разборчивы в отношении любых изменений в ядре и склонны выдвигать их в модули, что на самом деле делает Apache достаточно стабильным. Если это не удается, в большинстве случаев это сбой модуля, а не ошибка в ядре сервера.
источник
Я использую Apache более двенадцати лет в качестве администратора и разработчика для больших веб-приложений на Perl, Python и Ruby. Apache - это надежный веб-сервер с чистым / модульным дизайном и сильным изгибом UNIX. Одна из его самых мощных функций - это модульность и хорошая документация. Это очень управляемый веб-сервер. Он зрелый и проверенный, что хорошо видно по 15-летней доминирующей доле рынка .
Несмотря на то, что пользовательская документация очень хорошая, для разработчиков / разработчиков модулей, к сожалению, очень мало документации, и я думаю, что это немного ранит ее, поскольку не привлекает столько разработчиков, сколько могло бы. Но это никоим образом не означает, что он плохо спроектирован - просто плохо документирован в этом отношении. Есть книга Ника Кью, которая, кажется, является основным источником информации для авторов модулей. Но было бы неплохо, если бы у самого проекта была лучшая документация по всем аспектам написания модулей.
Что касается того, чтобы быть чрезмерно спроектированным - фигня. У него отличный дизайн. Да, здесь и там есть некоторые бородавки, но это верно для всего программного обеспечения. Его использование пулов памяти просто фантастично, его способность подключать различные бэк-энды говорит о том, насколько он чист и модульный, у него отличный C-API, и APR значительно облегчает многие вещи не только для проекта Apache для разработчики в других проектах. Если вам все равно что-то о переносимости, вы по достоинству оцените APR. Возможно, он не идеален, но все же он прочный, хорошо продуманный и очень удобный.
С точки зрения простых функций, гибкости, администрирования, поддержки платформы, масштабируемости, документирования и зрелости, Apache является фантастическим веб-сервером.
источник
Это чрезмерно разработано / чрезмерно спроектировано. Хуже всего то, что он использует APR (Apache Portable Runtime), слой раздувания, который в конечном итоге тратит много уровней вызовов функций и динамического выделения памяти и освобождения для выполнения эквивалента одного
printf
вызова. Это все приводит к тому, что это:источник
mod_perl
чем thttpd, просто запускающий новый экземпляр perl для каждого клиента. Это было давно, и я никогда не проводил строгих тестов, чтобы выследить все причины; Департамент только что купил новый сервер ...