FreeBSD 建置 Apache + mod_fastcgi + php-fpm

近日在實驗 Apache 使用 FastCGI (mod_fastcgi) 搭配 PHP 提供的 PHP-FPM 網頁架構。

Apache 如果什麼都沒有動的話,應該預設是跑 prefork ,也就是預先 fork 一些子程序出來等連線,這樣的架構在大量連線的伺服器來說不是很穩定。更改編譯選項可以換成用 worker mpm 方式,如此一來 Apache 可以用 thread  的方式來執行,資源利用較有效率。

除此之外,PHP 的部份也可以改用 FastCGI 的方式來執行。

預設安裝的 mod_php5 的執行方式是由 Apache 呼叫,等待 PHP 程式執行完畢之後再一起輸出給使用者。若是使用 CGI 的方式來執行,則當 Apache 收到 PHP 執行需求的時候,會去叫起 php-cgi 這隻程式,等待其執行完畢之後再回傳結果。當然這也不是有效率的作法,因為一次只接受一個連線,若有多個連線要叫起一堆的 php-cgi。若採用 FastCGI protocol 的方式執行,php-cgi 這隻程式會成為一隻 daemon 在背景執行,隨時等待連線。

FastCGI protocol 在 Apache 裡面的實做方式有兩種,mod_fastcgi 與 mod_fcgid。前者發展較早,由 fastcgi.com 維護,fastcgi process 開起來之後會一直在後台跑,隨時接受連線;後者為 Apache 基金會自己的項目,目標是可以隨時動態增減 fastcgi process 的數量,一旦用完就殺掉,有效利用資源又不致於在 晚上 流量大的時候被打掛。關於這兩個的優劣並沒有絕對,各位可以上網搜尋相關資料。

繼續閱讀 “FreeBSD 建置 Apache + mod_fastcgi + php-fpm” →

FreeBSD 建置 Apache + mod_fastcgi + php-fpm

Les Misérables 悲慘世界

完美,無法挑剔。(其實是可以挑剔啦,但是不想挑剔)

劇本中描述的年代,認真想想,與今日也相去不遠呢。雖然現在我們了許多體制、方法與管道,但法律與人心的衝突還是時時刻刻的在上演。

主角尚萬強因親戚的小孩飢寒受凍所以偷了條麵包而入獄,現代社會也許不太可能發生這種事,但若是今日你也遇到相同的狀況而所有你已知體制內且能力範圍內可行的方法皆告失敗,該怎麼辦?更何況類似的事情也不是沒發生過,參見《不能沒有你》。

社會體制既然為人所制定,則必然有其不完美之處,而我們應當尊重其不合理之處,要求其他人服從,或者是要求改進不合理之處呢?值得大眾討論。

Do you hear the people sing?

繼續閱讀 “Les Misérables 悲慘世界” →

Les Misérables 悲慘世界

dokuwiki 整合 minecraft 驗證系統

dokuwiki 是一套我很喜歡的迷你 wiki 系統,他的特色包括輕巧又有足夠的功能、檔案以純文字撰寫等。

因為目前所架設的 Minecraft 伺服器有採用 AuthMe 驗證系統,因為要在遊戲裡面註冊帳號實在是很麻煩,因此很早以前就寫了個網站方便更改資料、註冊帳號。但是 wiki 也需要帳號,考量到使用者編輯的需要,每次都要使用者一直註冊帳號實在是很不方便,因此就嘗試結合 dokuwiki 的認證機制,讓使用者可以使用同一組帳號密碼登入遊戲與網站。

dokuwiki 支援各種登入驗證方式,預設是採用 plaintext,也就是密碼 hash 之後存在純文字檔案中。由於 AuthMe 是採用 MySQL 作為後台,因此我們就以 mysql_class.php 這個 MySQL 範例檔案來修改。

