1. 程式人生 > >嵌入式web伺服器移植

嵌入式web伺服器移植

文章目錄

嵌入式web伺服器移植

ubuntu 16.04.4

arm-linux-gnueabihf-gcc 4.7.2

arm linux 3.10

嵌入式web伺服器,是web伺服器當中的一種,是基於嵌入式系統而實現的web伺服器。指的是在嵌入式系統上實現的一個web伺服器,可以通過ie等去訪問,對硬體要求稍微低一點。

嵌入式WEB伺服器常見的有:Lighttpd,Shttpd,Thttpd,Boa,Mini_httpd,Appweb,Goahead

1.移植環境搭建

新建工作目錄

mkdir -p ~/Develop/webserver

如果移植Lighttpd,就在/home/wyy/Develop/webserver目錄下新建一個Lighttpd目錄

mkdir -p ~/Develop/webserver/lighttpd

2.Lighttpd移植

LibHttpd是一個開源輕量級嵌入式Web server,是提供一個專門針對高效能網站,安全、快速、相容性好並且靈活的web server環境。具有非常低的記憶體開銷,cpu佔用率低,效能好,以及豐富的模組等特點。

lighttpd 適合靜態資源類的服務,比如圖片、資原始檔、靜態HTML等等的應用,效能應該比較好,同時也適合簡單的CGI應用的場合,lighttpd可以很方便的通過fastcgi支援php

官網:http://www.lighttpd.net/

文件:http://redmine.lighttpd.net/projects/lighttpd/wiki

2.1 下載原始碼並解壓

mkdir -p ~/Develop/webserver/lighttpd
cd ~/Develop/webserver/lighttpd
wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.51.tar.gz
tar xvf lighttpd-1.4.51.tar.gz

2.2 編譯配置

http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs#Documentation-Overview

cd ~/Develop/webserver/lighttpd/lighttpd-1.4.51

./configure --prefix=/home/wyy/Develop/webserver/lighttpd/web --host=arm-linux-gnueabihf --build=i686-pc-linux --disable-FEATURE --enable-shared --disable-static --disable-lfs --disable-ipv6 --without-PACKAGE --without-valgrind --without-openssl --without-kerberos5 --without-pcre --without-zlib --without-bzip2 --without-lua

2.3 編譯安裝

make -j4
make install

2.4 Lighttpd配置

安裝完成後會在安裝目錄下生成3個資料夾lib,sbin,share,需要手動再建立一些目錄

cd ~Develop/webserver/lighttpd/web
mkdir -p cache cgi-bin config log sockets upload vhosts webpages

將原始碼中doc/config目錄下的所有檔案複製到安裝目錄中config資料夾裡面

