Go için bir web sunucusunun önünde Nginx kullanmanın faydaları nelerdir? [kapalı]


86

Çok sayıda kullanıcısı olan JSON verilerini döndüren bazı web hizmetleri yazıyorum.

Sadece go http sunucusuna kıyasla Nginx'i sunucumun önünde kullanmanın faydaları nelerdir?


fyi, eşler tarafından bağlantı sıfırlama gibi birçok tcp hatası ve bir dakika 100'lerce büyük POST isteğini işlemek için Go http sunucusunu kullanan i / o zaman aşımları yaşadı. Nginx'i önüne koyun - artık sorun yok.
Peter Kelly

Sonunda NGINX olmadan Go http sunucusunu kullanmaya karar verdim ve çok iyi çalışıyor. Herhangi bir sorunla karşılaşmadım. Ancak hizmetim, sizin durumunuzdaki gibi büyük POST istekleri çalıştırmıyor.
Daniele B

20
BU GEREKLİ BİR GÖRÜŞ TEMELLİ DEĞİLDİR. Bu şekilde kapatmak, böyle bir sorunun cevabının doldurabileceği ve sağlayabileceği hususlar ve uyarılar konusunda ciddi bir anlayış eksikliğini gösterir. Seçilen cevap harika bir örnek. Aslında, verilen tüm cevaplarda ilgili yeni hususları görüyorum.
vee_ess

Yanıtlar:


136

Değişir.

Kutunun dışında, ters proxy olarak nginx'i öne koymak size şunları sağlayacaktır:

  • Günlüklere erişim
  • Hata günlükleri
  • Kolay SSL sonlandırma
  • SPDY desteği
  • gzip desteği
  • Birkaç satırdaki belirli yollar için HTTP üstbilgilerini ayarlamanın kolay yolları
  • Çok hızlı statik varlık sunumu (S3 / vb. Dışında hizmet veriyorsanız, bu o kadar da alakalı değildir)

Go HTTP sunucusu çok iyidir, ancak bunlardan bazılarını yapmak için tekerleği yeniden icat etmeniz gerekecek (ki bu iyi: bu herkesin her şeyi yapması anlamına gelmez).

Her zaman nginx'i öne koymayı daha kolay bulmuşumdur - ki iyi olan budur - ve "web sunucusu" işini yapmasına izin ver. My Go uygulamam, uygulama işlerini yapar ve yalnızca minimum başlık / vb. ihtiyacı var. Nginx'in önüne "kötü" bir şey olarak bakmayın.


cevabın için teşekkürler! - 1) Go HTTP bir tür günlükler üretir mi? - 2) nginx, istek / yanıt verimini bir şekilde azaltır mı?
Daniele B

3
@DanieleB Go HTTP sunucusu yalnızca istediğiniz günlükleri üretir (yani logpaketi kullanarak ). IP adresini, kaynak erişimini vb. Kaydetmek istiyorsanız, bunu yazmanız gerekir. Aynı şey, temel bilgilerin ötesinde başlıkları ayarlamak için de geçerli. Somut verilerim olmasa da, Go'nun önündeki nginx gerçekten Go'dan daha yavaş olmamalı: aslında gzip ve kendi optimizasyonları sayesinde daha hızlı olabilir. "Maliyet" daha fazla bellek / CPU kullanımı olacaktır, ancak nginx bu cephede de çok etkilidir.
elithrar

16
Bir büyük özellik daha: Uygulamanızı nasıl yükseltecek / bakımını yapacaksınız (kapalıyken paketleri düşürmeden)? Nginx, paketleri kaybetmeden trafiği yönlendirmenize izin verir.
BraveNewCurrency

+1, Nginx kendi yerinde.
Anatoly

3
Raspberry Pi'mde, Nginx'i Go'nun önüne koymak sayfa yükleme hızını önemli ölçüde artırdı.
425nesp

17

Go'nun standart http sunucusu gayet iyi. Uygulamanız çoğunlukla / yalnızca "dinamik" istekler / yanıtlarsa, bu gerçekten en iyi yoldur.

Statik varlıkları sunmak için nginx kullanabilirsiniz, ancak büyük olasılıkla standart Go one bunun için de uygundur. Daha yüksek performansa ihtiyacınız varsa, Varnish ile olabildiğince çok CDN veya önbellek kullanmalısınız (örneğin).

Aynı IP adresinden farklı uygulamalar sunmanız gerekiyorsa, nginx, istekleri farklı uygulamalar arasında dağıtmak için bir proxy için iyi bir seçimdir; yine de bu tür şeyler için alet kutusundan daha sık Varnish veya HAProxy alırdım.


evet, aslında onu sadece dinamik veri sunmak için kullanıyorum. Öyleyse sanırım NGINX'e ihtiyacım yok! Cevabınız için teşekkürler
Daniele B

Vernik / HAProxy gerekli değildir, Nginx, önbelleğe alma ve yük dengeleme için benzer araç setine sahiptir.
Anatoly

@mikhailov dediğim bu değil mi? nginx bunun için iyi çalışıyor; şahsen ben genellikle Varnish veya HAproxy'yi tercih ederim. Yapılandırmayı ve çalıştırmayı daha kolay buluyorum.
Bjørn Hansen'e

5

Gorilla web araç sahibi olursunuz

  • Gelişmiş yönlendirme (etki alanı / alt etki alanı kısıtlaması, normal ifade yolu eşleştirme).
  • gzip desteği ( ara yazılım işleyicileri aracılığıyla .)
  • Apache Ortak Günlük Biçiminde çıktı veren ara yazılım işleyicisini günlüğe kaydetme.
  • Şifrelenmiş çerezlerin güvenliğini sağlayın.
  • Oturumlar.
  • schema paketi, form değerlerini bir yapıya dönüştürür.

Bu, Go'nun net/httpve NGINX gibi HTTP sunucuları arasındaki büyük boşluğu doldurur .

Şahsen, net/httpbunun yerine bir CDN takabileceğimi bilirsem , başka bir HTTP sunucusu kurmaktan ve yapılandırmaktan kaçınırdım.

net/httpHerhangi bir standart kitaplıkta en güçlü HTTP sunucusuna sahip olduğunu düşünüyorum .


2

Gönderen https://blog.gopheracademy.com/caddy-a-look-inside/ Git Gzip işleyebilir gibi Middleware'i kullanarak ve http başlıkları yönlendirme, hataları, statik dosyaları arar. Blogdaki aşağıdaki satır, böyle bir talebi nasıl ele alacağınızı gösterir.

logHandler(gzipHandler(fileServer))

Hata kayıtlarını gerçekten ilginç bir şekilde ele alırlar. Ara yazılımınız bir hata kodu (int) döndürdüğü sürece, hata işleme ara yazılımı bunu otomatik olarak işler. Nginx'in yapacağı gibi Go'da tüm siteyi yapılandıracak kadar ileri gittiler. "Tüm Gopher Academy web siteleri için nginx.conf dosyası 115 satırın üzerindeydi. Eşdeğer Caddyfile yalnızca 50 satırdır."

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.