在Web服务区和PHP代码之间, mod_php5 模块和php-cgi 的作用和位置定义是什么?

我在学习的时候:
http://www.runoob.com/nodejs/...

这里有一句:

如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi。

我们知道 Apache, Nginx 这些都是 Web 服务器。我们用 PHP 写的程序运行在 PHP 的运行环境中,那么 mode_php5, php-cgi 这些 PHP 的模块的作用是什么呢?

那么如果这里是 Python/Django 写的后端代码,那么这里是不是也需要有一个与 Apache 或者 Nginx 这样的 Web 服务器相联系的,作为 Python/Django 代码的中间件?

它的具体定义是什么? 作用是什么呢?

阅读 3.1k
1 个回答

首先, apache 的 mode_php5 ,这点我不太确定,我猜,可能是像 java 的 servlet 一样, apache + mode_php5 更像是一个“容器”的角色,提供了直接运行 php 的能力。

然后, php-cgi ,这个,可能是 php 的 cgi 协议实现?现在已经基本不用 cgi ,而是 fastcgi 这些, Django 也多是 fastcgi 方式部署。 fastcgi 是一个通用的网关协议, nginx 通过 fastcgi 协议与后面的 Python, php 等应用层通信。(类似的, Python 方面,有 wsgi , Java 的 servlet 我觉得也算)

网关协议(cgi , fastcgi 等),的作用,就是把 web 服务器抽出来,分离“应用”。

因为在各个语言上,实现 cgi 或 fastcgi ,要比实现一套完整的 http 要容易得多(最重要的一点是不用关心访问的“调度”了)。进一步说, Python 中的 Tornado 虽然自己有实现 http ,正式环境部署的时候,也会在前端部署 nginx ,从这里也可以看到, nginx 这类 web 服务器,除了实现 http 协议,还有其它相关的功能(反向代理,负载均衡,fastcgi 支持,uwsgi 支持等)。而通过通用的网关协议,把这些层分开,各自就可以更关注自己的领域,实现更稳定,强大的服务质量。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题