cp -a ~/Develop/webserver/lighttpd/lighttpd-1.4.51/doc/config/* ./config/
#刪除裡面的makefile檔案當然不刪除也可以不影響使用
rm -rf ./config/Makefile*

2.4.1 修改lighttpd.conf檔案

vi ./config/lighttpd.conf

將16行至20行修改為如下

var.log_root    = "/home/wyy/Develop/webserver/lighttpd/web/log"
var.server_root = "/home/wyy/Develop/webserver/lighttpd/web"
var.state_dir   = "/home/wyy/Develop/webserver/lighttpd/web"
var.home_dir    = "/home/wyy/Develop/webserver/lighttpd/web"
var.conf_dir    = "/home/wyy/Develop/webserver/lighttpd/web/config"

將61行修改為如下

var.cache_dir   = server_root + "/cache"

將93行修改為如下

server.use-ipv6 = "disable"

將104和105行註釋掉,如下所示

#server.username  = "lighttpd"
#server.groupname = "lighttpd"

將115行修改為如下

server.document-root = server_root + "/webpages"

將127行註釋掉,如下所示

#server.pid-file = state_dir + "/lighttpd.pid"

如果不需要檢視錯誤日誌檔案,可以將141行註釋掉

server.errorlog             = log_root + "/error.log"

將152行註釋掉,如下所示

#include "conf.d/access_log.conf"

將158行註釋掉,如下所示

#include "conf.d/debug.conf"

將191行註釋掉,如下所示

#server.network-backend = "linux-sendfile"

根據系統資源設定207行和254行的數值

#max-fds必須是max-connections兩倍
server.max-fds = 256
server.max-connections = 128

將343至345行註釋掉,如下所示

#$HTTP["url"] =~ "\.pdf$" {
#  server.range-requests = "disable"
#}

將408行修改為如下

server.upload-dirs = ("/home/wyy/Develop/webserver/lighttpd/web/upload")

2.4.2 修改modules.conf檔案

vi ./config/modules.conf

在43後插入**“mod_alias”**

server.modules = (
  "mod_access",
  "mod_alias", #加在這裡
#  "mod_alias",
#  "mod_auth",
#  "mod_authn_file",
#  "mod_evasive",
#  "mod_redirect",
#  "mod_rewrite",
#  "mod_setenv",
#  "mod_usertrack",
)

使能CGI模組,將144行的註釋符去掉

##
## plain old CGI (mod_cgi)
##
include "conf.d/cgi.conf"

2.4.3 修改conf.d資料夾中的cgi.conf檔案

vi ./config/conf.d/cgi.conf

將15至19行這一段配置修改如下

#將以下內容
cgi.assign = ( ".pl"  => "/usr/bin/perl",
			 ".cgi" => "/usr/bin/perl",
			 ".rb"  => "/usr/bin/ruby",
			 ".erb" => "/usr/bin/eruby",
			 ".py"  => "/usr/bin/python" )
#修改為
cgi.assign = (".cgi" => "")
#cgi.assign = ( ".pl"  => "/usr/bin/perl",
#             ".cgi" => "/usr/bin/perl",
#             ".rb"  => "/usr/bin/ruby",
#             ".erb" => "/usr/bin/eruby",
#             ".py"  => "/usr/bin/python" )

將28行的註釋符去掉,如下所示

alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" )

2.4.4 修改conf.d資料夾中的cgi.conf檔案

vi ./config/conf.d/dirlisting.conf

將24行的註釋掉,如下所示

##
## list of regular expressions. Files that match any of the specified
## regular expressions will be excluded from directory listings.
##
#dir-listing.exclude       =  ( "~$" )

由於便是去掉了pcre的支援,所以這裡將其註釋掉否則會出現以下錯誤資訊

1970-01-01 00:24:24: (server.c.1436) server started (lighttpd/1.4.51) 
1970-01-01 00:24:24: (mod_dirlisting.c.300) pcre support is missing for:  dir-listing.exclude , please install libpcre and the headers 
1970-01-01 00:24:24: (server.c.1444) Configuration of plugins failed. Going down. 

2.5 Lighttpd測試

編寫名為index.html的頁面

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>lighttpd測試</title>
    </head>
    <body>
        <p>輕量級web伺服器lighttpd測試(for arm)</p>
        <hr>
        <p>hello word!</p>
    </body>
</html>

將這個index.html檔案拷貝到Lighttpd安裝目錄下webpages

2.5.1 啟動Lighttpd伺服器

注意:部署到開發板時目錄要和開發環境的一樣,可以通過上面的配置修改路徑。

cd ~/Develop/webserver/lighttpd/web/sbin
./lighttpd -f ../config/lighttpd.conf

開啟瀏覽器就可以看到輸出的頁面了

2.5.2 關閉Lighttpd伺服器

killall lighttpd

2.6 CGI測試

編寫cgi程式

test.c

#include <stdio.h>
int main()
{
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>CGI Output</title>\n");
    printf("</head>\n");

    printf("<body>");
    printf("<h1> Hello, world. </h1>");
    printf("</body>");
    printf("</html>\n");
    return 0;
}

編譯cgi,並將test.cgi程式拷貝到開發板的~/Develop/webserver/lighttpd/web/cgi-bin目錄下

arm-linux-gnueabihf-gcc test.c -o test.cgi

在瀏覽器中輸入地址192.168.x.x/cgi-bin/test.cgi即可訪問

3.Shttpd移植

Shttpd,開源。它是另一個輕量級的web server,具有比thttpd更豐富的功能特性,支援CGI, SSL, cookie, MD5認證, 還能嵌入(embedded)到現有的軟體裡。最有意思的是不需要配置檔案!由於shttpd可以輕鬆嵌入其他程式裡,因此shttpd是較為理想的web server開發原形,開發人員可以基於shttpd開發出自己的webserver,官方網站上稱shttpd如果使用uclibc/dielibc(libc的簡化子集)則開銷將非常非常低。

官網:https://docs.huihoo.com/shttpd/

文件:https://docs.huihoo.com/shttpd/shttpd.1.txt

3.1 下載原始碼並解壓

mkdir -p ~/Develop/webserver/Shttpd
cd ~/Develop/webserver/Shttpd
wget https://nchc.dl.sourceforge.net/project/shttpd/shttpd/1.42/shttpd-1.42.tar.gz
tar xvf shttpd-1.42.tar.gz

3.2 編譯配置

cd ~/Develop/webserver/Shttpd/shttpd-1.42

修改src/Makefile,在第29行空白處新增以下4行,如下所示

# 3. start console, go to shttpd-VERSION\src\ directory
# 4. type "nmake msvc"
# 5. go to shttpd-VERSION\examples , type "nmake msvc"
CC=arm-linux-gnueabihf-gcc
AR=arm-linux-gnueabihf-ar
CFLAGS="-DNO_SSL "

all:
        @echo "make (unix|msvc|mingw|rtems)"
        @echo 'Linux: "LIBS=-ldl make unix"'
        @echo 'BSD: "LIBS=-lpthread make unix"'
        @echo 'Solaris: "LIBS="-lpthread -lnsl -lsocket" make unix"'

3.3 編譯

LIBS="-lpthread " make unix

成功後,會產生靜態庫libshttpd.a和可執行檔案shttpd,後面會用到這個libshttpd.a檔案。

3.4 執行shttpd

#靜態頁面存放在/home/wyy/Develop/webserver/shttpd/web,可以放到任意你想放的位置,然後通過-root來之指定
./shttpd -root /home/wyy/Develop/webserver/shttpd/web -ports 80

3.5 shttpd測試

假設靜態頁面和CGI存放在/home/wyy/Develop/webserver/shttpd/web目錄下

3.5.1 靜態頁面測試

將靜態頁面放在-root指定的/home/wyy/Develop/webserver/shttpd/web目錄下,使用瀏覽器中輸入伺服器地址即可看到測試頁面。

3.5.2 使用官方例子測試shttpd

進到原始碼目錄下examples,修改example.c檔案,去掉SSL等功能,修改如下:

將第349,351,374,372,373行註釋掉。

ctx = shttpd_init(argc, argv);
//shttpd_set_option(ctx, "ssl_cert", "shttpd.pem");
shttpd_set_option(ctx, "aliases", ALIAS_URI "=" ALIAS_DIR);
//shttpd_set_option(ctx, "ports", "8080,8081s");

/* Register an index page under two URIs */
shttpd_register_uri(ctx, "/", &show_index, (void *) &data);
shttpd_register_uri(ctx, "/abc.html", &show_index, (void *) &data);