新建一個 local.protected.php 於 conf 資料夾中,這樣設定檔才不會被自動設定蓋掉。同時從 /conf/mysql.conf.php.example 可以看到各種應該寫的 MySQL query,我建議直接改名成 mysql.conf.php 然後直接 require 到  local.protected.php 中,這樣升級時就不會被覆蓋。同時,這邊也要搭配 AuthMe 的架構,如果你有更改過資料庫欄位的命名,也要配合調整 query。

由於要自己撰寫 authentication backend,所以將 /inc/auth/mysql.class.php 複製一份,更名為  minecraft.class.php。可以將 minecraft 更改為自己喜歡的名稱,但注意於之後都要使用同樣的 class 名稱。

class auth_minecraft extends auth_basic {
//auth_mysql 改成 auth_minecraft
...
    function checkPass($user,$pass){
    //主要驗證的程式
    ...
    return $rc;
    }
}

剩下要改寫的部份其實不多,照著官網提供的資料結構與 AuthMe 給的密碼加密方式 (sha256) 就可以了。這樣就完成最基本的驗證登入,剩下的部份也都照著改寫,應該就沒有問題了。

Reference:
https://www.dokuwiki.org/auth:mysql 
https://www.dokuwiki.org/devel:authentication_backends

UPDATED 20130329:

沒想到才過沒多久,Dokuwiki 就改變驗證後台的撰寫方式了 Orz

現在是採用 Authentication Plugin 的方式撰寫,其實跟之前的方法差不多,主要就是要寫一個外掛放在後台這樣子。

詳細資源請參考 https://www.dokuwiki.org/devel:auth_plugins 

dokuwiki 整合 minecraft 驗證系統

Wreck-It Ralph 無敵破壞王

放心,本篇沒有雷!XD

Wreck-it Ralph

這是一個壞人不想當壞人的故事。

類似的動畫之前也是有,像是 Megamind 《麥克邁:超能壞蛋》、Despicable Me 《神偷奶爸》。這兩作都是反英雄電影其道而行,選了壞人作為主角。
其實我個人很喜歡 Megamind,他裡面用了非常多經典的流行樂作為配樂,像是 AC/DC、Guns N’ Roses 之類的… 扯遠了。這兩部片都是敘述一個平日為小惡卻有大愛的「壞人」主角改邪歸正的故事,雖然角色的代換讓人耳目一新,但最後還是回歸到傳統的合家歡大家樂結局。可能最近流行把人的立場中性化吧,壞蛋其實沒那麼壞,好人也沒有那麼高尚 (黑暗騎士是經典)。

無敵破壞王的故事很簡單,一個反派角色厭倦了每天被討厭、被排擠的電玩遊戲生活,想要做些什麼來改變大家對自己的看法,不過,對電腦程式來說,這顯然是一個 runtime error: the birth of artifical intelligence! (誤)

繼續閱讀 “Wreck-It Ralph 無敵破壞王” →

Wreck-It Ralph 無敵破壞王

Starbuck

Starbuck,台灣譯為《星叭克超有種》

這是一個男人因為缺錢,使用假名 Starbuck 跑去捐精捐了 533 次,沒想到這 533 個小孩跑來打官司希望知道爸爸是哪個廢人的溫腥故事。與賣咖啡的那個完全沒有關係。

是部溫馨好笑的喜劇片,可以笑出淚來也可以感動的流出淚來的劇情。不過真的有點太誇張了 XD

說實在的,電影中描述的官司內容是還算精確,因為這種狀況如果診所把資料洩漏出去給受捐贈者,顯然是處理上有疏失。不過 Starbuck 還是做出了他自己的選擇就是了。有五百多個小孩,究竟是什麼樣的感覺呢?恐怕這要等人類移居太空站之後才會了解了吧。
(還是其實中古世紀就有人這樣了?搞不好呢。)

心得:愛是無限大的,除與五百還是無限大。

主題曲很好聽!The National 的 Runaway,還有 The French Kicks。

評價:7.5/10

 

Starbuck