O servidor Apache HTTP é um bastante grande projeto de muito maior do que, digamos, lighthttp
ou nginx
ou certamente os "servidores HTTP simples" que você vê flutuando em C / C ++ tutoriais.
Para que serve o código extra? Isso adiciona segurança / estabilidade (e se sim, como?) Ou é apenas para fazer coisas como analisar conf
arquivos Apache / .htaccess
digitar coisas (e, eu acho, VirtualHosts
etc).
Peço para não criticar o Apache, mas porque estou interessado em escrever um servidor da Web e gostaria de saber coisas que, embora talvez não sejam óbvias, são importantes a serem lembradas para um servidor da Web seguro, estável e rápido.
Respostas:
É muito mais complexo porque:
Mas também:
Dito isto, a resposta de R. contém pontos válidos sobre sua arquitetura e por que outros servidores da Web também se beneficiam de fama relativa. Depende do que você quer.
Você também pode consultar /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer para obter mais material. Embora não responda diretamente à sua pergunta, todo o tópico aponta muitas diferenças.
Se estiver interessado em escrever um servidor Web do zero, eu diria que estudar o Apache httpd é uma coisa boa, especialmente se você puder olhar para trás como evoluiu com o tempo. Também mostra o que você precisa evitar (tanto nos pontos abordados corretamente quanto nos locais em que é superado por outras pessoas). No entanto, o código pode ser um pouco complexo para começar e você pode preferir procurar servidores menores e mais leves para isso. Mas estude sua arquitetura geral e compare-a com outras.
fonte
Na minha opinião pessoal, é tudo por causa de todos os recursos que possui. Você pode fazer coisas com o Apache que não poderia fazer agora com nginx ou lighthttpd. O Apache é na verdade uma plataforma que é fornecida com suporte a HTTP. Você pode ter praticamente qualquer protocolo implementado como FTP ou SMTP (consulte mod_echo por exemplo). Ele suporta filtros, o que permite, por exemplo: servir código PHP fora do banco de dados em vez de arquivos (já que mod_php é um módulo de filtro e não produtor de conteúdo). Pode parecer uma idéia não muito útil, mas em geral você pode usar filtros para alterar qualquer entrada ou saída de conteúdo sem a necessidade de ajustar o produtor de conteúdo original. Possui ajustes para clientes HTTP que não estão mais disponíveis, mas naquela época o Apache era a única maneira de atendê-los de maneira consistente e sem erros. Muito disso não é usado hoje em dia.
O código extra também é usado para segurança, porque o mod_log_forensics, juntamente com o CoreDumpDirectory, fornece uma ferramenta real quando você sente que alguém está explorando uma indenização por segurança. Não ouvi nada sobre isso no caso de outros servidores da web. Quanto à estabilidade, ele vem de um núcleo bem arquitetado, não de um código extra. Existem na lista de discussão dos desenvolvedores do Apache, chamados "estabilizadores principais". Eles são muito exigentes quanto a qualquer alteração no núcleo e tendem a enviá-los para os módulos, o que realmente torna o Apache bastante estável. Se falhar, na maioria das vezes é uma falha do módulo e não o bug no núcleo do servidor.
fonte
Eu uso o Apache há mais de doze anos como administrador e desenvolvedor de grandes aplicativos Web Perl, Python e Ruby. O Apache é um servidor Web sólido, com um design limpo / modular e uma forte inclinação do UNIX. Um de seus recursos mais poderosos é sua modularidade e boa documentação. É um servidor web muito gerenciável. Está maduro e comprovado, como pode ser visto claramente por 15 anos de participação de mercado dominante .
Embora a documentação do usuário seja muito boa, infelizmente há pouca documentação preciosa para desenvolvedores / gravadores de módulos, e acho que isso tende a prejudicá-lo um pouco, pois não atrai o maior número possível de desenvolvedores. Mas isso não significa que seja mal projetado - apenas mal documentado a esse respeito. Existe um livro de Nick Kew que parece ser o recurso definitivo para os criadores de módulos. Mas seria bom se o projeto em si tivesse uma documentação melhor sobre todos os aspectos dos módulos de escrita.
Quanto ao excesso de engenharia - besteira. Tem um excelente design. Sim, existem algumas verrugas aqui e ali, mas isso é verdade para todos os softwares. Seu uso de pools de memória é fantástico, sua capacidade de conectar diferentes back-ends fala sobre como é limpo e modular, possui uma ótima C-API e a APR facilita muito as coisas, não apenas no projeto Apache for for desenvolvedores em outros projetos. Se você se importa com a portabilidade, irá apreciar a TAEG. Pode não ser perfeito, mas ainda é sólido, bem projetado e muito conveniente.
Do ponto de vista de recursos, flexibilidade, administração, suporte de plataforma, escalabilidade, documentação e maturidade, o Apache é um servidor Web fantástico.
fonte
É superprojetado / superprojetado. O pior de tudo é que ele usa o APR (Apache Portable Runtime), uma camada inchada que acaba gastando muitos níveis de chamadas de função, alocação dinâmica de memória e liberação para realizar o equivalente a uma única
printf
chamada. Tudo isso leva a que seja:fonte
mod_perl
que o thttpd estava executando uma nova instância de perl para cada cliente. Isso foi há muito tempo e eu nunca fiz testes rigorosos para rastrear todas as causas; o departamento acabou de comprar um novo servidor ...