Oke, saya rasa saya mengerti sekarang.
Mengapa nginx tidak bisa langsung memanggil aplikasi Flask saya?
Karena nginx
tidak mendukung spek WSGI. Secara teknis nginx dapat mengimplementasikan WSGI
spesifikasi jika mereka mau, mereka belum melakukannya.
Karena itu, kita memerlukan server web yang menerapkan spesifikasi, untuk tujuan uWSGI
server.
Perhatikan bahwa uWSGI
server http lengkap yang dapat dan berfungsi dengan baik sendiri. Saya telah menggunakannya dalam kapasitas ini beberapa kali dan berfungsi dengan baik. Jika Anda membutuhkan throughput super tinggi untuk konten statis, maka Anda memiliki opsi untuk tetap berada nginx
di depan uWSGI
server Anda . Ketika Anda melakukannya, mereka akan berkomunikasi melalui protokol tingkat rendah yang dikenal sebagai uwsgi
.
"Apa-apaan ini ?! Hal lain yang disebut uwsgi ?!" Anda bertanya. Ya, itu membingungkan. Ketika Anda mereferensikan uWSGI
Anda berbicara tentang server http. Ketika Anda berbicara tentang uwsgi
(semua huruf kecil) Anda berbicara tentang protokol biner yang digunakan uWSGI
server untuk berbicara dengan server lain seperti nginx
. Mereka memilih nama yang buruk untuk yang satu ini.
Bagi siapa saja yang tertarik, saya menulis artikel blog tentang itu dengan lebih spesifik, sedikit sejarah, dan beberapa contoh.
NGINX dalam hal ini hanya bekerja sebagai reverse proxy dan merender file statis, bukan file dinamis , ia menerima permintaan dan memproksinya ke server aplikasi, yaitu UWSGI.
Server UWSGI bertanggung jawab untuk memuat aplikasi Flask Anda menggunakan antarmuka WSGI. Anda sebenarnya dapat membuat UWSGI mendengarkan langsung permintaan dari internet dan menghapus NGINX jika Anda mau, meskipun sebagian besar digunakan di belakang proxy terbalik.
Dari dokumen :
WSGI hanyalah spesifikasi antarmuka, dalam istilah sederhana, ini memberi tahu Anda metode apa yang harus diterapkan untuk meneruskan permintaan dan tanggapan antara server dan aplikasi. Saat menggunakan kerangka kerja seperti Flask atau Django, ini ditangani oleh kerangka itu sendiri.
Dengan kata lain, WSGI pada dasarnya adalah kontrak antara aplikasi python (Flask, Django, dll) dan server web (UWSGI, Gunicorn, dll). Manfaatnya adalah Anda dapat mengubah server web dengan sedikit usaha karena Anda tahu bahwa server tersebut sesuai dengan spesifikasi WSGI, yang sebenarnya merupakan salah satu tujuan, sebagaimana dinyatakan dalam PEP-333 .
sumber
Server web tradisional tidak memahami atau memiliki cara apa pun untuk menjalankan aplikasi Python. Itulah mengapa server WSGI masuk Di sisi lain Nginx mendukung proxy balik untuk menangani permintaan dan mengirimkan kembali tanggapan untuk server WSGI Python.
Tautan ini mungkin membantu Anda: https://www.fullstackpython.com/wsgi-servers.html
sumber
Secara sederhana, bayangkan analogi di mana Anda menjalankan aplikasi CGI atau PHP dengan server web Nginx. Anda akan menggunakan masing-masing penangan seperti php-fpm untuk menjalankan file ini karena server web, dalam bentuk aslinya tidak membuat format ini.
sumber