/* Register a callback on wildcard URI */
shttpd_register_uri(ctx, "/users/*/", &show_users, NULL);

/* Show how to use password protection */
shttpd_register_uri(ctx, "/secret", &show_secret, NULL);
shttpd_set_option(ctx, "protect", "/secret=passfile");

/* Show how to use stateful big data transfer */
shttpd_register_uri(ctx, "/huge", &show_huge, NULL);

/* Register URI for file upload */
shttpd_register_uri(ctx, "/post", &show_post, NULL);

/* Register SSI callbacks */
//shttpd_register_ssi_func(ctx, "true", ssi_test_true, NULL);
//shttpd_register_ssi_func(ctx, "false", ssi_test_false, NULL);
//shttpd_register_ssi_func(ctx, "print_stuff", ssi_print_stuff, NULL);

shttpd_handle_error(ctx, 404, show_404, NULL);

編譯例子

arm-linux-gnueabihf-gcc example.c -I ../src  ../src/libshttpd.a -ldl -lpthread -o test

成功後,執行./test,使用瀏覽器訪問http://192.168.x.x/,可以看到輸出的介面。

3.6 CGI測試

將CGI程式放在-root指定的/home/wyy/Develop/webserver/shttpd/web目錄下,假設cgi檔名為test.cgi,在流覽器中輸入伺服器地址192.168.1.2/test.cgi,即可訪問cgi程式。(這裡成CGI程式的字尾是.cgi,但是沒有規定一定是.cgi字尾,可以設定成任意的,如test.loveyou)

