WSGI, CGI และเฟรมเวิร์คเชื่อมต่อกันอย่างไร?
Apache ฟังพอร์ต 80 รับคำขอ HTTP แยกวิเคราะห์คำขอเพื่อค้นหาวิธีการตอบกลับ Apache มีตัวเลือกมากมายสำหรับตอบสนอง วิธีหนึ่งในการตอบกลับคือใช้ CGI เพื่อเรียกใช้สคริปต์ อีกวิธีในการตอบสนองคือเพียงให้บริการไฟล์
ในกรณีของ CGI นั้น Apache จะเตรียมสภาพแวดล้อมและเรียกใช้สคริปต์ผ่านโปรโตคอล CGI นี่เป็นสถานการณ์ Unix Fork / Exec มาตรฐาน - กระบวนการย่อย CGI สืบทอดสภาพแวดล้อมระบบปฏิบัติการรวมถึงซ็อกเก็ตและ stdout กระบวนการย่อย CGI เขียนการตอบกลับซึ่งกลับไปที่ Apache Apache ส่งการตอบกลับนี้ไปยังเบราว์เซอร์
CGI นั้นดั้งเดิมและน่ารำคาญ ส่วนใหญ่เป็นเพราะมันหยุดกระบวนการย่อยสำหรับทุกคำขอและกระบวนการย่อยจะต้องออกหรือปิด stdout และ stderr เพื่อบ่งบอกถึงการสิ้นสุดของการตอบสนอง
WSGI เป็นอินเทอร์เฟซที่ยึดตามรูปแบบการออกแบบ CGI ไม่จำเป็นต้องใช้ CGI - ไม่จำเป็นต้องแยกกระบวนการย่อยสำหรับแต่ละคำขอ มันสามารถเป็น CGI ได้ แต่ไม่จำเป็นต้องเป็น
WSGI เพิ่มรูปแบบการออกแบบ CGI ในหลายวิธีที่สำคัญ มันแยกวิเคราะห์ส่วนหัวคำขอ HTTP สำหรับคุณและเพิ่มเหล่านี้ไปยังสภาพแวดล้อม มันส่งมอบการป้อนข้อมูลใด ๆ ที่มุ่งเน้น POST เป็นวัตถุเหมือนไฟล์ในสภาพแวดล้อม นอกจากนี้ยังมีฟังก์ชันที่จะจัดทำคำตอบช่วยให้คุณประหยัดจากรายละเอียดการจัดรูปแบบจำนวนมาก
ฉันต้องทราบอะไร / ติดตั้ง / ทำถ้าฉันต้องการเรียกใช้เว็บเฟรมเวิร์ก (พูด web.py หรือ cherrypy) ในการกำหนดค่า CGI พื้นฐานของฉัน
จำได้ว่าการฟอร์กกระบวนการย่อยมีราคาแพง มีสองวิธีในการแก้ไขปัญหานี้
ฝัง mod_wsgi
หรือmod_python
ฝัง Python ไว้ใน Apache; ไม่มีกระบวนการแยก Apache รันแอปพลิเคชั่น Django โดยตรง
Daemon mod_wsgi
หรือmod_fastcgi
อนุญาตให้ Apache โต้ตอบกับ daemon ที่แยกต่างหาก (หรือ "กระบวนการที่ใช้เวลายาวนาน") โดยใช้โปรโตคอล WSGI คุณเริ่มต้นกระบวนการ Django ที่ใช้เวลานานจากนั้นกำหนดค่า mod_fastcgi ของ Apache ให้สื่อสารกับกระบวนการนี้
โปรดทราบว่าmod_wsgi
สามารถทำงานในโหมดใดโหมดหนึ่ง: embedded หรือ daemon
เมื่อคุณอ่าน mod_fastcgi คุณจะเห็นว่า Django ใช้flupเพื่อสร้างอินเตอร์เฟสที่เข้ากันได้กับ WSGI จากข้อมูลที่ได้รับจาก mod_fastcgi ไปป์ไลน์ใช้งานได้เช่นนี้
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django มี "django.core.handlers" หลายอย่างสำหรับอินเทอร์เฟซต่าง ๆ
สำหรับ mod_fastcgi นั้น Django ได้ทำการmanage.py runfcgi
รวม FLUP และตัวจัดการเข้าด้วยกัน
สำหรับ mod_wsgi มีตัวจัดการหลักสำหรับสิ่งนี้
จะติดตั้ง WSGI ได้อย่างไร?
ทำตามคำแนะนำเหล่านี้
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
สำหรับพื้นหลังให้ดูสิ่งนี้
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index