Можете ли вы определить, какие модули Apache были использованы и могут быть удалены?
У меня, как и у многих людей, есть относительно стандартная установка Apache с множеством строк "LoadModule" по умолчанию.
С самого начала я установил много программного обеспечения, и, честно говоря, я не знаю, какое программное обеспечение использует какие модули.
Я хотел бы уменьшить объем памяти моих экземпляров Apache, и для этого я хотел бы удалить модули из использования. Единственный известный мне способ определить, используется ли модуль, - это удалить его из конфигурации и посмотреть, не сломалось ли что-нибудь. Это плохо во многих отношениях, чем я успеваю описать.
Я хотел бы знать, знает ли кто-нибудь о том, как заставить Apache сообщать о том, какие модули были использованы, или есть другой способ программно определить, безопасно ли отключать модуль.
5 ответов
Я построил тестовый сервер, прочитал документацию и начал с пустой страницы.
Следующие модули являются обязательными:
- ядро
- mod_authz_host
- mod_auth_basic
- mod_authn_file
- mod_dir
- mod_log_config
- mod_mime
Затем я закомментировал все оставшиеся модули и перезапустил Apache. Он будет звучать, если что-то сломается, например:
Starting httpd: Syntax error on line 10 of /etc/httpd/conf.d/squid.conf:
Invalid command 'order', perhaps misspelled or defined by a module not included in the server configuration
Сделайте то же самое с другими модулями. Используя этот метод, вот некоторые модули, которые часто не нужны:
- mod_authn_alias
- mod_authn_anon
- mod_authn_dbm
- mod_authn_default
- mod_authz_user
- mod_authz_owner
- mod_authz_groupfile
- mod_authz_dbm
- mod_authz_default
- mod_include
- mod_logio
- mod_ext_filter
- mod_usertrack
- mod_dav
- mod_info
- mod_dav_fs
- mod_speling
- mod_suexec
- mod_cgi
Если вы не используете LDAP для аутентификации, это можно отключить:
- mod_ldap
- mod_authnz_ldap
При включении следует учитывать следующие модули:
- mod_proxy
- mod_proxy_balancer
- mod_proxy_ftp
- mod_proxy_http
- mod_proxy_connect
- mod_cache
- mod_disk_cache
- mod_file_cache
- mod_mem_cache
В предыдущем посте предлагалось отключить модули, пока что-то не сломалось. Хотя в производственной системе это определенно безрассудно, человек на правильном пути, так как вам все равно нужно будет проводить регрессионное тестирование.
Итак, в этом случае:
- Создайте тестовый сервер, идентичный тому, который у вас работает, вплоть до конфигурации сайтов
- Отключить модуль.
- Провести регрессионное тестирование на сайтах.
- Повторите шаги 2 и 3, пока что-то не сломается, или вы закончили со всеми модулями.
- Повторно включите модуль.
- Повторите шаги 2 и 3.
- В обновленном apache выполните мгновенную настройку конфигурации и перезапустите службу apache.
- Если это не помогло, верните ванну конфигурации, потяните журналы, проанализируйте и начните с шага 2 (или шага 1, если необходимо).
Это, наверное, самый простой способ упростить настройку Apache. В противном случае вам придется просмотреть каждый модуль, определить его функциональность и выполнить поиск по сайтам, чтобы увидеть, какой из них использует эти функции. Это займет гораздо больше времени.
Кроме того, это может дать вам хорошую возможность перейти на что-то более легкое:
Я знаю, что вы спрашиваете об Apache, но, учитывая ограничения памяти в вашей системе, вы могли бы гораздо лучше обменивать Apache на Nginx, Lighthttpd или другие веб-серверы с низким размером. Apache отлично подходит для поддержки модулей, но очень требователен к памяти по сравнению с более молодыми веб-серверами, такими как Nginx, Lighthttpd, Cherokee, G-WAN и т. Д.
У меня нет прямого ответа на ваш вопрос, но в Интернете есть много "крошечных" пакетов AMP, которые, насколько я знаю, не включают большинство предустановленных модулей. Итак, я бы начал с рассмотрения их в качестве примера.
Эти 2 ссылки могут помочь вам начать:
Тестирование на предмет поломки имеет свои особенности — часто некоторые директивы используются только в том случае, если модуль загружен (<IfModule>
), что означает, что деактивация модуля может не привести к поломке чего-либо напрямую, но приведет к тому, что все будет работать не так, как ожидалось.
Для некоторых модулей вы можете проверить, используются ли их директивы в конфигурации. Хотя это утомительно, но может быть немного более надежным, чем просто проверка того, что что-то сломалось. Кроме того, вы можете выполнить проверку перед внесением изменений.
Пример:
- mod_version предоставляет
<IfVersion>
директиву, найдите ее в каталогах конфигурации и файлах .htaccess (если они используются).
Пример сценария:
#!/bin/bash
for i in "<IfVersion>" SuexecUserGroup Substitute;do
echo "Check for $i"
# look in configuration directories (this depends on your distribution)
grep -r -E "$i" /etc/apache2/conf-enabled/ /etc/apache2/mods-enabled/ /etc/apache2/sites-available
# look for .htaccess in webroot, this path depends on your setup
# not necessary if you do not use .htaccess
find /var/www/html -name .htaccess -exec grep "$i" {} \;
done
Примечание: этот скрипт можно оптимизировать.