編寫cgi程式

test.c

#include <stdio.h>
int main()
{
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>CGI Output</title>\n");
    printf("</head>\n");

    printf("<body>");
    printf("<h1> Hello, world. </h1>");
    printf("</body>");
    printf("</html>\n");
    return 0;
}

編譯cgi,並將test.cgi程式拷貝到開發板的/home/wyy/Develop/webserver/shttpd/web目錄下

arm-linux-gnueabihf-gcc test.c -o test.cgi

在瀏覽器中輸入地址192.168.x.x/test.cgi即可訪問

4.Thttpd移植

是一款比較精巧的開源Web伺服器。它的初衷是提供一款簡單、小巧、易移植、快速和安全的HTTP伺服器。對於併發請求不使用fork()來派生子程序處理,而是採用多路複用(Multiplex)技術來實現。

thttpd至少和主流的web server一樣快,在高負載下更快,因為其資源佔用小的緣故。

Thttpd還有一個較為引人注目的特點:基於URL的檔案流量限制,這對於下載的流量控制而言是非常方便的。象Apache就必須使用外掛實現,效率較thttpd低。Thttp是開源的。是用C語言編寫的,使用的很多。

官網:http://www.acme.com/software/thttpd/

4.1 下載原始碼並解壓

mkdir -p ~/Develop/webserver/Thttpd
cd ~/Develop/webserver/Thttpd
wget http://www.acme.com/software/thttpd/thttpd-2.29.tar.gz
tar xvf thttpd-2.29.tar.gz

4.2 編譯配置

cd ~/Develop/webserver/Thttpd/thttpd-2.29
./configure

修改Makefile,在第50行將編譯器改為arm-linux-gnueabihf-gcc

vi Makefile

修改如下:

# You shouldn't need to edit anything below here.
 
CC =            arm-linux-gnueabihf-gcc #修改這裡
CCOPT =         -O2

在cgi-src和extras目錄中也有Makefile,修改方法和上面一樣。

4.3 編譯

make -j4

4.4 Thttpd部署

建立thttpd的工作目錄,假設目錄是/home/wyy/Develop/webserver/Thttpd/web

#thttpd工作目錄
mkdir -p /home/wyy/Develop/webserver/Thttpd/web
#頁面
mkdir -p /home/wyy/Develop/webserver/Thttpd/web/www
#配置檔案conf
mkdir -p /home/wyy/Develop/webserver/Thttpd/web/conf
#可執行檔案sbin
mkdir -p /home/wyy/Develop/webserver/Thttpd/web/sbin
#log檔案目錄
mkdir -p /home/wyy/Develop/webserver/Thttpd/web/log
#cgi-bin目錄
mkdir -p /home/wyy/Develop/webserver/Thttpd/web/www/cgi-bin

mkdir -p /home/wyy/Develop/webserver/Thttpd/web/run

將生成的thttpd複製到/home/wyy/Develop/webserver/Thttpd/web/sbin目錄,contrib/redhat-rpm/thttpd.conf複製到/home/wyy/Develop/webserver/Thttpd/web/conf 目錄,並修改thttpd為可執行。

使用vi開啟thttpd.conf檔案,並進行配置,如下配置我們僅將“user=httpd”改為“user=root”,如果不修改會提示不存在httpd使用者,解決方法是新建一個httpd使用者sudo useradd httpd,這裡直接改為root用就無需建立新使用者了

