實驗七網路伺服器Boa實驗

2022-12-01 09:51:01 字數 4161 閱讀 7721

1 實驗目的

學會嵌入式web 伺服器boa 的移植;

學會使用boa 伺服器。

2 實驗裝置

硬體:edukit-iv 嵌入式教學實驗平台、mini2410 核心子板、pc 機;

軟體:windows 2000/nt/xp、ubuntu 8.04、其他嵌入式軟體包。

3 實驗內容

**boa 伺服器程式的原始碼,完成boa 程式的移植;

修改boa 的配置,使其能夠支援cgi 程式的執行;

執行和測試boa 伺服器。

4 實驗原理

隨著 internet 技術的興起,在嵌入式裝置的管理與互動中,基於web 方式的應用成為目前的主流,這種程式結構也就是大家非常熟悉的b/s 結構,即在嵌入式裝置上執行乙個支援指令碼或cgi 功能的web 伺服器,能夠生成動態頁面,在使用者端只需要通過web 瀏覽器就可以對嵌入式裝置進行管理和監控,非常方便實用。本節主要介紹這種應用的開發和移植工作。使用者首先需要在嵌入式裝置上成功移植支援指令碼或cgi 功能的web 伺服器,然後才能進行應用程式的開發。

1.嵌入式web 伺服器boa 的特點

boa 是一款單任務的http 伺服器,與其他傳統的web 伺服器不同的是當有連線請求到來時,它並不為每個連線單獨建立程序,也不通過複製自身程序來處理多連線,而是通過建立http 請求列表來處理多路http 連線請求,同時它只為cgi 程式建立新的程序,這樣就在最大程度上節省了系統資源,這對嵌入式系統來說至關重要。同時它還具有自動生成目錄、自動解壓檔案等功能,因此,boa 具有很高的http 請求處理速度和效率,在嵌入式系統中具有很高的應用價值。

2.boa 的功能實現

嵌入式 web 伺服器boa 和普通web 伺服器一樣,能夠完成接收客戶端請求、分析請求、響應請求、向客戶端返回請求結果等任務。它的工作過程主要包括:

完成 web 伺服器的初始化工作,如建立環境變數、建立tcp 套接字、繫結埠、開始偵聽、進入迴圈結構,以及等待接收客戶瀏覽器的連線請求;

當有客戶端連線請求時,web 伺服器負責接收客戶端請求,並儲存相關請求資訊;

在接收到客戶端的連線請求之後,分析客戶端請求,解析出請求的方法、url 目標、可選的查詢資訊及表單資訊,同時根據請求做出相應的處理;

web 伺服器完成相應處理後,向客戶端瀏覽器傳送響應資訊,關閉與客戶機的tcp 連線。

嵌入式 web 伺服器boa 根據請求方法的不同,做出不同的響應。如果請求方法為head,則直接向瀏覽器返回響應首部;如果請求方法為get,則在返回響應首部的同時,將客戶端請求的url目標檔案從伺服器上讀出,並且傳送給客戶端瀏覽器;如果請求方法為post,則將客戶傳送過來的表單資訊傳送給相應的cgi 程式,作為cgi 的引數來執行cgi 程式,並將執行結果傳送給客戶端瀏覽器。boa 的功能實現也是通過建立連線、繫結埠、進行偵聽、請求處理等來實現的。

3.嵌入式web 伺服器移植

由於嵌入式裝置資源一般都比較有限,並且也不需要能同時處理很多使用者的請求,因此不會使

用 linux 下最常用的如apache 等伺服器,而需要使用一些專門為嵌入式裝置設計的web 伺服器,

這些 web 伺服器在存貯空間和執行時所占有的記憶體空間上都會非常適合於嵌入式應用場合。典型的

嵌入式 web 伺服器有 boa ( )和 thttpd

