Запуск Lighttpd позади Apache для обслуживания статических файлов мне определенно кажется разумным. Apache все еще должен распаковать HTTP-пакеты и проанализировать запрос через его дерево синтаксического анализа, отправить запросы прокси-сервера, а затем Lighttpd должен повторно распаковать, запустить файловую систему и отправить файлы обратно через Apache. Я никогда не слышал о том, чтобы кто-нибудь использовал подобную установку в производстве.
Что вы увидите, это люди, которые используют легкий веб-сервер, такой как Nginx , в качестве внешнего сервера для предоставления статических файлов и прокси-динамических URL-адресов для Apache. Или вы можете запустить Varnish или Squid в качестве внешнего кэшируемого обратного прокси-сервера, чтобы все ваши статические файлы с высоким трафиком (например, изображения, CSS и т. Д. и ) любые динамические страницы, для которых вы готовы отправлять заголовки, удобные для кэширования), хранятся в памяти.
Apache также можно оптимизировать для обслуживания статических файлов - поэтому часто, когда я слышу, как люди жалуются на Apache, они действительно не знают, как его настроить. Они только когда-либо использовали prefork MPM (в отличие от многопоточных или рабочих) и имеют все виды включенных модулей (обычно они запускаются из пакета Apache для кухонной раковины Linux-дистрибутива, который собирает все как модули и по умолчанию включает 10-20). модули или более). Настройте Apache, отключив ненужные модули / тупые функции, такие как поддержка .htaccess (что заставляет Apache сканировать файловую систему при каждом запросе!). (Вы также можете запустить два экземпляра Apache с «легким» Apache в качестве внешнего интерфейса, который проксирует «тяжелый» Apache для динамических запросов ... возможно, ваш внешний интерфейс является многопоточным, но ваш внутренний интерфейс является prefork, потому что вы должны запускать поточно-небезопасный внешние модули, такие как mod_php.)
Re:
Так как у вас все еще есть процесс Apache
порождается для каждого запроса, который приходит
в, как это положительно влияет
Загрузка? Из того, что я вижу размер
процесса Apache прокси его
запрос через lighttpd так же велик
как было бы, если бы он служил
сам файл.
Если вы создаете процессы для каждого запроса, это означает, что вы используете prefork MPM. Имейте в виду, что когда ОС сообщает об использовании памяти для каждого из этих процессов, а не вся эта память является проводной, многие из этих процессов простаивают. А когда вы говорите о скорости, вы больше озабочены разбором запросов и внутренними ветвями кода для данного запроса (сколько обработки выполняет сервер?), Чем использованием памяти, сообщаемым ОС.
Например, если вы включите что-то вроде mod_php, то каждый из этих рабочих процессов мгновенно увеличится примерно на 20-40 МБ (в зависимости от того, что включено в вашем интерпретаторе PHP), но это не означает, что Apache использует эта память на статические запросы. Конечно, если вы оптимизируете свой сервер для максимального параллелизма для небольших статических файлов, то включение mod_php все равно будет очень плохим, вы не сможете разместить почти столько же процессов prefork в оперативной памяти.
Я, вероятно, мог бы придумать "кошмарную конфигурацию" для Apache, которая сделает более медленным обслуживанием статических файлов, чем передача этих запросов на сервер Lighttpd, но это потребовало бы включения дорогих функций, таких как .htaccess. в Apache, которые отключены в Lighttpd, так что это не совсем справедливо.