# This section overrides defaults
dir=/home/wyy/Develop/webserver/Thttpd/web/www
nochroot # chroot 
user=root# default = nobody  #修改這裡
logfile=/home/wyy/Develop/webserver/Thttpd/web/log/thttpd.log
pidfile=/home/wyy/Develop/webserver/Thttpd/web/run/thttpd.pid
# This section _documents_ defaults in effect
# port=80
# nosymlink# default = !chroot
# novhost
# nocgipat
cgipat=/cgi-bin/* 
# nothrottles
# host=0.0.0.0
# charset=iso-8859-1

4.5 Thttpd測試

建立一個名為index.html,並將給檔案拷貝到開發板/home/wyy/Develop/webserver/Thttpd/web/www

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>Thttpd測試</title>
    </head>
    <body>
        <h1>Hello word!</h1>
        <p>We are coming from one world, welcome here!</p>
    </body>
</html>

開啟thttpd,開啟瀏覽器即可訪問

./thttpd -D -C ../conf/thttpd.conf

4.6 CGI指令碼測試

編寫測試程式

test.c

#include <stdio.h>

int main(void)
{
    int i = 10;
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head><title>CGI Output</title></head>\n");
    printf("<body>\n");
    while(i)
        printf("<h1>%d\n</h1>\n",i--);
    printf("<body>\n");
    printf("</html>\n");
    return 0;
}

交叉編譯,拷貝cgi程式到開發板目錄/home/wyy/Develop/webserver/Thttpd/web/cgi-bin

arm-linux-gnueabihf-gcc -o test.cgi test.c

測試CGI

在瀏覽器中輸入http://192.168.x.x/cgi-bin/test.cgi

5.Boa移植

伺服器是一個小巧高效的web伺服器,是一個運行於unix或linux下的,支援CGI的、適合於嵌入式系統的單任務的http伺服器,原始碼開放、效能高。

是一種非常小巧的Web伺服器,其可執行程式碼只有大約60KB左右。作為一種單任務Web伺服器,Boa只能依次完成使用者的請求,而不會fork出新的程序來處理併發連線請求。但Boa支援CGI,能夠為CGI程式fork出一個程序來執行。Boa的設計目標是速度和安全。

官網:http://www.boa.org/

文旦:http://www.boa.org/documentation/

5.1 下載原始碼並解壓

mkdir -p ~/Develop/webserver/Boa
cd ~/Develop/webserver/Boa
wget http://www.boa.org/boa-0.94.13.tar.gz
tar xvf boa-0.94.13.tar.gz

5.2 編譯配置

cd ~/Develop/webserver/Boa/boa-0.94.13/src
./configure

修改Makefile

vi Makefile

將第23行修改為

LDFLAGS = -static

將第31,32行修改為

CC = arm-linux-gnueabihf-gcc
CPP = arm-linux-gnueabihf-gcc –E

5.3 修改原始碼

5.3.1 修改boa.c檔案

將第225行程式碼註釋掉,如下

//if ( setuid ( 0 ) != - 1 ) {
//    DIE ( "icky Linux kernel bug!" );
//}

5.3.2 修改compat.h檔案

修改第120行,如下

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

5.3.3 修改config.c檔案

將第266到286行程式碼註釋掉,不註釋會報錯:gethostbyname:: Resource temporarily unavailable

/*
if(!server_name)
{
 	struct hostent *he;
 	char temp_name[100];
 	
	......
	
	perror("strdup:");
	exit(1);
	}
}*/

5.3.4 修改log.c檔案

註釋掉第72到74,不註釋會報錯:unable to dup2 the error log:bad file descriptor

/*if (dup2(error_log, STDERR_FILENO) == -1) {
	DIE("unable to dup2 the error log");
}*/

5.4 編譯

make -j4

如果編譯出現報錯,那麼應該安裝一下兩個工具

sudo apt-get install bison
sudo apt-get install flex

去除除錯資訊

arm-linux-gnueabihf-strip boa

修改執行許可權

chmod 777 boa

5.5 Boa伺服器配置

5.5.1 Boa配置檔案解析

# 指定boa工作目錄,從該目錄載入boa.conf
# boa -c /usr/local/boa

# 監聽的埠
Port 80

# 伺服器繫結的IP地址,註釋掉表示繫結到INADDR_ANY,適配伺服器所有的IP
# Listen 192.68.0.5