(等,它們和apache 等高效能的web 伺服器主要的區別在於它們一般是單程序伺服器,只有在完成乙個使用者請求後才能響應另乙個使用者的請求,而無法併發響應,但這在嵌入式裝置的應用場合裡已經足夠了。

我們介紹比較常用的boa 伺服器的移植。

boa 是乙個非常小巧的web 伺服器,可執行**只有約60kb。它是乙個單任務web 伺服器,只能依次完成使用者的請求,而不會fork 出新的程序來處理併發連線請求。但boa 支援cgi,能夠為 cgi 程式fork 出乙個程序來執行。

boa 的設計目標是速度和安全,在其站點公布的效能測試中,boa 的效能要好於apache 伺服器。

5 實驗步驟

下面介紹如何進行boa 實驗(工作目錄$workdir 為:usr/local/src/edukit-iv/,$******dir為:$workdir/mini2410/******):

1)設定環境變數(工作目錄$workdir 為:/usr/local/src/edukit-iv/,impledir 為:$workdir/mini2410/******):

$ source /usr/local/src/edukit-iv/mini2410/set_env_

$ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/

2)進入到madplay **器實驗目錄,並解壓相應工具包及庫:

$ cd $******dir/11.1-boa

$ tar zxvf

3)配置boa 生成makefile:

$ cd boa-0.94.13/src

$ ./configure --host=arm-linux --target=arm-linux

4)修改原始碼檔案:

修改$******dir/11.1-boa/boa-0.94.13/src/makefile:

修改:cc = gcc

cpp = gcc -e

為:cc = arm-linux-gcc

cpp = arm-linux-gcc –e

修改$******dir/11.1-boa/boa-0.94.13/src/

修改:#define timezone_offset(foo) foo##->tm_gmtoff

為:#define timezone_offset(foo) foo->tm_gmtoff

修改$******dir/11.1-boa/boa-0.94.13/src/

修改:if (setuid(0) != -1)

為:// if (setuid(0) != -1)

die("icky linux kernel bug!");

5)修改完原始碼檔案後輸入命令開始編譯原始碼:

$ make

$ arm-linux-strip boa

6)修改boa 配置檔案$******dir/11.1-boa/boa-0.94.13/

修改:user nobody

group nogroup

為:user root

group root

修改:#servername

為:servername

修改:documentroot

為:documentroot /www

修改:scriptalias /cgi-bin/ /usr/lib/cgi-bin/

為:scriptalias /cgi-bin/ /www/cgi-bin/

7)準備boa 實驗必備原始碼並拷貝到$nfsdir 目錄(實驗中將通過ftp 服務載入到實驗平台執行的 linux 上)。

ubuntu linux 終端:

$ rm -fr $nfsdir/*

$ cd $******dir/11.1-boa

$ cp boa-0.94.13/ $nfsdir

$ cp boa-0.94.13/src/boa $nfsdir

$ cp -** www $nfsdir

8)準備好edukit-iv + mini2410-iv 平台,注意mini2410-iv 板上的跳線為閉合狀態,且確保mini2410-iv 板載linux 映像為實驗映像(請參照下冊開篇:實驗環境構建),連線好交叉串列埠線於板載com2 和pc 端串列埠,連線好交叉網線與板載主機板網絡卡介面和pc 端網口。

9)在終端執行以下命令開啟minicom 串列埠終端:

$ sudo minicom

10)給實驗平台加電,進入linux 系統,可以看到minicom 終端的啟動列印資訊。

11)在minicom 終端輸入命令建立必備資料夾,並拷貝編譯好的boa 檔案到根檔案系統下:

# mount -t nfs 192.192.192.190:/home/example/nfs /tmp -o nolock

# mkdir -p /etc/boa

# cp /tmp/ /etc/boa/

# mkdir -p /var/log/boa

# mkdir -p /www/cgi-bin

# cp -a /tmp/www/* /www

12)執行測試boa 網路伺服器:

# cd /tmp

# ./boa

實驗二網路服務

深圳大學實驗報告 實驗課程名稱 計算機網路 實驗專案名稱 網路服務 學院 計算機與軟體學院專業 電腦科學與技術 報告人學號 班級 1 同組人無 指導教師王小民 實驗時間 2015年4月提交時間 2015年4月 宣告 本次實驗內容由報告人和同組人獨立完成,所有涉及到他人的工作均已說明。報告人和同組人均...

網路伺服器機房管理制度

第一條 網路伺服器機房是公司內區域網的匯接中心,是整個公司網順利執行的重要保障,又是公司資產重地。為了保證伺服器機房裝置與資訊的安全,保障機房有良好的執行環境和工作環境,特制定本制度。第二條 出入機房要隨手關門,機房鑰匙由指定的專人保管,不能隨意轉借,丟失要宣告。第三條 要有安全防範意識。管理人員要...

linux網路伺服器配置實際操作總結

2 當設定網域名稱bind時,配置完檔案以後要重啟。如果要重啟named服務,用命令service named restart是不行的,該命令並不能重啟named服務,採用圖形介面也是如此。要採用rndc reload命令 rndc是remote named daemon controls 命令 要...