php configure fast cgi

php 與 apache 最常協同工作的方式是採用在 apache 上掛載 mod_php 模組,在執行 apache 的時候呼叫這個模組來編譯 php 網頁。所以接收工作與回應的模式大都是 apache 在控制(這邊指的是行程的數量…與生命週期等等),預設情況 apache 會有一個 process pool 接到要求就從 pool 中叫一個起來工作,如果工作超過 pool 的 process 量的話則 fork 新 process 來處理,則會佔用大量的記憶體,尤其是 apache 是採用 process 不是 thread 的關係(一個 30M 200個 request 就需要 6G)。

common gateway interface 是一個讓網頁伺服器與程式銜接的介面,叫做 interface 就是代表各種語言只要實做了這個介面就能跟網頁伺服器溝通。而 fast cgi 則是 cgi 的擴展擁有許多更良好的特性,可以是一個不中斷程式持續的接收工作,而 apache 接到工作以後不是採用 php 模組的方式呼叫編譯,而是將要求轉送至已在運行的 fcgi 程式中。

透過 fast cgi 的方式運作與 spawn cgi 來管控數個設定如: php_cgi  行程的數量。透過管理 php_cgi 行程池,減低 apache 載入 php 模組所耗費的記憶體,應能加速 apache fork 行程的速度,因為少載入了一個肥大的 mod_php module。這樣的話假設實際環境使用者要求個網頁有 1個php 9個資源的情況,10個要求只有1個需要呼叫 php_cgi ,這樣 10 個 php_cgi 可以處理 100 個 apache process。

Continue reading…

python cgi 入門…

由於 PHP 在 Thrift 連接 hdfs 的時候上傳檔案一直怪怪的,不曉得是哪裡的問題,

又鑑於 Python 的熱門(GAE,框架..)等等原因,還是得學一下

裝了 mod_python 以後就能開始寫了,好像 mod_wsgi  也可以,只是不太懂幹麼用的…再亂設一堆 http.conf 設到能跑為止…

//httpd.conf
LoadModule python_module modules/mod_python.so
PythonDebug On
AddHandler cgi-script .py

Python 不像 PHP 一樣專門用來寫 Web 所以基礎環境沒辦法很輕鬆的開發 Web,連錯誤訊息也看不太到

所幸好像 cgitb.enable() 以後就有錯誤訊息debug了?!

import cgi,cgitb,os
cgitb.enable()

要寫一個可以顯示在瀏覽器的網頁要自己輸出 http header 與宣告自己的直譯器位置,

跟以往用 c 寫 cgi 應該視差不多的方式,範例:

#!/usr/bin/python
print 'Content-type: text/html\n'
print 'Hello World!'

好險資源不少,官方網站就有不錯的教學[2],又有網站[1] 將基礎動態網頁長寫的範例都寫出來…馬上能夠對應至原先 PHP 的經驗,

不熟悉的函式如同php去查 reference[3] ,又有較完整的物件與 package 結構,唯一的缺點就是有點稍嫌古怪的語法,

比較不相容以往一系列學過基礎語法同種的語言…C , Java , PHP , JavaScript。

等基礎 cgi 寫法 熟悉後再來學 django 吧!

參考資源