# 伺服器執行的使用者和組
# User o
User 0

# Group o
Group 0

# 當伺服器發生問題時傳送報警的email地址
# ServerAdmin [email protected]

# 錯誤日誌檔案
ErrorLog /var/log/boa/error_log

# 訪問日誌檔案
AccessLog /var/log/boa/access_log

# 是否使用本地時間。如果沒註釋掉,則使用本地時間。註釋掉則使用UTC時間
# UseLocaltime

# 是否記錄CGI執行資訊
# VerboseCGILogs

# 伺服器名字
ServerName www.hello.com

# 是否啟動虛擬主機功能,即裝置可以有多個網路介面,每個介面都可以擁有一個虛擬的Web伺服器
# VirtualHost

# 非常重要,HTML文件的主目錄
DocumentRoot /var/www

# 如果收到一個使用者請求的話,在使用者主目錄後再增加的目錄名
UserDir public_html

# HTML目錄索引的檔名
DirectoryIndex index.html

# 指定用於生成目錄的程式,註釋此變數將不允許列目錄
# DirectoryMaker /usr/lib/boa/boa_indexer

# DirectoryCache: If DirectoryIndex doesn't exist, and DirectoryMaker
# has been commented out, the the on-the-fly indexing of Boa can be used
# to generate indexes of directories. Be warned that the output is 
# extremely minimal and can cause delays when slow disks are used.
# Note: The DirectoryCache must be writable by the same user/group that 
# Boa runs as.
# DirectoryCache /var/spool/boa/dircache


# 一個連線所允許的HTTP持續作用請求最大數目
KeepAliveMax 1000

# HTTP持續作用中伺服器在兩次請求之間等待的時間數,以秒為單位,超時將關閉連線
KeepAliveTimeout 10

# 指明mime.types檔案位置
MimeTypes /etc/mime.types

# 副檔名沒有或未知的話,使用的預設MIME型別
DefaultType text/plain

# Uncomment the next line if you want .cgi files to execute from anywhere
# AddType application/x-httpd-cgi cgi

# Redirect allows you to tell clients about documents which used to exist in
# your server's namespace, but do not anymore. This allows you to tell the
# clients where to look for the relocated document.
# Example: Redirect /bar http://elsewhere/feh/bar

# CGIPath: The value of the $PATH environment variable given to CGI progs.
CGIPath /bin:/usr/bin:/usr/local/bin

# 為路徑加上別名
Alias /doc /usr/doc

# 指明CGI指令碼的虛擬路徑對應的實際路徑
ScriptAlias /cgi-bin/ /var/www/cgi-bin/

5.5.2 伺服器部署

從linux的etc目錄拷貝mime.types、passwd、group檔案到開發板系統的etc目錄(一般已經有passwd和group,只需拷貝mime.types),將boa拷貝到開發板的/bin目錄下,在開發板/etc目錄下建boa目錄,拷貝boa.conf到板子的/etc/boa目錄。

開發版:

mkdir -p /home/wyy/Develop/webserver/Boa
mkdir /home/wyy/Develop/webserver/Boa/www
mkdir /home/wyy/Develop/webserver/Boa/cgi-bin
mkdir /home/wyy/Develop/webserver/Boa/boa
mkdir /home/wyy/Develop/webserver/Boa/bin
mkdir /home/wyy/Develop/webserver/Boa/log
mkdir /home/wyy/Develop/webserver/Boa/doc
mkdir /home/wyy/Develop/webserver/Boa/indexer

將宿主機中的mime.types拷貝到開發板的/home/wyy/Develop/webserver/Boa/boa中,將原始碼目錄中的boa.conf拷貝到/home/wyy/Develop/webserver/Boa/boa中。將boa可執行檔案拷貝到/home/wyy/Develop/webserver/Boa/bin

修改boa.conf

vi /etc/boa/boa.conf
# 1.User的修改
User nobody
# 修改為
User 0

# 2.Group的修改
Group nogroup
# 修改為
Group 0

# 3.錯誤日誌路徑
ErrorLog /var/log/error_log
# 修改為
ErrorLog /home/wyy/Develop/webserver/Boa/log/error_log  

