Apache + mod_fastcgi + php-fpm 設定
前言
這篇是有人叫我分享的 , 順便測一下 php-fpm 和 Apache 搭配起來的效能及穩定度 , 由於 php-fpm 是自帶的 FastCGI Process Manager , 所以和原本的 php fastcgi 有所不同 , php-fpm 若要搭配 Apache 只能以 mod_fastcgi 來運作 , 原本 Apache 有開發 mod_fcgid , 但 mod_fcgid 本身算是個 FastCGI Process Manager , 只能執行本地端 FastCGI , 而 php-fpm 可以用 Unix Socket 或 TCP 模式讓任何具備執行外部 FastCGI 程序的 WebServer 連接 , 因此 lighttpd 或 Ngix 等都可以 , 唯獨世上次爛的 Apache 要外掛 mod_fastcgi , 最爛的當然是 IIS 了 , 哈 …
運作環境
- CentOS 5.5 64bit 及內建的 Apache 2.2 套件
- PHP 5.3.3 , 此版本有內建 php-fpm 了 , 過去的版本皆須 patch 才有 php-fpm
- 硬體 : Core I5 4 核心的 , RAM 2GB
PHP FPM ?
很久沒有上官方網站看文件 , 今天晚上莫名其妙從官方網站看到一個叫 FPM 的東西
http://www.php.net/manual/en/install.fpm.php
按照上面的說法 , 不就是 FastCGI Process Manager 嗎 ?
怪了 , 原本 PHP 不就已經有支援 FastCGI 了 ?
仔細給他看一看 , 從 Google 上找一下 FPM 關鍵字後 …. 媽的 … 我的天 , 原來 FPM 這東西不得鳥 , 下面才是真正的 FPM 官方網站
原來 FPM 這東西可以解決 PHP FastCGI 甚至 mod_php 權限控管的不足
例如 , 可以 setuid , chroot , 這對於在一台主機中有多個 VirtualHost 中的權限控管非常有幫助
而且 FastCGI 跑的效能及記憶體用量都比 Apache + mod_php 好很多 , 現在 PHP 5.3.3 後會內建 FPM 這個功能
其他的特點也不錯 , 如自動控制行程數量 , 這點 lighttpd 就做的挺爛
想試的人可以去試試看了 … 因為今天 PHP 5.3.3 已經正式出來了
我很納悶…怎麼一堆 PHP 程式設計師不知道要怎麼防 SQL Injection
從 5 月份到 6 月份這段期間面試了好多個 PHP 程式設計師 , 包括也曾開職缺面試資訊主管
我都會問一個問題 , SQL Injection 怎麼防 ?
我說真的 , 大概面試了 10 來位 , 沒有一個人能夠脫口而出 , 不知道 SQL Injection 的程式設計師不會就算了 , 知道的人居然沒有一個人知道 PHP 原本就有功能可以過濾掉特殊字元 , 甚至還會回答用 str_replace 方法來過濾 , 所以我很想給看到這篇的人知道
如果你是用 mysql function , 那就是用 mysql_real_escape_string 去過濾
如果你是用 PDO , 就是用 bind value 作法
例如
1 2 3 4 5 | $sql = "SELECT * FROM users WHERE user_id=?"; $sth = $pdo->prepare($sql); $sth->execute( array($user_id) ); |
其實我是已經受夠了 !! 不知道是台灣的書籍太爛 , 還是學校裡面老師教的太爛 , 這種最簡單的防止方式居然都沒人知道 ?
HTML5 + JavaScript 做的 VNC Viewer == Guacamole
http://guacamole.sourceforge.net/
我的媽啊
HTML5 已經可以做到這樣了
用的技術就是 html5 + javascipt 而已 , 就可以做到 VNC 遠端桌面控制了
想必是有用到 WebSocket 的功能
smbftpd 安裝在 CentOS 64bit
最近為了想讓同事們可以用 ftp 上傳網站的某些檔案到特定目錄 , 但又不想讓它們碰到敏感的目錄 , 本打算用 vsftp 開啟 chroot 就好 , 但卻發現用了 chroot 之後 , 沒辦法用 ln -s 方式將家目錄以外的目錄讓他們使用
當然這有解法 , 可以用 mount –bind 的方式讓 chroot 下的 root 目錄可以看見家目錄以外的目錄 , 不過這樣做比較累人 , 每多一個使用者我可能要多設定一次
於是我想到了有 smbftpd 這套 , 這套 ftp server 可以用類似 Samba 方式來設定共享目錄 , 但以前安裝過 , 竟然現在不能安裝了
後來查了一下一下原因 , 原來自行編譯時不會去找相關 64bit 目錄 , 因為我的 OS 是 CentOS 64bit 而且要編譯支援 mysql
於是我用下面一行來 configure 就可以了
LDFLAGS="-L/usr/lib64/mysql -I/usr/include/mysql" ./configure --with-mysql --with-iconv --prefix=/usr/local |
然後就可以照官方網站的安裝及設定方式去設定了 !
(轉貼)Red Hat Enterprise Linux 6 測試版開放下載
從 ITMHOME 看的介紹
http://www.ithome.com.tw/itadm/article.php?c=60827
目前的 RHEL 5 真的套件都舊的很 , 有很多限制
例如 Kernal 版本太舊 , 很想用 TProxy 來做 haproxy http transprant 就要自己重編 kernal
php 5.1 , mysql 5.0 等都太舊了
安裝時硬碟分割只能選 ext3 也是 , 現在硬碟大的很 , RHEL6 支援 ext4 後就可以分割單一 partion 超過 2T 硬碟了
實作多日 , 一個簡單的 Comet Chat Demo
網址 : http://testcode.pigo.idv.tw/NetServ/CxClient/demo/simplechat/
非常簡單的 chat , 沒有用到任何資料庫及檔案讀寫 , 完全透過 Comet Exchange Server 作資料交換 , 完全即時聊天
Script Language 採用 PHP , Comet Exchange Server 採用 C# 開發
改天我弄好一點會放出完整的 Source Code
原先我是要先做 Comet Http Server 的 , 但我現在先做了 Comet Exchange Server (簡稱 CxServer)
CxServer 主要構想是可以讓 HTTP Server CGI 之間可以做資料交換 , CGI 部分任何語言都可以開發 , 如 php , asp.net 等 , 然後 CGI 和 Browser 在不斷線的情況下接收其它 CGI 傳遞的資料並且將資料再傳遞給 Browser , 在應用方面就可以玩很多即時性的 , 如即時聊天 , 即時 web game , 即時股票看盤 , 即時監控系統等等都可以利用這種資料交換特性而實作出來
而在系統相容方面 , 由於採用 C# 開發 , 所以只要有 .NET 環境即可 , 我目前的 DEMO 連同 CxServer 都是跑在 Linux OpenVZ 下的虛擬 CentOS 及 mono 的平台 , 所以沒有所謂移植性問題 , 唯一的相容性問題就是 , CxServer 的封包協定中由於有有些欄位是 Int16 或 Int32 , 這在編碼成封包的時候會按照硬體(CPU)而有所謂 little endian 或 big endlian , 如果 CxServer 及 CxClient 是不同類型的 CPU 可能會發生問題而已
當然後續我會繼續實驗封裝好通訊協定及 API , 目前只先開發 PHP 版的 CxClient API , 想說再過一些日子我完全實作好封包協定好 , 才會開始進行其它語言的 CxClient API
最近想自己實作的 Comet 架構
甚麼是 Comet ?
自從 Facebook , Plurk 流行起來 , Comet 技術才被受到重視 , 之前曾經搜尋了 Google 上各種有關 Comet 的資訊 , 其實早在 5 年前(西元2005)我就實作過了 , 當時是在一家叫互動王視訊科技的公司做了個股票看盤系統 , 就是類似 Comet 的技術 , 我在該公司任職前 , 已經有了一個股票看盤系統 , 也是類似 Comet , 我去了是把原本前人寫的 Perl 版寫的完全改成 PHP 版的 , 因此 Google 上搜尋到有關 Comet 的 WIKI 說 2006 出現了第一個 Comet 應用 (http://en.wikipedia.org/wiki/Comet_%28programming%29#First_Comet_applications) , 原來 , 這東西我及互動王的前人早就做過了 , 哈 !
但可能有人對 Comet 還不太了解是甚麼 , 其實 Comet 並不是一種制式的協定 , 這是一種概念 , 就如同 AJAX 也是種概念 , Comet 主要用意是要讓 Browser 得到即時的資訊並且做到雙向互動 , 但我們都知道 , Web Browser 是要 Client 端主動要求某個網址 , Web Server 才會送資料來 , 即便是 AJAX 概念也是如此 , 那麼如何讓 Client 端不斷接收即時資料呢 ?
最新回應