mod_cgi、mod_fastcgi、mod_scgi、mod_wsgi、mod_python、FLUP。还有多少?mod_php的对应是什么?
我最近学了Python,觉得挺不错的。我想用它来做网页开发,但这个想法让我遇到了一些麻烦。不过我喜欢这些麻烦 :)
我之前用的是PHP,那里只有一种标准的做法。我以为Python也会这样,所以我开始找关于Python和Apache的资料。
要远离mod_python。一个常见的误解是,mod_python就像mod_php,只不过是给Python用的。其实并不是这样的。
那在Python中,mod_php的对应是什么呢?
我需要一点澄清,关于这个问题可以参考Python的网页框架、WSGI和CGI是如何结合在一起的。
CGI、FastCGI和SCGI是与语言无关的。你可以用Perl、Python、C、bash,甚至汇编语言写CGI脚本。所以,我想mod_cgi
、mod_fastcgi
和mod_scgi
是它们对应的Apache模块,对吧?
WSGI是某种优化过的、改进过的,简单来说就是专门为Python语言设计的高效版本。要使用这个,mod_wsgi
是个不错的选择,对吧?
这就把mod_python
排除了。那么它是什么呢?
Apache -> mod_fastcgi -> FLUP(通过CGI协议) -> Django(通过WSGI协议) Flup是另一种可以与任何支持FCGI、SCGI或AJP的网页服务器一起使用WSGI的方法。
FLUP是什么?AJP又是什么?Django是怎么参与进来的?
这些问题让我想到了PHP。它到底是怎么运行的?使用了什么技术?mod_php和mod_python有什么区别?
将来如果我想用Perl或Java,那我还会再困惑吗?能不能有人把这些事情解释得清楚一点,给我一个完整的图景。
4 个回答
在Python的世界里,没有完全等同于mod_php的东西。
- FastCGI、SCGI和AJP会把网页应用程序当作一个独立的进程(守护进程)来运行,并在网页服务器和这个进程之间传递信息。
- mod_python可以在处理请求的任何阶段,把Python代码嵌入到httpd进程中。
- mod_wsgi可以以守护进程模式或嵌入模式运行Python代码。
- CGI是一种协议,每次收到请求时都会运行一个脚本或程序。
- FLUP是一组适配器,可以用来把这些接口之间进行转换。
把一个Python应用程序放到网上,标准的方法就是用WSGI。现在没有必要用其他的方法了。
mod_wsgi是Apache服务器用来支持WSGI的一个模块。其他的网络服务器可能会有不同名字的模块来支持WSGI。
mod_python
和 mod_php
的功能最为相似(也就是说,它们都想做很多事情)。这并不一定是好事,所以我不建议现在用原生的 mod_python
接口来写应用程序。
WSGI 是一种优化过的、改进过的版本,简单来说,就是专门为 Python 设计的高效版本。
它们的区别在于,WSGI 是用 Python 语言本身定义的:它明确规定了你的代码会接收到哪些对象和数值。而 [S|Fast]CGI 更关注的是网络传输中的字节。
如果你按照 WSGI 标准来写应用程序(可以直接写,也可以用支持它的框架),那么你就把应用程序的编写和部署这两件事分开了。
为了使用这个,mod_wsgi 是一个不错的选择,对吧?
是的,mod_wsgi 是一个不错的选择,尤其适合 Apache 用户,但并不是唯一的选择。只要按照 WSGI 来写,你就可以在各种环境中部署,包括 [S|Fast]CGI 和 mod_python。