Bagaimana WSGI, CGI, dan kerangka kerja semuanya terhubung?
Apache mendengarkan pada port 80. Ia mendapat permintaan HTTP. Itu mem-parsing permintaan untuk menemukan cara untuk merespons. Apache memiliki BANYAK pilihan untuk merespons. Salah satu cara untuk merespons adalah menggunakan CGI untuk menjalankan skrip. Cara lain untuk merespons adalah dengan hanya melayani file.
Dalam kasus CGI, Apache menyiapkan lingkungan dan memanggil skrip melalui protokol CGI. Ini adalah situasi standar Unix Fork / Exec - subproses CGI mewarisi lingkungan OS termasuk soket dan stdout. Subproses CGI menulis respons, yang kembali ke Apache; Apache mengirimkan respons ini ke browser.
CGI itu primitif dan menyebalkan. Sebagian besar karena itu fork subproses untuk setiap permintaan, dan subproses harus keluar atau menutup stdout dan stderr untuk menandakan akhir dari respons.
WSGI adalah antarmuka yang didasarkan pada pola desain CGI. Ini tidak harus CGI - tidak harus melakukan subproses untuk setiap permintaan. Itu bisa CGI, tetapi tidak harus begitu.
WSGI menambah pola desain CGI dalam beberapa cara penting. Ini mem-parsing Header Permintaan HTTP untuk Anda dan menambahkan ini ke lingkungan. Ini memasok setiap input berorientasi POST sebagai objek seperti file di lingkungan. Ini juga memberi Anda fungsi yang akan merumuskan respons, menyelamatkan Anda dari banyak detail pemformatan.
Apa yang perlu saya ketahui / instal / lakukan jika saya ingin menjalankan kerangka kerja web (mis. Web.py atau cherrypy) pada konfigurasi CGI dasar saya?
Ingat bahwa forking suatu subproses mahal. Ada dua cara untuk mengatasi ini.
Tertanam mod_wsgi
atau mod_python
menyematkan Python di dalam Apache; tidak ada proses bercabang. Apache menjalankan aplikasi Django secara langsung.
Daemon mod_wsgi
atau mod_fastcgi
memungkinkan Apache untuk berinteraksi dengan daemon terpisah (atau "proses yang berjalan lama"), menggunakan protokol WSGI. Anda memulai proses Django Anda yang sudah berjalan lama, kemudian Anda mengkonfigurasi mod_fastcgi Apache untuk berkomunikasi dengan proses ini.
Catatan yang mod_wsgi
dapat bekerja dalam mode: tertanam atau daemon.
Ketika Anda membaca di mod_fastcgi, Anda akan melihat bahwa Django menggunakan flup untuk membuat antarmuka yang kompatibel dengan WSGI dari informasi yang disediakan oleh mod_fastcgi. Pipa bekerja seperti ini.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django memiliki beberapa "django.core.handlers" untuk berbagai antarmuka.
Untuk mod_fastcgi, Django menyediakan manage.py runfcgi
FLUP dan handler yang terintegrasi.
Untuk mod_wsgi, ada penangan inti untuk ini.
Bagaimana cara menginstal dukungan WSGI?
Ikuti instruksi ini.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Untuk latar belakang lihat ini
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index