Nginx + PHP-FPM on FreeBSD

閒著沒事幹就嘗試把 Apache 2.2 搭配 PHP-FPM 的架構轉移至 Nginx。

根據維基百科,Nginx 是一個高效率、輕量的 HTTP 伺服器,在靜態檔案的效能相當好,不過若是有處理動態網頁 (像是 PHP) 的需求,則一般透過 FastCGI 的模式執行。先前我們已經建置了 Apache + mod_fcgid 搭配 PHP-FPM 的架構,因此在這次的轉移中我們只要把 Apache 換成 Nginx 即可。

首先就是安裝 Nginx。

安裝 PHP-FPM 與設定的部份就不在詳述了,可以找先前的文章參考。

繼續閱讀 “Nginx + PHP-FPM on FreeBSD”

Nginx + PHP-FPM on FreeBSD

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

MySQL 預設採用 unicode 編碼

這邊針對 MySQL 的 unicode 設定作一些紀錄。

現在大部分的 linux distro 裝完 MySQL 之後預設都會採用 unicode 連線,但是在新增資料庫的連線校對部份依然是採用預設的 latin1 編碼,如果這時候又把 unicode 的中文存進去就會出現亂碼,日後也不能用 phpmyadmin 直接匯出(要到command line下才行) 。

首先先開啟設定檔:

/etc/mysql/my.cnf

找到 [client] 區塊,加入

default-character-set=utf8

預設資料庫採用編碼部份,找到 [mysqld] 區塊,加入

character-set-server=utf8
collation-server=utf8_general_ci

就可以了。

MySQL 預設採用 unicode 編碼

FreeBSD 8.0 Release 升級

這邊是個人的紀錄。

首先,根據網路上四處尋訪找來的資料顯示,要先把 standard-supfile 中的版本更新到 8.0。

到 /usr/share/example 下面的 standard-supfile ,將其中 RELENG_7_2 更改為 RELENG_8_0 ,然後使用以下指令下載新的程式碼回來。

如果有特別需求的話,可以在這裡自訂一下 kernel ,參考資料。 接下來就是開始編譯。

建造世界! *無誤*

如果一切順利的話,順利編譯完成之後就可以重開機進入 single user mode 了。

但是…我遇到了相當腦包的問題…就是 buildworld 一直過不了,每當要編譯某個程式的時候就會噴 error stop 了Q_Q
經過仔細的研究,發現只是 /etc/make.conf 不小心多了一行空行!*崩潰*
把他去掉之後就可以編譯了…

以下是我出錯的的 make.conf 內容…

那個「\」表示換行,然而我在第一與第二行中間加了空白導致他抓錯然後編譯失敗…大腦包…
總之成功之後,重開機進入 single user 模式。接下來使用以下的指令:

fsck 先檢查磁碟,接下來把檔案磁區掛載起來,然後開 swap。接下來用 mergemaster -p 創造出一個臨時的環境,然後把程式裝起來。最後再用 mergemaster -Fi 處理設定檔。參數-F表只更新與之前不同的檔案、-i表自動安裝不存在於 /etc 下面的檔案。

這樣就大功告成了!不過話說回來,比起今天在終端機室遇到的大大小小問題,這都只是小 case 。(笑)

FreeBSD 8.0 Release 升級