Feed on
Posts
Comments

Archive for the 'FreeBSD' Category

話說大家在寫 PHP 的時候,一定會很常用到 mail 這個函式,畢竟一個網站一定會有很多需要用到寄信的地方,我先給大家推薦一下 PEAR::Mail_Mime 跟 PEAR::Mail 這兩個 Pear 的套件,用起來相當不錯,支援 html 跟 UTF-8 或者是 Big5 編碼,我之前寫過一篇 [PHP] 好用的 PEAR - PHP Mail and Mail_Mime,裡面寫的還蠻詳細的,不過上次有一個問題還沒解決,就是如果用 UTF-8 編碼的標題,會顯示不出來,Gmail 收到的話就會是 no subject,然後昨天用了一個非常笨的解決方法,改成把標題使用 Big5 就可以了,解決方法如下:
Update:感謝 darkhero 提供解決方法:
如果要用 UTF-8 的標題:
$param['head_charset'] = 'utf-8';
  $hdrs = array(
                'From'    => 'appleboy.tw@gmail.com',
        [...]

Read Full Post »

今天把 FreeBSD web 改成了 apache worker 其實之前就已經這麼做了,只是今天加上 mod_fastcgi 我是參考 DarkKiller 大神 apache22 (worker) + mod_fastcgi + php5-fcgi,之前就把 Server 換成了 php5-fcgi,只不過我是搭配 Lighttpd,效能方面還不錯,可以參考這篇:[FreeBSD] Lighttpd + PHP + mod_proxy + FastCGI,那因為用 lighttpd 的外掛模組真的太少,不像 apache 支援這麼多 module,重點是還缺少了 .htaccess 這個功能,所以大大降低大家使用 lighttpd,近期內會把全部 server 換成 apache2 搭配 mod_fastcgi,那底下寫一下作法了:

Read Full Post »

之前幫學校轉移校內碩博士論文系統,學校是用 Ethesys 這一套之前是中山大學在負責維護,可是到2006年8月以後,中山大學團隊不再提供eThesys的諮詢服務,改由 漢珍數位圖書公司 負責維護eThesys 2.1,仍將提供免費原始碼下載和安裝諮詢,詳細情形請看:eThesys 2.1 原始碼取得方式,不過話說漢珍數位圖書公司,我有寄信過去,有沒得到回應,真的有點 XXXX,他也不提供1.x版升級到2.1版的 update 說明,然後在安裝過程,因為用到 MySQL,裡面還有一些問題要自己 debug,所以沒有一些基礎,可能會花比較多時間下去裝,我是用 FreeBSD 系統 7.0 Release 版本,寫了說明書給學校,不過有些比較細節的步驟好像沒有補上,因為忘記了 XD,提供下載連結:Ethesys2.1 系統建置說明書,大家可以看看。

Read Full Post »

剛剛看到 chinsan's Blog 裡面提到 關於 FreeBSD 的 security patch 是怎麼處理的?,這篇寫的非常不錯,所以順道把手上機器都全部處理了 upgrade 系統了,當然首先是要先習慣閱讀 /usr/src/UPDATING 跟 /usr/ports/UPDATING,當然這兩個其中一個是系統的安全性更新,一個是 ports tree 安全性更新。
裡面 chinsan 大大提到的 SA(Security Advisories)
http://www.freebsd.org/security/advisories.html
相關反應管道請參考 http://security.freebsd.org

這裡的 SA 其實也可以在 /usr/src/UPDATING 這裡面看到,但是網頁版似乎比較好,我提供解法,做起來也不會很困難。

Read Full Post »

我沒在玩 Ruby on Rails,但是底下這一篇我覺得寫的不錯,可以參考看看,裡面有介紹一下目前當紅 web daemon 的一些基本知識
RoR的部署方式從架構上來說分為前端和後端:
一、前端
前端的作用就是處理靜態資源,將動態請求分發到後端,有時候也帶有一些額外的功能,例如對特定URL進行rewrite和redirect,對HTTP輸出進行gzip壓縮等等。
前端目前已知的可以選擇apache, lighttpd, litespeed, nginx, haproxy
1、apache2.2
apache是全球市場佔有率最高的web server,超過全球互聯網網站50%的網站都用apache。apache2.2 + mod_proxy_balancer是一個非常流行,非常穩定的方案。
使用apache2.2唯一的問題就是apache的性能和後面那些輕量級web server相比,差太遠了。一方面在處理靜態請求方面apache要比lighttpd慢3-5倍,內存消耗和CPU消耗也高出一個數量級,另一方面 mod_proxy_balancer的分發性能也不高,比haproxy差很遠。
2、lighttpd
lighttpd 是一個輕量級高性能web server,一個在MySQL Inc工作的德國人寫的。性能很好,內存和CPU資源消耗很低,支持絕大多數apache的功能,是apache的絕好替代者。目前lighttpd已經上升到全球互聯網第四大web server,市場佔有率僅此於apache,IIS和Sun。
lighttpd唯一的問題是proxy功能不完善,因此不適合搭配mongrel來使用。lighttpd下一個版本1.5.0的proxy模塊重寫過了,將會解決這個問題。
3、litespeed
和 lighttpd差不多,商業產品,收費的。比lighttpd來說,多一個web管理界面,不用寫配置文件了。litespeed專門為單機運行的 RoR開發了一個lsapi協議,號稱性能最好,比httpd和fcgi都要好。他的proxy功能比lighttpd完善。
litespeed 的缺點我卻認為恰恰是這個lsapi。因為lsapi不是web server啟動的時候啟動固定數目的ruby進程,而是根據請求繁忙程度,動態創建和銷毀ruby進程,貌似節省資源,實則和apache2.2進程模型一樣,留下很大的黑客攻擊漏洞。只要黑客瞬時發起大量動態請求,就會讓服務器忙於創建ruby進程而導致CPU資源耗盡,失去響應。
當然,litespeed也支持httpd和fcgi,這個和lighttpd用法一樣的,到沒有這種問題。
4、nginx
一個俄國人開發的輕量級高性能web server,特點是做proxy性能很好,因此被推薦取代apache2.2的mod_proxy_balancer,來和mongrel cluster搭配。其他方面和lighttpd到差不多。
要說缺點,可能就是發展的時間比較短,至今沒有正式版本,還是beta版。沒有經過足夠網站的驗證。
5、haproxy
就是一個純粹的高性能proxy,不處理靜態資源的,所有請求統統分發到後端。
二、後端
後端就是跑ruby進程,處理RoR動態請求了。運行後端ruby進程有兩種方式:
1、fcgi方式
準確的說,不能叫做fcgi方式,其實就是啟動一個ruby進程,讓這個ruby進程監聽一個tcp/unix socket,以fcgi協議和前端通訊。所以fcgi不是指ruby進程的運行方式,而是ruby進程使用的通訊協議。這就好比你tomcat可以用 http也可以使用ajp通訊一樣,tomcat自己的運行方式都一樣的,只是通訊方式不一樣。
fcgi方式啟動ruby進程,可以使用lighttpd帶的一個spawn-fcgi工具來啟動(JavaEye目前採用這種方式)。
值得一提的是,apache2.2的mod_fastcgi的方式和上面還不太一樣,由apache動態創建fcgi進程和管理fcgi進程,這種方式和 litespeed的lsapi面臨的問題是一樣的,此外apache的mod_fastcgi自己也有很多嚴重的bug,是一種很糟糕的部署方式。這種糟糕的部署方式也敗壞了fcgi的名聲。
fastcgi只是一種協議,雖然古老,但並不是不好用,http協議也很古老。沒有必要因為 apache的mod_fastcgi的運行方式的問題而連帶把fastcgi都一同否定了。fastcgi只是一個協議(程序之間的語言),是 apache的mod_fastcgi這個模塊有問題。打個比方,有個人英語水平很差,和你用英語對話,總是結結巴巴的,那你說是英語(fastcgi) 這種語言有問題呢?還是和你對話的這個人 (mod_fastcgi)有問題呢?
2、http方式
也就是用mongrel去跑ruby進程,由於mongrel實際上已經是一個簡單的http server,所以也可以單獨作為web server使用。mongrel現在越來越受歡迎了。
用fcgi方式還是http方式,我個人覺得區別不大,關鍵還是看應用的場合,一般而言,推薦的搭配是:
lighttpd + fcgi 或者 nginx +mongrel,而apache因為性能差距,而不被推薦。
JavaEye為什麼用lighttpd + fcgi呢?原因如下:
1) lighttpd發展了好幾年了,市場佔有率也相當高,是一個經過實踐檢驗的server,它的文檔也很全;而nginx還沒有經過足夠的市場檢驗,文檔也很缺乏
2) JavaEye的ruby進程和web server在一台機器上面跑,通過unix socket使用fcgi協議通訊可以避免tcp的網絡開銷,其通訊速度比使用tcp socket使用http協議通訊要快一些。
什麼場合使用haproxy?
大規模部署,例如你的RoR應用到十幾台服務器上面去,你用haproxy會更好,可以方便的添加刪除應用服務器節點,proxy性能更好。
資料來源:
Csdn - http://news.csdn.net/n/20071229/112274.html

