/ Windows

[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

剩下的 php5 套件就看你想裝什麼,就不贅述了。然後呢,裝完之後,請記得把 php 的 Type 加上去。至於為什麼要加,我也以為裝好之後 Apache 會認得 php,結果不然,好像還是不認得的樣子。所以,請自行修改 /etc/apache2/httpd.conf 加入這兩行。

AddType application/x-httpd-php .php

打開這個檔案 /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

然後呢,php 設定檔案這個要打開(應該大家都知道吧。

cgi.fix_pathinfo=1

然後,請 enable 一些 modules,如果你還想要其他的 modules 的話,請自行啟動。

a2enmod rewrite
a2enmod include
a2enmod suexec

然後呢,關於 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

他會列出你的客體系統的一些資訊,接著,我們要把網卡的 TCP 的 Port 給他 forwarding 一下!詳細的語法是這樣的:

VBoxManage setextradata [GuestOSName] "VBoxInternal/Devices/[ADAPTER]/0/LUN#0/Config/[DescriptiveName]/[GuestPort|HostPort|Protocol]" [TCP|UDP|PortNumber]

請打開你的客體硬碟放置的位置,找 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

當然,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"/>