Làm thế nào WSGI, CGI và các khung công tác được kết nối?
Apache lắng nghe trên cổng 80. Nó nhận được yêu cầu HTTP. Nó phân tích yêu cầu để tìm cách trả lời. Apache có rất nhiều sự lựa chọn để đáp ứng. Một cách để trả lời là sử dụng CGI để chạy tập lệnh. Một cách khác để trả lời là chỉ cần phục vụ một tập tin.
Trong trường hợp của CGI, Apache chuẩn bị một môi trường và gọi tập lệnh thông qua giao thức CGI. Đây là một tình huống Unix Fork / Exec tiêu chuẩn - quy trình con CGI thừa hưởng môi trường HĐH bao gồm cả socket và stdout. Quá trình con CGI viết một phản hồi, quay trở lại Apache; Apache gửi phản hồi này đến trình duyệt.
CGI là nguyên thủy và gây phiền nhiễu. Chủ yếu là vì nó tạo ra một quy trình con cho mọi yêu cầu và quy trình con phải thoát hoặc đóng thiết bị xuất chuẩn và thiết bị xuất chuẩn để biểu thị kết thúc phản hồi.
WSGI là một giao diện dựa trên mẫu thiết kế CGI. Nó không nhất thiết phải là CGI - nó không phải rẽ nhánh một quy trình con cho mỗi yêu cầu. Nó có thể là CGI, nhưng nó không phải như vậy.
WSGI thêm vào mẫu thiết kế CGI theo nhiều cách quan trọng. Nó phân tích các tiêu đề yêu cầu HTTP cho bạn và thêm chúng vào môi trường. Nó cung cấp bất kỳ đầu vào hướng POST nào dưới dạng đối tượng giống như tệp trong môi trường. Nó cũng cung cấp cho bạn một chức năng sẽ hình thành phản hồi, giúp bạn tiết kiệm rất nhiều chi tiết định dạng.
Tôi cần biết / cài đặt / làm gì nếu tôi muốn chạy một khung web (nói web.py hoặc cherrypy) trên cấu hình CGI cơ bản của tôi?
Hãy nhớ lại rằng việc bỏ một quy trình con là tốn kém. Có hai cách để làm việc này.
Nhúng mod_wsgi
hoặc mod_python
nhúng Python trong Apache; không có quá trình rẽ nhánh. Apache chạy ứng dụng Django trực tiếp.
Daemon mod_wsgi
hoặc mod_fastcgi
cho phép Apache tương tác với một daemon riêng (hoặc "quá trình chạy dài"), sử dụng giao thức WSGI. Bạn bắt đầu quá trình Django chạy dài của mình, sau đó bạn định cấu hình mod_fastcgi của Apache để liên lạc với quy trình này.
Lưu ý rằng mod_wsgi
có thể hoạt động ở một trong hai chế độ: nhúng hoặc daemon.
Khi bạn đọc trên mod_fastcgi, bạn sẽ thấy Django sử dụng flup để tạo giao diện tương thích WSGI từ thông tin được cung cấp bởi mod_fastcgi. Các đường ống hoạt động như thế này.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django có một số "django.core.handlers" cho các giao diện khác nhau.
Đối với mod_fastcgi, Django cung cấp manage.py runfcgi
tích hợp FLUP và trình xử lý.
Đối với mod_wsgi, có một trình xử lý cốt lõi cho việc này.
Làm cách nào để cài đặt hỗ trợ WSGI?
Làm theo những chỉ dẫn này.
https://code.google.com.vn/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Đối với nền xem điều này
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index