2012-11-14 8 views
17

I framework di applicazioni Web come sinatra (ruby), play (scala), lift (scala) producono un server Web che ascolta una porta specifica.Perché si dovrebbe utilizzare un server http di fronte a un server Web framework?

So che ci sono alcuni motivi come la sicurezza, il clustering e, in alcuni casi, le prestazioni, che potrebbero indurmi a utilizzare un server web Apache di fronte alla mia applicazione web.

Avete qualche ragione per questo dalla vostra esperienza?

+0

Che tipo di dettagli desideri? –

+0

Grazie @DaveNewton. Ho cambiato la domanda. Ho solo bisogno di ragioni da qualcuno che l'ha già fatto. – juanpavergara

+0

Vedere anche http://stackoverflow.com/q/2939393/152948 – hobbs

risposta

41
  • Parte di qualsiasi applicazione Web è completamente standardizzata e funzionalità commoditized. I server web maturi come nginx o apache possono fare le seguenti cose. Possono fare le seguenti cose in un modo che è molto probabilmente più corretto, più efficiente, più stabile, più sicuro, più familiare agli amministratori di sistema e più facile da configurare rispetto a qualsiasi altra cosa che potresti riscrivere nel tuo server delle applicazioni.
    • servire i file statici come HTML, immagini, CSS, JavaScript, font, ecc
    • Handle virtual hosting (domini multipli su un singolo indirizzo IP)
    • riscrittura degli URL
    • hostname riscrittura/reindirizzamento
    • TLS terminazione (grazie @ emt14)
    • compressione (grazie @JacobusR)
  • un web server separato fornisce la possibilità di s erve una pagina di "fuori servizio per manutenzione", mentre il riavvio del server di applicazioni o si blocca
  • proxy inverso può fornire bilanciamento del carico e la tolleranza di errore per voi application framework
  • server Web sono dotati di e meccanismi testati per il legame a porte privilegiate (di seguito 1024) come root e quindi eseguendo come utente non privilegiato. La maggior parte dei framework di applicazioni web non lo fa per impostazione predefinita.
  • I server Web maturi sono temprati e stabili. Per stalla, intendo che praticamente non si schiantano quasi mai. La tua applicazione web è quasi certamente molto meno stabile. Questo ti dà la possibilità di servire almeno una bella pagina di errore all'utente dicendo che la tua applicazione è inattiva invece del browser web che mostra semplicemente un errore generico "non può connettersi".

E solo nel caso in cui si desidera che la risposta semi-ufficiale del Isaac Schluetter al Airbnb tech talk on January 30, 2013 circa 40 minuti in lui affronta la questione se il nodo è stabile & abbastanza sicuro per servire le connessioni direttamente a Internet. La sua risposta è essenzialmente "sì", va bene. Quindi puoi farlo e probabilmente starai bene da un punto di vista della sicurezza e della stabilità (supponendo che tu stia utilizzando il cluster per gestire la chiusura imprevista di un processo del server delle app), ma come dettagliato sopra la realtà delle operazioni correnti è che quasi tutti eseguono il nodo dietro un server web separato o reverse proxy/cache.

+0

I server come nginx sono anche molto competenti nel gestire un carico concorrente molto elevato, che viene eseguito utilizzando un modello di gestore che consente molte richieste simultanee per thread. Questo fa parte del motivo per il throughput di gran lunga superiore per la pubblicazione di contenuto statico. Ciò consente al tuo server delle app di concentrarsi sul suo lavoro. –

+0

Infatti. Questo è ciò che intendo per "più efficiente", ma in generale saranno più adatti del framework dell'app da molte prospettive: concorrenza, latenza, utilizzo delle risorse. A volte il tuo framework web può offrire prestazioni comparabili rispetto a una o più di queste metriche, ma quando viene presa in considerazione l'immagine grande, ci sono ancora buoni motivi per mettere il framework dell'applicazione dietro un server web dedicato. –

2

Molto spesso i framework fanno tutto il necessario, ma a volte aggiungendo un livello in più può dare funzionalità apparentemente libere come compressione, sicurezza, gestione delle sessioni, bilanciamento del carico, ecc. Tuttavia, l'aggiunta di un server web può anche per esempio, introducendo problemi di sicurezza, è probabile che la sicurezza del tuo server web venga compromessa più facilmente di Lift da solo.Inoltre, alcuni dei framework web sono estremamente scalabili e potrebbero persino essere ostacolati da un server Web mal scelto.

In sintesi, se si richiede una funzionalità simile a quella del server Web non fornita dal framework, un server Web potrebbe essere un'opzione molto buona, ma tenere presente che è un'altra cosa da configurare correttamente e aggiornare regolarmente con la sicurezza patch, ecc

Se, per esempio, è sufficiente la crittografia o la compressione, allora si potrebbe scoprire che l'aggiunta di libreria corretta o plug-in per il vostro quadro può fare proprio questo (e solo quella)

2

I aggiungere:

  • gestione ssl
  • per alcuni server come molti moduli apache (ad es. autenticazione ntml/kerberos)
  • I server Web sono molto migliori per alcune cose rispetto alla propria applicazione, ad esempio per il servizio statico.
0

Con un server http proxy, il framework non ha bisogno di mantenere una connessione http aperta per dare il contenuto calcolato e può quindi iniziare a servire qualche altra richiesta. Funziona come un buffer.

0

È un problema di reinventare la ruota. La maggior parte dei framework ti fornisce un ambiente di sviluppo, ma per la produzione di solito è buona norma utilizzare un progetto commerciale/open source in grado di gestire tutti i problemi che si presentano durante la produzione.

I ragazzi che costruiscono un Framework avranno il quadro su cui concentrarsi mentre i ragazzi che costruiscono un server stanno facendo lo stesso (perfezionamento).

Problemi correlati