Ada banyak tutorial tentang cara mengkonfigurasi nginx untuk bekerja sama dengan uWGSI ketika saya ingin menggunakan aplikasi Django.
Tapi mengapa saya perlu nginx dalam kit ini? uWSGI sendiri dapat melayani aplikasi WSGI Python, dapat melayani file statis, juga dapat melakukan SSL. Apa yang bisa nginx lakukan dimana uWSGI tidak bisa?
Jawaban:
Kamu tidak.
Itulah jawaban yang sederhana - Anda tidak membutuhkannya . uWSGI sendiri merupakan server yang mampu.
Namun, server lain seperti nginx telah ada lebih lama dan (mungkin, bagaimanapun) lebih aman, serta memiliki fitur tambahan yang tidak didukung oleh uWSGI - misalnya, peningkatan penanganan sumber daya statis (melalui kombinasi Expired atau E-Tag header, kompresi gzip, gzip pra-kompresi, dll.) yang secara signifikan dapat mengurangi beban server dan jaringan; selain itu, server seperti nginx di depan aplikasi Django Anda dapat menerapkan caching konten dinamis Anda juga, lebih lanjut membantu mengurangi beban server, dan bahkan membantu memfasilitasi penggunaan CDN (yang biasanya tidak baik dengan konten dinamis) ). Anda bahkan dapat melangkah lebih jauh dan memiliki nginx pada server yang sepenuhnya terpisah, membalikkan permintaan proxy untuk konten dinamis ke kumpulan server aplikasi yang seimbang sambil menangani konten statis itu sendiri.
Sebagai contoh, blog saya (sementara itu WordPress, memiliki nginx di depannya) disetel ke posting cache selama 24 jam, dan untuk cache halaman indeks selama 5 menit; sementara saya tidak melihat lalu lintas yang cukup untuk itu sangat penting sebagian besar waktu, itu membantu VPS kecil saya cuaca lonjakan sesekali yang mungkin menjatuhkannya - seperti lonjakan lalu lintas besar ketika salah satu artikel saya dipetik oleh seorang Twitterer dengan ribuan pengikut, banyak dari mereka men-tweetnya ke ribuan pengikut mereka.
Jika saya menjalankan server uWSGI "telanjang" (dan menganggapnya sebagai situs Django, bukan WordPress), itu mungkin akan bertahan dengan baik - atau mungkin crash dan terbakar, membuat saya kehilangan pengunjung yang terlewat . Memiliki nginx di depannya untuk menangani beban itu bisa sangat membantu.
Semua yang dikatakan, jika Anda hanya menjalankan situs kecil yang tidak akan melihat banyak lalu lintas, tidak ada kebutuhan nyata untuk nginx atau apa pun - cukup gunakan uWSGI sendiri jika itu yang ingin Anda lakukan. Di sisi lain, jika Anda akan melihat banyak lalu lintas ... yah, Anda mungkin masih menginginkan uWSGI, tetapi Anda setidaknya harus mempertimbangkan sesuatu di depannya untuk membantu memuat. Sebenarnya, Anda harus benar-benar menguji berbagai konfigurasi dengan situs Anda yang sudah selesai untuk menentukan apa yang paling sesuai untuk Anda di bawah beban yang Anda harapkan, dan menggunakan apa pun yang akhirnya menjadi.
sumber
IMO, jika Anda menempatkan situs web Anda di Internet alih-alih Lab, Anda mungkin melihat perbedaannya.
Bayangkan seorang pengguna dari negara lain dengan peramban web terbuka kecepatan rendah untuk mengakses situs web Anda. uWSGI akan menangani koneksi Http itu di utas. Utas itu mungkin menghabiskan waktu cukup lama untuk menunggu permintaan Http lengkap karena kecepatan jaringan yang rendah. Jika ukuran kumpulan thread Anda adalah 100, bayangkan 100 pengguna seperti itu lambat, apa yang akan terjadi? Tidak ada utas menganggur untuk menangani permintaan Http lainnya.
Tetapi hal-hal yang sangat berbeda untuk Nginx. Nginx dirancang dalam 'Pola Reaktor'. Anda dapat google 'Pola Reaktor' untuk melihat cara kerjanya. Singkatnya, koneksi kecepatan lambat tidak mempengaruhinya untuk menangani permintaan Http lainnya.
sumber