鍍金池/ 問答/PHP  HTML/ 在Web服務(wù)區(qū)和PHP代碼之間, mod_php5 模塊和php-cgi 的作用

在Web服務(wù)區(qū)和PHP代碼之間, mod_php5 模塊和php-cgi 的作用和位置定義是什么?

我在學(xué)習(xí)的時(shí)候:
http://www.runoob.com/nodejs/...

這里有一句:

如果我們使用PHP來編寫后端的代碼時(shí),需要Apache 或者 Nginx 的HTTP 服務(wù)器,并配上 mod_php5 模塊和php-cgi。

我們知道 Apache, Nginx 這些都是 Web 服務(wù)器。我們用 PHP 寫的程序運(yùn)行在 PHP 的運(yùn)行環(huán)境中,那么 mode_php5, php-cgi 這些 PHP 的模塊的作用是什么呢?

那么如果這里是 Python/Django 寫的后端代碼,那么這里是不是也需要有一個與 Apache 或者 Nginx 這樣的 Web 服務(wù)器相聯(lián)系的,作為 Python/Django 代碼的中間件?

它的具體定義是什么? 作用是什么呢?

回答
編輯回答
萌小萌

首先, apache 的 mode_php5 ,這點(diǎn)我不太確定,我猜,可能是像 java 的 servlet 一樣, apache + mode_php5 更像是一個“容器”的角色,提供了直接運(yùn)行 php 的能力。

然后, php-cgi ,這個,可能是 php 的 cgi 協(xié)議實(shí)現(xiàn)?現(xiàn)在已經(jīng)基本不用 cgi ,而是 fastcgi 這些, Django 也多是 fastcgi 方式部署。 fastcgi 是一個通用的網(wǎng)關(guān)協(xié)議, nginx 通過 fastcgi 協(xié)議與后面的 Python, php 等應(yīng)用層通信。(類似的, Python 方面,有 wsgi , Java 的 servlet 我覺得也算)

網(wǎng)關(guān)協(xié)議(cgi , fastcgi 等),的作用,就是把 web 服務(wù)器抽出來,分離“應(yīng)用”。

因?yàn)樵诟鱾€語言上,實(shí)現(xiàn) cgi 或 fastcgi ,要比實(shí)現(xiàn)一套完整的 http 要容易得多(最重要的一點(diǎn)是不用關(guān)心訪問的“調(diào)度”了)。進(jìn)一步說, Python 中的 Tornado 雖然自己有實(shí)現(xiàn) http ,正式環(huán)境部署的時(shí)候,也會在前端部署 nginx ,從這里也可以看到, nginx 這類 web 服務(wù)器,除了實(shí)現(xiàn) http 協(xié)議,還有其它相關(guān)的功能(反向代理,負(fù)載均衡,fastcgi 支持,uwsgi 支持等)。而通過通用的網(wǎng)關(guān)協(xié)議,把這些層分開,各自就可以更關(guān)注自己的領(lǐng)域,實(shí)現(xiàn)更穩(wěn)定,強(qiáng)大的服務(wù)質(zhì)量。

2017年7月9日 19:30