[Ububtu note.] 關於 Ubuntu, apache, php5, mod_fcgid 與 VirtualBox 筆記
首先是 Ubuntu,要安裝 Apache with MPM-worker,PHP5 跑 fcgid,MySQL 等等。當然這一切都可以使用 apt-get 來安裝,不過,因為特別是要安裝 mpm-worker 所以,安裝的順序上就筆記一下。我是懶人,所以都用 Synaptic 來裝,要用 apt-get 也可以。
- apache2.2-bin
- apache2.2-common
- apache2-mpm-worker
- libapache2-mod-fcgid
- php5-cli
- php5-cgi
- php5-common
接著裝這些。為什麼要這樣?因為有些東西,用 Synaptic 安裝時,他會跟你說要把 apache2-mpm-worker 移除,改裝 apache2-mpm-prefork,所以這些等到上述裝完之後再裝。
- apache2
- php5
- php5-gd
- php5-curl
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps這樣就可以了,然後再來是修改 fcgid 的部份。
打開這個檔案 /etc/apache2/mods-available/fcgid.conf,這個部分其實可以參考 apache 官方的設定。
<IfModule mod_fcgid.c> AddHandler fcgid-script .php .fcgi FcgidIPCDir /var/lib/apache2/fcgid/sock FcgidConnectTimeout 20 FcgidWrapper /usr/bin/php5-cgi .php </IfModule>這樣就可以了,然後,記得將 www 的目錄(或是其他你有 VirtualHost 的目錄)加上 +ExecCGI,不然不會動喔!
然後呢,php 設定檔案這個要打開。
cgi.fix_pathinfo=1(應該大家都知道吧)
然後,請 enable 一些 modules,如果你還想要其他的 modules 的話,請自行啟動。
a2enmod rewrite a2enmod include a2enmod suexec a2enmod fcgid然後就可以重新啟動 Apache 了!
然後呢,關於 VirtualBox,通常我們會遇到一個問題,不管是主體(Windows)還是客體(Linux)系統,或是主體(Linux)與客體(Windows)系統,我們會想要讓客體去存取主體的 Apache Server,或是主體去存取客體的 Apache Server。
大家都會說,網路卡用橋接(Bridge)模式就好了。
最簡單的方法就是,新增一張僅限本機(Host-only)的網卡,這樣在客體系統就會有張網卡,有個 IP 然後只要連上那個 IP 就可以直接連入客體系統內了!
但是呢,如果每次那個 IP 都不一樣(或是不小心那個 IP 換了)那不就囧掉了嗎!沒關係,VBoxManager 有個功能,就是可以把主客體之間的 TCP Port 做映射的動作。我以 Windows 主體系統為例子,請打開命令提示字元,切換到你的 VitrualBox 安裝目錄下,執行以下指令。
VBoxManager getextradata "Ubuntu 10.04" enumerate其中 "Ubuntu 10.04" 就是你的客體系統名稱,請不要照抄,謝謝。
他會列出你的客體系統的一些資訊,接著,我們要把網卡的 TCP 的 Port 給他 forwarding 一下!詳細的語法是這樣的:
VBoxManage setextradata [GuestOSName] "VBoxInternal/Devices/[ADAPTER]/0/LUN#0/Config/[DescriptiveName]/[GuestPort|HostPort|Protocol]" [TCP|UDP|PortNumber]裡面有 ADAPTER 跟 DescriptiveName 要去哪裡找呢?
請打開你的客體硬碟放置的位置,找 VBox.log 這個檔案。以 Windows 為例子,預設是放在 .VirtualBox\Machines\Ubuntu 10.04\Logs\VBox.log,同樣的,"Ubuntu 10.04" 就是你的客體系統名稱,請不要照抄,謝謝。
開啟那個 VBox.log 裡面就可以找到網卡的 ADAPTER 資訊,一般來說,有人會填上 e1000,有的人會填 pcnet,所以請自己查看一下,確定你的 ADAPTER 是哪個名字!至於 DescriptiveName,請填上 http,如果你要使用 ssh 就填上 ssh 吧。
所以完整的指令是(以 http 與 e1000 為例子):
VBoxManage setextradata "Ubuntu 10.04" "VBoxInternal/Devices/e1000/0/LUN#0/Config/http/Protocol" TCP VBoxManage setextradata "Ubuntu 10.04" "VBoxInternal/Devices/e1000/0/LUN#0/Config/http/HostPort" 8080 VBoxManage setextradata "Ubuntu 10.04" "VBoxInternal/Devices/e1000/0/LUN#0/Config/http/GuestPort" 80這樣一來,你在主體系統使用瀏覽器,瀏覽 http://localhost:8080/,就會連上客體系統的 80 埠囉!
當然,ssh 的設定也是一樣的。
如果你發現有錯誤,請打開客體硬碟放置位置中的 .xml 檔案,以這個例子是:
.VirtualBox\Machines\Ubuntu 10.04\Ubuntu 10.04.xml
然後把你增加的 ExtraDataItem 項目刪除,以上述為例:
<ExtraDataItem name="VBoxInternal/Devices/e1000/0/LUN#0/Config/http/GuestPort" value="80"/> <ExtraDataItem name="VBoxInternal/Devices/e1000/0/LUN#0/Config/http/HostPort" value="8080"/> <ExtraDataItem name="VBoxInternal/Devices/e1000/0/LUN#0/Config/http/Protocol" value="TCP"/>刪除之後,在重新啟動 VirtualBox 應該就會正常了!
就降