# 4.ServerName的設定 
# ServerName www.your.org.here
# 修改為
ServerName www.your.org.here
#否則會出現錯誤“gethostbyname::No such file or directory”

# 5.DoucmentRoot的修改
DoucmentRoot /var/www
# 修改為
DoucmentRoot /home/wyy/Develop/webserver/Boa/www

# 6.指定資源型別檔案
MimeTypes /etc/mime.types 
# 修改為
MimeTypes /home/wyy/Develop/webserver/Boa/boa/mime.types

# 7.修改生成目錄
DirectoryMaker /usr/lib/boa/boa_indexer
# 修改為
DirectoryMaker /home/wyy/Develop/webserver/Boa/indexer


# 8.修改文件目錄
Alias /doc /usr/doc
# 修改為
Alias /doc /home/wyy/Develop/webserver/Boa/doc

# 9.ScriptAlias的修改
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
# 修改為
ScriptAlias /cgi-bin/ /home/wyy/Develop/webserver/Boa/cgi-bin/

5.6 Boa測試

在開發板上編寫一個名為index.html的靜態頁面,將該頁面拷貝到/www目錄下,使用瀏覽器輸入開發板ip即可訪問。

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Boa 靜態網頁測試</title>
    </head>

    <body>
        <h1>  Welcome to Boa sever! </h1>
    </body>
</html>

5.7 CGI測試

編寫cgi程式

test.c

#include <stdio.h>
int main()
{
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>CGI Output</title>\n");
    printf("</head>\n");

    printf("<body>");
    printf("<h1> Hello, world. </h1>");
    printf
            
           

相關推薦

嵌入式web伺服器移植

文章目錄 嵌入式web伺服器移植 1.移植環境搭建 2.Lighttpd移植 2.1 下載原始碼並解壓 2.2 編譯配置 2.3 編譯安裝 2.4 Lighttpd配置

嵌入式web伺服器boa移植全過程(含圖解過程)

移植平臺:mini2440(arm9 s3c2440)開發板 ,核心2.6.29   一、boa下載和安裝: 1、修改編譯安裝檔案: 1)在www.boa.org下載boa-0.94.13.tar.gz 並解壓 2)在src目錄下執行./configure生成Ma

嵌入式WEB伺服器BOA的移植方法(一)

  作者:李駒光、鄭耿 本文摘自作者《嵌入式Linux系統開發詳解-基於EP93XX系列ARM》一書的相關章節。   隨著Internet技術的興起,在嵌入式裝置的管理與互動中,基於Web方式的應用成為目前的主流,這種程式結構也就是大家非常熟悉的B/S結構,即在 嵌入式裝置上

嵌入式web伺服器boa的編譯移植

Linux下Boa伺服器移植,交叉編譯boa併成功移植到FL2440開發板上,並且CGI程式執行正常。 主機環境:redhat9交叉編譯器:arm-linux-gcc 3.4.1 BOA版本:0.94.13平臺:s3c2440一:下載原始碼:從http://www.boa.org/官方網站下載原始碼,並將原

Java Web 學習筆記之八:嵌入式web伺服器Jetty的基本使用

Jetty 是一個開源的servlet容器,具有易用性,可擴充套件性,易嵌入性等特點。通過少量的程式碼,開發者就可以在程式中以嵌入的方式執行一個web伺服器。 下面介紹一些Jetty使用的方式:

嵌入式web伺服器boa -- html網頁設計總結

嵌入式web伺服器boa – html網頁設計總結 (一)頁面分割的實現 四個HTML頁面:index.html(主介面)、top.html、left.html、right.html; 實現在主頁面顯示其餘三個頁面的拼接頁面,也即實現頁面分割; 程式碼實現:

高效能嵌入式web伺服器

Undertow 是一個採用 Java 開發的靈活的高效能 Web 伺服器,提供包括阻塞和基於 NIO 的非堵塞機制。Undertow 是紅帽公司的開源產品,是 Wildfly 預設的 Web 伺服器。 Undertow 提供一個基礎的架構用來構建 Web 伺服器,這

mongoose:嵌入式Web伺服器