Read Full Post »

今天早上伺服器 lighttpd 沒有跑起來,發現是因為沒有寫入 lighttpd.access.log 的權限,所以造成不能啟動
2008-07-04 08:37:15: (mod_accesslog.c.535) opening access-log failed: Permission denied /var/log/lighttpd/lighttpd.access.log
目前的解法大概就是不能去改 /var/log 這個資料夾權限,所以我在 /var/log 底下新增 lighttpd 這個資料夾

Read Full Post »

今天轉換跑道了,最近玩 Apache 玩的很不順,因為只要線上人數一多,就會吃很多記憶體,導致必須重新開 Apache,所以今天來玩看看 lighttpd試試看,看看結果如何,其實轉換到 lighttpd 需要注意很多事情,那就是 Lighttpd 並不支援 .htaccess 檔案,所以 mode_rewrite 功能要設定到 Lighttpd.conf 裡面,然後也去找看看 Lighttpd 的 virtual host 的寫法,然後還有一點就是 wordpress 的 Permalinks 的問題,算是今天都解決了,底下來寫一下作法:

Read Full Post »

最近在玩 FreeBSD 伺服器的加強效能,其實我自己試了很多套:eAccelerator,Pear APC,跟 Zend Optimizer,這三套都是可以加速php的速度,當你的 apache 效能遇到瓶頸,就可以選用這三個來改善網頁瀏覽速度,不過應該沒有人三個都用吧,畢竟三個東西,感覺都是cache幫助,所以達成我們所想要的要求,有時候並不是全部安裝就是代表你的伺服器一定會超快,因為我的經驗是三個不能同時裝,只要裝了兩個都會出問題,這是我這幾天測試的結果,只要裝了Pear APC,就不能裝Zend Optimizer跟eAccelerator了,因為我的 httpd 的 log 會噴出底下訊息:
signal Segmentation fault (11) 跟 pid 15879 (httpd), uid 80: exited on signal 11

