WSGI,CGI和框架如何连接?
Apache侦听端口80。它获取HTTP请求。它解析请求以找到一种响应方式。Apache有很多可供选择的响应方式。一种响应方式是使用CGI运行脚本。另一种响应方式是简单地提供文件。
对于CGI,Apache准备一个环境并通过CGI协议调用脚本。这是标准的Unix Fork / Exec情况-CGI子进程继承了包括套接字和标准输出的OS环境。CGI子进程编写一个响应,该响应可以返回到Apache。Apache将此响应发送到浏览器。
CGI是原始且令人讨厌的。主要是因为它为每个请求派生一个子流程,并且该子流程必须退出或关闭stdout和stderr来表示响应结束。
WSGI是基于CGI设计模式的接口。它不一定是CGI,也不必为每个请求派生一个子进程。可以是CGI,但不一定如此。
WSGI以几种重要方式添加到CGI设计模式中。它为您解析HTTP请求标头,并将其添加到环境中。它提供任何面向POST的输入,作为环境中的类似文件的对象。它还为您提供了可以制定响应的功能,从而使您免于许多格式设置细节。
如果要在基本CGI配置上运行Web框架(例如web.py或cherrypy),我需要知道/安装/做什么?
回想一下,分叉子过程很昂贵。有两种方法可以解决此问题。
在Apache中嵌入mod_wsgi
或mod_python
嵌入Python;没有分叉的过程。Apache直接运行Django应用程序。
守护程序, mod_wsgi
或mod_fastcgi
允许Apache使用WSGI协议与单独的守护程序(或“长时间运行的进程”)进行交互。您启动长期运行的Django进程,然后配置Apache的mod_fastcgi与该进程进行通信。
请注意,它mod_wsgi
可以在两种模式下工作:嵌入式或守护程序。
当您阅读mod_fastcgi时,您会发现Django使用flup从mod_fastcgi提供的信息创建与WSGI兼容的接口。管道的工作原理是这样的。
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