弄了半天總算弄好的 apache22 + mod_fastcgi + php5

最近因為一連串意外,把外語中心的伺服器程式更新了。

本來只是很單純的跑個 update 的 batch 作業,
但大概是之前的設定有些問題,用 portmanager 更新之後,
原先用 apache module 方式跑的 libphp5 跑不起來,
查了之後發現,原來是更新過 ports 之後,
php5 預設安裝 fastcgi 版本,而 module 版被移出,
變成 mod_php5..

嗯,所以裝 fastcgi 版本比較好? (不知)
於是就動手改成 fastcgi 版本的 php5。

原先我也搞不懂 apache + php5-fcgi 設定,
但藉著偉大 Google 大神之神力,找到了相關文章。

設定資料可以在 這裡 查到,
如果 apache 已經裝好,從第四點開始看就可以了。

文章寫得十分詳細,照著做就可以順利跑起來囉 :p

更新成 fastcgi 版本之後,
網頁目錄的 .htaccess 不能設定 php_value,
解決方式在網路上有,因為太麻煩,所以我就當作沒看到了 (默)

裝到這裡,一切都看似安好,
但今天要進 phpMyAdmin 的時候才發現無法進入,
會跑出 Internal Server Error,
而 log 裡寫的原因是 error parsing headers: duplicate header ‘Status’,
看了半天不知道所以然,就開始東試試西試試;
在一陣胡亂嘗試下,除了把 phpMyAdmin 更新外,
httpd 也就這樣順勢被我更新成 2.2.3 版了.. ||

因為更新之前的 httpd 是 2.0.58,
設定跟 2.2.3 有些許不同,花了一些時間調整,
但新的版本設定檔確實有條不紊多了 (遠目)

apache22 設定方式可以看 這裡 (日文)。

但到了這裡,還是不行。
嗯,那就去問 Google 吧 XD

查到了 這篇(1)
加上 FastCgiConfig 及 rewrite rule 後,還是無法正常運作,
於是就又點到 Refer 到的 這篇(2)
發現同樣也是 duplicate header 的問題..

好吧,這代表 phpMyAdmin 有某個地方送了奇怪的 header,
於是便開始在搜尋含有 header('status: ...'); 的檔案。

最後,在 ./libraries/auth/http.auth.lib.php 找到了問題,
patch 方式跟上面 (2) 提到 WordPress 的方式很像,只要將

header('HTTP/1.0 401 Unauthorized');
header('status: 401 Unauthorized');

修改成

if(eregi(php_sapi_name(), 'cgi'))
header('status: 401 Unauthorized');
else
header('HTTP/1.0 401 Unauthorized');

即可正常運作,但是要記得加上 (1) 裡面的 rewrite rule,
才算是大功告成喔 (飄)

雖然花了很多時間,可是還滿有成就感的..
這種詭異的執著還真是恐怖呢 XD