Read Full Post »

最近在玩這套 Web 的 Load Balance 軟體,其實這是之前我寫的一篇:[筆記] FreeBSD 一張網卡多重 ip 實現 Round Robin DNS Load Balancing,有網友留言給我說可以玩看看 HAProxy,這樣的確改善了很多效能,而且也是正確達到 load balance 的效果,不然用 DNS Robin DNS Load Balancing 的方式的卻沒辦法做的很好,關於 HAProxy 在 google 了一下,好像國內很少人在寫這方面的教學,我自己來寫一下筆記好了,其實我還不是對設定很熟悉,只是大概知道他的原理罷了,底下我們來看看官網的一張圖

Read Full Post »

最近在使用 FreeBSD 架站,apache + MySQL + PHP,但是最近常常會吐出來 swap 不夠的情形,然後系統就會吐出下面訊息
Jun 19 20:59:57 backup kernel: swap_pager_getswapspace(7): failed
Jun 19 20:59:57 backup kernel: swap_pager_getswapspace(16): failed
Jun 19 20:59:57 backup kernel: swap_pager_getswapspace(2): failed
Jun 19 20:59:57 backup kernel: swap_pager_getswapspace(5): failed
目前上網看到的解決方法,都是增加 swap 的容量,那底下是在 FreeBSD 下面得作法:

Read Full Post »

Next »