Você acredita que já se passou mais de uma década desde o lançamento do Apache 2.4?! Se você não substituiu o Apache pelo Nginx, aqui está um guia rápido para aumentar o desempenho do Apache usando um método que muitas vezes é esquecido.
Agora, antes de entrarmos nisso, observe que não estou afirmando que o Apache é mais rápido que o Nginx. No entanto, também não estou afirmando que é mais lento. Na maioria das vezes, o Apache pronto para uso será mais lento que o Nginx. No entanto, quando configurado corretamente , o Apache pode ser tão rápido quanto o Nginx!
Existem toneladas de artigos na web sobre o desempenho do Apache, principalmente com comparações injustas, divulgando como o Nginx é muito mais rápido que o Apache. No entanto, o fato é que o Apache é um servidor web testado e comprovado que desempenhou e ainda desempenha um grande papel no que se tornou a internet dos servidores web. Com cerca de 30% de todos os servidores web ainda rodando Apache
.
Nginx é mais um servidor HTTP estático leve. O Apache vem com toneladas de recursos e módulos. Na maioria das vezes você só precisa de alguns deles. Enquanto o Nginx oferece uma abordagem mais básica. Assim, se você considerar o quão pesado é o padrão do Apache, ele realmente funciona muito melhor do que o crédito dado.
Removendo o Apache 2.4 (httpd) de módulos não utilizados
É aí que você deve se perguntar, quantos módulos do Apache estão realmente usando? 50%, 60% talvez 70%? Sim, uma abordagem importante para melhorar o desempenho do Apache – muitas vezes negligenciada – é reduzi-lo apenas aos módulos/recursos que você precisa. Isso aumenta a taxa de transferência enquanto reduz o consumo de memória e CPU.
Ok, então vamos dar uma olhada em quais módulos seu Apache instala por padrão na maioria dos sistemas. Você pode visualizar uma lista de módulos habilitados digitando o seguinte no shell:
Para CentOS/Fedora/RHEL (httpd):
httpd -M
Para Ubuntu/Debian (apache2):
apache2 -M
Lista de módulos Apache carregados por padrão no CentOS
Em vermelho estão os módulos que podem ser removidos com segurança na maioria dos ambientes:
core_module (estático)
mpm_prefork_module (estático)
http_module (estático)
so_module (estático)
auth_basic_module (compartilhado)
auth_digest_module (compartilhado)
authn_file_module (compartilhado)
authn_alias_module (compartilhado)
authn_anon_module (compartilhado)
authn_dbm_module (compartilhado)
authn_default_module (compartilhado)
authz_host_module (compartilhado)
authz_user_module ( compartilhado)
authz_owner_module (compartilhado)
authz_groupfile_module (compartilhado)
authz_dbm_module (compartilhado)
authz_default_module (compartilhado)
ldap_module (compartilhado)
authnz_ldap_module (compartilhado)
include_module (compartilhado)
log_config_module (compartilhado)
logio_module (compartilhado)
env_module (compartilhado)
ext_filter_module (compartilhado)
mime_magic_module (compartilhado)
expires_module (compartilhado)
deflate_module (compartilhado)
headers_module (compartilhado)
usertrack_module (compartilhado
) setenvif_module (compartilhado ) mime_module
(compartilhado)
dav_module (compartilhado) status_module (compartilhado)
autoindex_module (
compartilhado)
info_module ( compartilhado)
dav_fs_module (compartilhado)
vhost_alias_module (compartilhado)
negociação_module (compartilhado)
dir_module (compartilhado)
actions_module (compartilhado)
speling_module (compartilhado)
userdir_module (compartilhado)
alias_module (compartilhado)
substituto_module (compartilhado)
rewrite_module (compartilhado)
proxy_module (compartilhado) proxy_balancer_module
(compartilhado)
proxy_ftp_module (compartilhado) proxy_http_module (compartilhado) proxy_ajp_module
(compartilhado)
proxy_connect_module (compartilhado)
cache_module (compartilhado)
suexec_module (compartilhado)
disk_cache_module (compartilhado)
cgi_module (compartilhado)
version_module (compartilhado)
O motivo da remoção é que o Apache carregará tudo isso na memória do servidor. Como resultado, tornando o Apache mais pesado e mais lento para cada solicitação, especialmente à medida que a taxa de transferência do servidor web aumenta!
Aqui está minha lista final de módulos
core_module (estático)
mpm_event_module (estático)
http_module (estático)
so_module (estático)
authz_host_module (compartilhado)
authz_user_module (compartilhado)
authn_file_module (compartilhado)
auth_basic_module (compartilhado)
log_config_module (compartilhado)
logio_module (estático)
expires_module (compartilhado)
deflate_module (compartilhado)
headers_module ( compartilhado) compartilhado
)
setenvif_module (compartilhado)
mime_module (compartilhado) dir_module (compartilhado)
alias_module (compartilhado) rewrite_module (compartilhado)
proxy_module (
compartilhado)
proxy_fcgi_module (compartilhado)
Observe que mais da metade dos módulos pré-carregados foram removidos. Também substituí o MPM prefork pelo evento MPM e adicionei proxy_module e proxy_fcgi_module para PHP-FPM (veja as notas no final do artigo). Ao longo dos anos desde que este artigo foi publicado originalmente, o padrão antes vs depois melhorou significativamente.
Módulos Apache carregados por padrão no Ubuntu
core_module (estático)
log_config_module (estático)
logio_module (estático)
version_module (estático)
mpm_prefork_module (estático)
http_module (estático)
so_module (estático)
alias_module (compartilhado)
auth_basic_module (compartilhado)
authn_file_module (compartilhado)
authz_default_module (compartilhado) authz_groupfile_module (compartilhado)
authz_host_module (groupfile_module (compartilhado)
authz_host_module (groupfile_module ) compartilhado)
authz_user_module (compartilhado
)
autoindex_module (compartilhado)
cgi_module (compartilhado) deflate_module (compartilhado)
dir_module (compartilhado)
env_module (compartilhado)
mime_module (compartilhado)
negociação_module (compartilhado)
reqtimeout_module (compartilhado
) setenvif_module (compartilhado)
status_module (compartilhado)
Observe que menos módulos são habilitados por padrão do que com o CentOS.
Aqui está minha lista final de módulos no Ubuntu
core_module (estático)
log_config_module (estático)
logio_module (estático)
version_module (estático)
mpm_event_module (estático)
http_module (estático)
so_module (estático)
auth_basic_module (compartilhado)
authn_file_module (compartilhado)
authz_host_module (compartilhado)
authz_user_module (compartilhado)
expires_module (compartilhado)
deflate_module ( compartilhado)
headers_module (compartilhado)
dir_module (compartilhado)
mime_module ( compartilhado) setenvif_module (compartilhado) rewrite_module (
compartilhado)
proxy_module (
compartilhado)
proxy_fcgi_module (compartilhado)
Em verde estão os módulos que adicionei que também melhorarão o desempenho quando configurados corretamente. Enquanto o rewrite_module é simplesmente exigido por aplicativos da web como o WordPress para reescritas de URL amigáveis (links permanentes do WordPress). Novamente os módulos proxy para PHP-FPM.
Notas do módulo específico do Apache (httpd)
mpm_prefork_module – Com o Apache 2.4, substitua isso por mpm_event_module . É mais rápido e usa menos memória. Você pode usar o evento MPM com PHP FastCGI/PHP-FPM. O Event MPM é totalmente suportado a partir do Apache 2.4+.
log_config_module – Quando seu aplicativo da web estiver estável, decida se deseja desativar o log de acesso via configuração do Apache. Os logs de acesso adicionam sobrecarga extra a cada solicitação. Isso é negligente, mas em servidores Web de alto rendimento, o log de acesso pode causar um impacto de desempenho mais perceptível com gigabytes de logs sendo gravados diariamente. Este módulo também é responsável por logs de erros extremamente importantes.
status_module – O módulo Status permite que os administradores do servidor descubram o desempenho do Apache. Seguro para desabilitar. Rastreia TODAS as solicitações.
Como desabilitar os módulos do Apache – Ubuntu/Debian
Se você estiver no Ubuntu, poderá desabilitar os módulos do Apache usando comandos do shell. Basta digitar o seguinte a2dismod nameofmodule
para cada módulo:
a2dismod authz_groupfile
Repita para cada módulo que você precisa desabilitar.
Como desabilitar os módulos do Apache – CentOS/Fedora
Se você estiver executando um servidor CentOS, simplesmente comente as linhas para cada módulo listado em /etc/httpd/conf/httpd.conf .
Atualização em 2 de março de 2020: no CentOS, comente as linhas em /etc/httpd/conf.modules.d/00-base.conf
Por exemplo, altere:
LoadModule auth_digest_module modules/mod_auth_digest.so
para
#LoadModule auth_digest_module modules/mod_auth_digest.so
Repita para cada módulo. Quando não tiver certeza, desative e teste a configuração, desative, teste a configuração e assim por diante.
Anotações importantes
— Certifique-se de ter uma lista dos módulos usados com o Ubuntu antes de começar a desabilitar. No CentOS, copie (cp) httpd.conf para algo como httpd.conf_bak. Desta forma, você pode facilmente reverter as alterações.
— Com alguns dos módulos, quando desabilitados, você também terá que comentar (remover) as linhas de configuração correspondentes do httpd.conf (CentOS) ou apache2.conf (Ubuntu). Se você não estiver muito familiarizado com o Apache, desative os módulos um por um. Depois de desabilitar cada módulo, reinicie o Apache para testar. Isso é útil porque quando você desabilita alguns módulos como dav_module, autoindex_module, etc, algumas das linhas de configuração relacionadas em httpd.conf ou apache2.conf serão deixadas ociosas. Assim, quando você reiniciar o Apache, ele mostrará erros. Por exemplo:
“Iniciando httpd: Erro de sintaxe na linha 565 de /etc/httpd/conf/httpd.conf: Comando inválido 'IndexOptions', talvez digitado incorretamente ou definido por um módulo não incluído na configuração do servidor”
Esses erros são tão autoexplicativos que não são engraçados. Quando você vê um erro após a reinicialização do Apache, você tem duas opções 1) reativar o módulo 2) ir para a linha que relata o erro do Apache – no caso acima, linha 565 de /etc/httpd/conf/httpd.conf – e comente a linha. Repita até que o Apache inicie sem erros e, em seguida, continue desabilitando o próximo módulo e assim por diante.
— Para PHP-FPM com Apache 2.4, consulte: http://wiki.apache.org/httpd/PHP-FPM
— O desempenho do Apache (semelhante ao Nginx) não é alcançado por uma ou duas alterações. É composto e, embora existam muitas áreas que podem ser expandidas acima, para manter as coisas simples, mantive este artigo limitado a remover os módulos do Apache. No futuro, posso postar mais dicas de desempenho do Apache. Deixe-me saber abaixo se isso é algo que você estaria interessado em que eu escrevesse.
— Depois de executar as várias áreas de ajuste do Apache, se você ainda precisar de um aumento de desempenho ou redução de carga e não quiser se livrar do Apache, considere instalar o Nginx apenas para arquivos estáticos (CSS, js, imagens etc.) . No entanto, o evento MPM do Apache 2.4 é muito mais rápido e eficiente em servir arquivos estáticos do que o MPM prefork ou MPM worker já foi!
Gostou da Matéria? Espero ter Ajudado!
Melhores distribuições leves do Linux para computadores mais antigos Confira!
Blog do Marco.
0 Comentários