如果我有一台运行 Apache 的服务器,并且安装了 FastCGI,那么我可以运行 Ruby 和 Python 脚本吗?如果服务器上已经安装了 Python,那么我是不是只需将 .py 添加到 httpd.conf 文件中的 CGI 部分即可运行 Python 脚本?
对于 Ruby 和 Java,如果安装了 Ruby 和 Java,是否就不再需要 Mongrel 和 Tomcat 了?
除非我遗漏了什么,否则 FastCGI 似乎只允许您做您已经可以做的事情。
答案1
FastCGI 是“标准” CGI 脚本的替代品。
在老式的 CGI 中,Web 服务器将启动您的脚本,向其发送请求,等待响应,然后等待您的脚本终止。
FastCGI 的主要特点是您的脚本不会停止,而是挂起,等待另一个请求。这使得它更加高效,因为不会创建另一个进程,不会重新加载可能需要解释的脚本等。这对 Perl、Ruby 以及几乎所有其他语言来说都是一个重大胜利。
缺点是你必须编写脚本来处理这类事情。这并不难。
因此,FastCGI 就是为了减少服务请求的影响。
如果您正在使用 Ruby on Rails(不仅仅是 ruby),那么请查看 Phusion Passenger。这是一款非常棒的服务器插件,可以很好地运行 Ruby on Rails。
至于 mod_python,您当然可以这样做。但是,这样做也有弊端。首先,CGI 脚本可以作为主 Web 服务器以外的其他用户运行。我不知道 mod_python 是否这样做。能够以不同的用户身份运行可能非常有用,可以解决权限问题,通过以不同的用户身份运行来保持应用程序的分离,等等。
因此,换一种方式回答您的问题,如果您愿意使用 mod_python 和 Phusion Passenger,则无需使用 FastCGI。如果您必须在与服务器不同的进程中运行脚本,那么如果可以的话,您应该使用 FastCGI,而不是普通的 CGI。
答案2
FastCGI是CGI的优化版本,它匹配CGI的接口,并添加了分布式计算。
您可以通过 CGI 运行 Python 脚本(cgitb 模块很有用),但出于性能和功能方面的考虑,通常最好使用诸如 mod_python 之类的框架。Ruby 和 Java 的情况类似。
我不确定你想做什么。你不能直接用 FastCGI 替换 Mongrel 或 Tomcat。它们是完全不同的两种东西。你必须重写应用程序以适应 Web 服务器的接口。