oa是一個小型的web伺服器,可以用於多種平台,在嵌入式中比較常見。
boa的官方網站為www.boa.org,可以在上面下載最新版本的boa:boa-0.94.13.tar.gz (不過這個“最新”已經是N年前的事情了)。
下面是在Fedora系統中安裝、測試過程,以後不再重複強調Fedora系統,也不區分Linux、Fedora。
1、解壓
$ tar zxvf boa-0.94.13.tar.gz
2、進入boa的原始碼目錄
$ cd boa-0.94.13/src
3、配置
$ ./configure
4、編譯
$ make
注意,編譯會報錯,錯誤資訊如下:
util.c:100:1: 錯誤:毗連“t”和“->”不能給出一個有效預先處理標識符
make: *** [util.o] 錯誤 1(中文版本)
util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token
make:*** [util.o] Error 1(English version)
修改方法如下:
將本目錄中compat.h(boa-0.94.13/src/compat.h)檔案的
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
改為
#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
即去掉“##”。
5、再次編譯,通過。成功後,會在目前的目錄(src目錄)下會產生一個可執行檔boa,我們可以將它複製到/usr/bin或/usr/local/bin目錄下(當然,也可以是其它的PATH),按照我的習慣,放到/usr/local/bin目錄下。
6、配置boa
我們需要修改boa的設定檔boa.conf,並且將它放置到一個特定的目錄。我們把boa-0.94.13目錄下的boa.conf檔案複製到/etc/boa目錄(boa目錄需要我們自己建立)中。為什麼呢?我們看一下./src/defines.h原始碼就知道了,裡面的一個宏,定義了伺服器的根目錄,如下:
/***** Change this, or use -c on the command line to specify it *****/
#ifndef SERVER_ROOT
#define SERVER_ROOT "/etc/boa"
#endif
它也提示了我們可以在運行命令時使用-c指定這個根目錄。不過我們採用預設的方式。
另外,也需要進行以下修改
Group nogroup 改為 Group 0
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 改為 ScriptAlias /cgi-bin/ /var/www/cgi-bin/
因為系統預設是沒有nogroup組的(0表示root組,可以使用id命令查看,見下),但存在nobody使用者,因此User一項可以不用修改。ScriptAlias一項指定了cgi程式的目錄,這裡我們設定為/var/www/cgi-bin,就是說以後的各種cgi程式就要放在這個目錄了。
下面是從網上找到的配置說明,其實就是boa.conf的中文翻譯而已
Port:boa伺服器監聽的連接埠,預設的連接埠是80。如果連接埠小於1024,則必須是 root使用者啟動伺服器。
Listen:綁定的ip地址。不使用這個參數時,將綁定所有的地址。
User:串連到伺服器的用戶端的身份,可以是使用者名稱或UID。
Group:串連到伺服器的用戶端的組,可以是組名或GID。
ServerAdmin:伺服器出故障時要通知的郵箱地址。
ErrorLog:指定錯誤記錄檔檔案。如果路徑沒有以"/"開始,則相對於ServerRoot路徑。沒有配置時默 認的檔案是/dev/stderr。若不想記錄日誌,指定檔案為/dev/null。
AccessLog:設定存取記錄檔,與ErrorLog類似。
UseLocaltime:設定使用本地時間,使用UTC時注釋這個參數。這個參數沒有值。
VerboseCGILogs:在錯誤記錄檔檔案中記錄CGI啟動和停止時間,若不記錄,注釋這個參數。這個參數沒有值。
ServerName:指定伺服器的名稱,當用戶端使用gethostname + gethostbyname時返回給用戶端。
VirtualHost:虛擬機器主機開關。使用此參數,則會在DocumentRoot設定的
目錄添加一個ip地址作為新的DocumentRoot來
處理用戶端的請求。如DocumentRoot設定為/var/www,則http://localhost/轉換 成/var/www/127.0.0.1/,若注釋此參數,則為/var/www/。
DocumentRoot:HTML檔案的根目錄(也就是網站的目錄)。
UserDir:指定使用者目錄。
DirectoryIndex:指定預組建目錄資訊的檔案,注釋此變數將使用DirectoryMaker變數。這個變數也就是設定預設首頁的檔案名稱。
DirectoryMaker:指定用於組建目錄的程式,注釋此變數將不允許列目錄。
DirectoryCache:當DirectoryIndex檔案不存在,而DirecotryMaker又被注釋掉時,將列出這個參數指定目錄給用戶端。
KeepAliveMax:每個串連允許的請求數量。如果將此值設為" 0 ",將不限制請求的數目。
KeepAliveTimeOut:在關閉持久串連前等待下一個請求的秒數。(秒)。
MimeTypes:設定包含mimetypes資訊的檔案,一般是/etc/mime.types。
DefaultType:預設的mimetype類型,一般是text/html。
CGIPath:相當於給CGI程式使用的$PATH變數。
SinglePostLimit:一次POST允許最大的位元組數,預設是1MB。
AddType: 增加MimeType沒有指定的類型,例: AddType type extension [extension ...]。要使用cgi,必須添加cgi類型:AddType application/x-httpd-cgi cgi
Redirect:重新導向檔案。
Aliases:指定路徑的別名。
ScriptAlias:指定指令碼路徑的虛擬路徑。
在啟動boa之前,還需要確保Linux中其它的Web伺服器已經關閉。比如httpd這個服務。——在測試中,Linux的httpd是沒有開啟的。好了,一切就緒,就可以啟動boa了,直接在命令列中輸入boa就行了,當然,前面我們已經將boa複製到/usr/local/bin目錄。
啟動boa後,可以在瀏覽器中輸入Linux的IP地址(可以通過ifconfig命令查看)。此時,瀏覽器中顯示的是Fedora Project的Start Page(大家可以查看一下/var/www目錄下的index.html)。
(注意,在實際測試中,使用普通使用者並不能啟動boa,須用root使用者,原因未明。)
# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
# ps aux | grep boa
nobody 2927 0.0 0.1 1924 652 pts/1 S 09:16 0:00 boa
root 2931 0.0 0.1 5504 688 pts/1 S+ 09:17 0:00 grep boa
測試中,我們將html網頁放到/var/www/html目錄中,將cgi程式放到/var/www/cgi-bin目錄下。這樣,如果我們要訪問一個自己製作的網頁(hello.html),可以在瀏覽器中輸入http://192.168.184.100/html/hello.html,這裡的IP地址就是Linux的IP地址。