Perché il server HTTP Apache è così complesso?


14

Il server HTTP Apache è un progetto abbastanza grande, molto più grande, per esempio, lighthttpo nginxo sicuramente dei "semplici server HTTP" che vedi fluttuare nei tutorial C / C ++.

A cosa serve il codice extra? Aggiunge sicurezza / stabilità (e se sì, come?) O è solo per fare cose come analizzare i conffile Apache / .htaccessdigitare cose (e, immagino, VirtualHostsecc.).

Chiedo di non criticare Apache, ma perché sono interessato a scrivere un tipo di server Web e mi piacerebbe sapere cose che, sebbene forse non ovvie, sono importanti da ricordare per un server Web sicuro, stabile e veloce.


Aiuta a eliminare tutti coloro che non imballano l'attrezzatura per gestirla.
Joel Etherton,

6
Non è una vera risposta, ma ho sentito che il nome deriva dal fatto che ha avuto molti contributi anche nelle prime fasi di sviluppo. Sono state apportate molte patch, rendendolo un server Patchy. Storia vera.
Jeremy,

+1 @Joel Etherton: bella storia, soprattutto che è vera. Ma non lasciare mai che la verità si
frapponga a

+1 @aharon per un esempio di mettere in discussione lo status quo. Ma "scrivere un server web"? Non stiamo reinventando la ruota qui quando ci sono molte offerte oltre ad Apache?
therobyouknow

Risposte:


20

È molto più complesso perché:

