Bu bir sunucu, evet.
Bir node.js web uygulaması, Nginx veya Apache gibi tam teşekküllü bir web sunucusudur.
Gerçekten de node.js uygulamanıza başka herhangi bir web sunucusu kullanmadan hizmet edebilirsiniz. Kodunuzu şu şekilde değiştirin:
app = express();
http.createServer(app).listen(80);
Aslında bazı projeler , diğer sunucular için (Apache dahil) ön uç yük dengeleyici olarak node.js kullanır .
Bunu yapan tek geliştirme yığını node.js olmadığını unutmayın. Go, Java ve Swift'deki web geliştirme çerçeveleri de bunu yapıyor.
Neden?
Başlangıçta CGI idi. CGI iyiydi ve iyi çalıştı. Apache bir istek alır, url'nin bir CGI uygulamasını yürütmesi gerektiğini bulur, bu CGI uygulamasını çalıştırır ve verileri ortam değişkenleri olarak iletir, stdout'u okur ve verileri tarayıcıya geri sunar.
Sorun, yavaş olması. CGI uygulaması statik olarak derlenmiş küçük bir C programı olduğunda sorun değil, ancak bir grup küçük statik olarak derlenmiş C programının bakımı zorlaştı. Böylece insanlar betik dillerinde yazmaya başladı. Sonra bunu sürdürmek zorlaştı ve insanlar nesne yönelimli MVC çerçeveleri geliştirmeye başladı. Şimdi sorun yaşamaya başladık - HER TALEP, tüm bu sınıfları derlemeli ve tüm bu nesneleri, hizmet verecek dinamik bir şey olmasa bile (çünkü çerçevenin hizmet verecek dinamik bir şey olmadığını anlamaya ihtiyacı var) bir miktar HTML sunmak için oluşturmalıdır.
Ya her istekte tüm bu nesneleri oluşturmamız gerekmiyorsa?
İnsanların düşündüğü buydu. Ve bu sorunu çözmeye çalışmaktan birkaç strateji geldi. İlk yöntemlerden biri, yorumlayıcıları mod_php
Apache'de olduğu gibi doğrudan web sunucularına yerleştirmekti . Derlenen sınıflar ve nesneler genel değişkenlerde saklanabilir ve bu nedenle önbelleğe alınabilir. Diğer bir strateji de ön derleme yapmaktı. Ve bir başka strateji de uygulamayı normal bir sunucu işlemi olarak çalıştırmak ve FastCGI gibi özel bir protokol kullanarak web sunucusuyla konuşmaktı.
Sonra bazı geliştiriciler uygulama-> sunucu protokolü olarak HTTP kullanmaya başladı. Aslında, uygulama aynı zamanda bir HTTP sunucusudur. Bunun avantajı, yeni, muhtemelen hatalı, muhtemelen test edilmemiş bir protokol uygulamanıza gerek olmaması ve uygulamanızda doğrudan bir web tarayıcısı (veya genellikle curl
) kullanarak hata ayıklayabilmenizdir . Ve uygulamanızı desteklemek için değiştirilmiş bir web sunucusuna ihtiyacınız yok, sadece ters proxy veya yeniden yönlendirme yapabilen herhangi bir web sunucusuna ihtiyacınız var.
Neden Apache / Nginx kullanıyorsunuz?
Bir node.js uygulaması sunduğunuzda, kendi web sunucunuzun yazarı olduğunuzu unutmayın. Uygulamanızdaki herhangi bir olası hata, internette doğrudan yararlanılabilen bir hatadır. Bazı insanlar (haklı olarak) bu konuda rahat değil.
Node.js uygulamanızın önüne bir Apache veya Nginx katmanı eklemek, uygulamanız için bir arayüz olarak canlı internette savaşta test edilmiş, güvenliği güçlendirilmiş bir yazılım parçasına sahip olduğunuz anlamına gelir. Küçük bir gecikme (ters proxy) ekler, ancak çoğu buna değer olduğunu düşünür.
Bu, node.js'nin ilk günlerinde standart bir tavsiyeydi. Ancak bu günlerde node.js'yi doğrudan internete maruz bırakan siteler ve web hizmetleri de var. http.Server
Modül süreci oldukça iyi savaş görmüş internette güvenilir olmaktır.
Isn't it true that a Node.js based server (i.e. code) will still be placed within something like Nginx to run?
Hayır, bu yanlış