Perché il server HTTP Apache è così complesso?

14

Il server Apache HTTP è un progetto abbastanza grande, molto più grande di, per esempio, lighthttp o nginx o certamente i "semplici server HTTP" che si vedono fluttuare nelle esercitazioni C / C ++.

A cosa serve il codice extra? Aggiunge sicurezza / stabilità (e se sì, come?) O è solo per fare cose come l'analisi di Apache conf files / .htaccess tipo di cose (e, suppongo, VirtualHosts etc).

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

    
posta Aaron Yodaiken 28.05.2011 - 04:05
fonte

4 risposte

20

È molto più complesso perché:

Ma anche:

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

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

Potresti anche voler dare un'occhiata a link per un 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 ciò che 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 per iniziare e si potrebbe preferire guardare server più piccoli, più leggeri per questo. Ma studia la sua architettura generale e confrontala con altri.

    
risposta data 28.05.2011 - 04:09
fonte
3

Secondo la mia opinione personale è tutto a causa di tutte le funzionalità che ha. Puoi fare cose con Apache che non potresti fare ora con nginx o lighthttpd. Apache è in realtà una piattaforma che viene fornita con 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 permette di es .: servire codice PHP fuori dal database invece che dai file (dato che mod_php è un modulo filtro e non un produttore di contenuti). Potrebbe sembrare un'idea poco utile, ma in generale è possibile utilizzare i filtri per alterare qualsiasi contenuto che entri o esca senza la necessità di modificare il produttore di contenuti originale. Ha modifiche per i client HTTP che non sono più in giro, ma allora, Apache era l'unico modo per servirli in modo coerente e privo di bug. Gran parte di questo non è usato oggigiorno. Alcune delle mie istanze di Apache funzionano solo con 3-5 dei moduli standard.

Il codice aggiuntivo viene anche usato per la sicurezza, perché mod_log_forensics insieme a CoreDumpDirectory fornisce uno strumento reale quando si ritiene che qualcuno stia sfruttando una vulnerabilità della sicurezza. Non ho sentito nulla di simile in caso di altri server web. Per quanto riguarda la stabilità, proviene da un core ben architettato, non da un codice extra. Ci sono ragazzi sulla mailing list di Apache Dev, che sono chiamati "core stabilizer". Sono molto schizzinosi riguardo a qualsiasi cambiamento nel core e tendono a spingerli ai moduli, il che rende Apache piuttosto stabile. Se fallisce, la maggior parte delle volte si tratta di un errore del modulo e non del bug nel core del server.

    
risposta data 03.06.2011 - 09:24
fonte
3

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

Sebbene la documentazione degli utenti sia molto buona, sfortunatamente c'è una piccola documentazione preziosa per gli sviluppatori / scrittori di moduli, e penso che questo tenda a ferire un po 'il fatto che non attrae il maggior numero possibile di sviluppatori. Ma questo non significa in alcun modo che sia mal progettato - solo scarsamente 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 dei moduli di scrittura.

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

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

    
risposta data 03.08.2011 - 00:19
fonte
-2

È sovradimensionato / eccessivamente ingegnerizzato. Peggio di tutto, utilizza APR (Apache Portable Runtime), un layer gonfiato che finisce per passare molti livelli di chiamate di funzione e allocazione dinamica della memoria e liberando per realizzare l'equivalente di una singola chiamata printf . Tutto ciò porta ad essere:

  • molto lento
  • molto avido di risorse
  • impossibile controllare per sicurezza
  • difficile da comprendere e modificare
risposta data 28.05.2011 - 04:33
fonte

Leggi altre domande sui tag