mongoose是一個理想的嵌入式環境,專為裝置互聯而設計。自2004年以來,就被大量的開源產品或者商業產品所使用,它甚至已經執行在了空間站的裝置中。Mongoose使嵌入式網路程式設計更為快速、穩健和簡單。 特性 跨平臺:支援 Linux/UNIX、MacOS、QNX、eCos、Windows、An

嵌入式Web開發——Boa伺服器移植

百度百科上關於 Boa 的說明:   BOA 伺服器是一個小巧高效的 web 伺服器,是一個運行於 unix 或 linux 下的,支援 CGI 的、適合於嵌入式系統的單任務的http伺服器。   原始碼開放、效能高。由於它是一個單任務的 Web 伺服器,只

嵌入式Http伺服器BOA移植經驗總結(…

經過2 天的時間,終於將BOA 伺服器移植到了我的DM365 的IPCam 上了!現將個人經驗於大家一起分享! 環境: 主機:ubuntu9.10 交叉編譯工具:arm_v5t_le 目標板:TI 公司的DM365 詳細過程如下: 1. 下載Boa 原始碼 下載地址: http://www.boa.

嵌入式boa伺服器搭建和移植

2.tar -xvf boa-0.94.13.tar.g 3./configure 4.修改Makefile CC =or32-linux-gcc CPP = or32-linux-gcc–E 5.修改boa.c,註釋下面幾行 if (setuid(0) !

STM32移植lwip之建立web伺服器

本篇目標:在之前能ping通pc機的工程基礎上搭建web伺服器,借鑑官方web伺服器的程式與網頁,能夠用pc機瀏覽器訪問web伺服器,並返回設定的網頁 材料準備: 除錯工具:用來除錯tcp連線下的資料接收(網路除錯助手) 測試瀏覽器:這裡使用的是Chr

嵌入式Linux上移植unzip工具

16px 文件 bsp ont div 嵌入 for .gz .tar.gz   由於busybox編譯出來的unzip不支持有密碼的壓縮包解壓,因此基於unzip60源碼包,交叉編譯一個嵌入式Linux上的unzip工具。 1.下載地址是: http://sourcefo

基於ARM和Linux的嵌入式Web Server設計與實現_愛學術——免費下載

重要 image 平臺 服務 linu amp 設計與實現 體系 www. 【摘要】介紹了嵌入式ARM處理器的特點和硬件平臺的設計、嵌入式操作系統的設計,構建了基於嵌入式Web Server的遠程監測系統結構,重點分析了嵌入式TCP/IP協議棧的體系結構、嵌入式Web服務器

利用node.js建立靜態web伺服器

//引入http服務 var http = require('http'); //引入fs模組 var fs = require('fs'); //引入url模組 var url = require('url'); //引入path模組 var path = require('path');

《Python入門》第一個Python Web程式——簡單的Web伺服器

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

WEB伺服器的配置與管理

實驗三:WEB伺服器的配置與管理   1414080901218-張欽穎-組網實驗3   實驗目的: 1、  掌握WEB伺服器的相關概念和原理; 2、  掌握WEB伺服器的安裝和配置方法; 3、  掌握虛擬機器技術的配

1. OneNet 平臺和Web伺服器對接

接通NB模組,電源、串列埠 1.onenet新增裝置 IMEI號--模組ID和IMSI --SIM卡ID 新增裝置, 2.串列埠除錯助手  安裝Ugreen驅動和sscom.exe串列埠除錯   串列埠除錯助手傳送資料 傳送資料後,可以從one

應用程式伺服器Web伺服器的區別

原文地址:http://www.javaworld.com/article/2077354/learn-java/app-server-web-server-what-s-the-difference.html 什麼是應用伺服器和Web伺服器之間的區別? Web伺服器專門處理HTTP

web伺服器上PHP的執行模式

CGI通用閘道器介面(Common Gateway Interface) CGI即通用閘道器介面(Common Gateway Interface),它是一段程式, 通俗的講CGI就象是一座橋,把網頁和WEB伺服器中的執行程式連線起來,它把HTML接收的指令傳遞給伺服器的執行程式,再把伺服器執行