Ma anche:

  • È più attivamente sviluppato ( Confronto dello stato . Ad oggi 2011-05-28, Apache httpd ha l'aggiornamento più recente, sebbene il suo processo di rilascio intrinseco dovrebbe essere ostacolato dalla sua estesa complessità rispetto ai suoi concorrenti.)

Detto questo, la risposta di R. contiene punti validi sulla sua architettura e sul perché alcuni altri server web beneficiano anche della relativa fama. Dipende da cosa vuoi.

Puoi anche consultare /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer per altro materiale. Sebbene non risponda direttamente alla tua domanda, l'intero thread evidenzia molte differenze.


Se sei interessato a scrivere un server web da zero, direi che studiare Apache httpd è una buona cosa, specialmente se puoi guardare indietro a come si è evoluto nel tempo. Ti mostra anche cosa devi evitare (sia sui punti che ha affrontato bene, sia sui luoghi in cui è sovraperformato da altri). Tuttavia, il codice potrebbe essere un po 'complesso all'inizio e potresti preferire cercare server più piccoli e più leggeri per questo. Ma studia la sua architettura complessiva e confrontala con gli altri.


1
+1: La sola lettura della cronologia dei log delle modifiche può essere incredibilmente istruttiva per sapere come si è evoluto il web server stesso e quali sfide ha affrontato il team nel corso degli anni.
Joel Etherton,

1
+1 @haylem "alcuni altri server web traggono vantaggio dalla relativa fama" - è rassicurante leggere delle alternative ad Apache che si dice siano compatibili con Apache, cioè faranno quasi lo stesso lavoro.
therobyouknow,

3

Secondo me è tutto a causa di tutte le funzionalità che ha. Puoi fare cose con Apache che non puoi fare in questo momento con nginx o lighthttpd. Apache è in realtà una piattaforma che viene fornita con il supporto HTTP. Puoi avere praticamente qualsiasi protocollo implementato come FTP o SMTP (vedi mod_echo per esempio). Ha il supporto per i filtri che ti permettono ad esempio: servire il codice PHP dal database anziché dai file (poiché mod_php è un modulo filtro e non produttore di contenuti). Questa potrebbe sembrare un'idea non molto utile, ma in generale è possibile utilizzare i filtri per modificare qualsiasi contenuto in entrata o in uscita senza la necessità di modificare il produttore di contenuti originali. Ha modifiche per i client HTTP che non esistono più, ma allora Apache era l'unico modo per servirli in modo coerente e privo di bug. Gran parte di esso non viene utilizzato al giorno d'oggi.

Il codice aggiuntivo viene utilizzato anche per la sicurezza, poiché mod_log_forensics insieme a CoreDumpDirectory fornisce uno strumento reale quando ritieni che qualcuno stia sfruttando una vunerabilità della sicurezza. Non ho sentito nulla di simile in caso di altri server web. Per quanto riguarda la stabilità, proviene da un nucleo ben progettato, non da un codice aggiuntivo. Ci sono ragazzi nella mailing list degli sviluppatori Apache, chiamati "stabilizzatori di base". Sono molto esigenti su qualsiasi cambiamento nel core e tendono a spingerli verso i moduli, il che rende Apache abbastanza stabile. Se fallisce, il più delle volte si tratta di un errore del modulo e non del bug nel core del server.


3

Ho usato Apache per oltre dodici anni come amministratore e sviluppatore per grandi applicazioni Web Perl, Python e Ruby. Apache è un server Web solido e solido con un design pulito / modulare e una forte inclinazione UNIX. Una delle sue funzionalità più potenti è la sua semplice modularità e buona documentazione. È un web server molto gestibile. È maturo e provato come si può vedere chiaramente da 15 anni di quota di mercato dominante .

Sebbene la documentazione per l'utente sia molto buona, purtroppo c'è poca documentazione preziosa per gli sviluppatori / scrittori di moduli, e penso che questo tende a danneggiarlo un po 'in quanto non attira il maggior numero possibile di sviluppatori. Ma ciò non significa in alcun modo che sia mal progettato - solo mal documentato in questo senso. C'è un libro di Nick Kew che sembra essere la risorsa definitiva per gli scrittori di moduli. Ma sarebbe bello se il progetto stesso avesse una documentazione migliore su tutti gli aspetti della scrittura dei moduli.

Per quanto riguarda l'eccessiva ingegnerizzazione - hogwash. Ha un design eccellente. Sì, ci sono alcune verruche qua e là, ma questo è vero per tutto il software. L'uso dei pool di memoria è fantastico, la sua capacità di collegare diversi back-end parla di quanto sia pulito e modulare, ha una C-API eccezionale e l'APR rende molte cose molto più facili non solo per il progetto Apache per sviluppatori in altri progetti. Se ti interessa qualcosa della portabilità, apprezzerai l'APR. Potrebbe non essere perfetto, ma è comunque solido, ben progettato e molto conveniente.

Dal punto di vista delle funzionalità complete, flessibilità, amministrazione, supporto della piattaforma, scalabilità, documentazione e maturità, Apache è un fantastico server web.


-2

È troppo progettato / troppo ingegnerizzato. Peggio ancora, utilizza APR (Apache Portable Runtime), un livello gonfio che finisce per passare molti livelli di chiamate di funzione e allocazione dinamica di memoria e liberazione per realizzare l'equivalente di una singola printfchiamata. Tutto ciò porta ad essere:

  • molto lento
  • molto affamato di risorse
  • impossibile controllare per sicurezza
  • difficile da capire e modificare

5
Per lo più sottolinea le insidie ​​della sua complessità e (discutibile, dipende da quali parti) cattiva progettazione; Per quanto valide possano essere queste affermazioni, non sono cause della sua complessità.
haylem,

1
-1 per il gonfiore APR. Stavo lavorando con APR nell'era precedente alla 1.0 e in quel momento non stava introducendo altro gonfio di quanto non fosse già nella base di codice 1.3. Anche l'allocazione dinamica della memoria in APR è più o meno una copia esatta del codice di memoria 1.3. E anche se hai ragione ... come fa un gonfio di qualsiasi tipo a rendere impossibile controllare qualcosa?
Jacek Prucia,

sono d'accordo con @haylem (+1) e anche: quei quattro punti nella risposta di @R ..: come fai a saperlo? Con cosa stai confrontando. Potresti avere ragione, ma i tuoi punti saranno relativi, cioè "molto lenti" - ma rispetto a cosa? Un altro server come quelli menzionati qui? In tal caso, per favore, citali.
therobyouknow,

Credo che il sito web di httpd abbia delle buone cifre per i contenuti statici. La cosa più sorprendente è che, per esperienza personale nella gestione di un sistema di compiti a casa per studenti basato sul web, Apache è stato anche molto più lento mod_perlrispetto a quando httpd stava eseguendo una nuova istanza perl per ogni client. Questo è stato tanto tempo fa e non ho mai fatto test rigorosi per rintracciare tutte le cause; il dipartimento ha appena acquistato un nuovo server ...
R .. GitHub FERMA AIUTANDO ICE il

@R .: ancora una volta, perché dovresti eseguirlo con mod_perl :)
haylem,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.