1. 程式人生 > >Ubuntu(pc)中部署boa伺服器

Ubuntu(pc)中部署boa伺服器

基礎部分:

部署詳細步驟如下

1.到http://www.boa.org/下載boa原始碼(下載得到boa-0.94.13.tar.gz),解壓後得到boa-0.94.13資料夾。

2.執行./configure生成Makefile檔案。

3.進入boa-0.94.13資料夾的src目錄下,做如下修改:

(1)將defines.h中的 #define SERVER_ROOT "/etc/boa" 修改為 #define SERVER_ROOT "/boa"(這樣boa程式啟動時會在/boa目錄下尋找boa.conf配置檔案,並且將/boa資料夾作為伺服器的根目錄)。

(2)將boa.c中的

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

                  這三行註釋掉,否則boa啟動時會出現“boa.c:226 - icky Linux kernel bug!: No suchfile or directory錯誤”

(3)將compat.h中的   “#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff”  改為  “#define TIMEZONE_OFFSET(foo)  (foo)->tm_gmtoff"

4.執行make

5.建立安裝目錄 

 mkdir -p /boa /boa/www /boa/cgi-bin /boa/log 

6.將需要的檔案複製到安裝目錄中

將boa-0.94.13/src目錄下生成的boa、boa_indexer二進位制檔案複製到/boa下

將boa-0.04.13目錄下的boa.conf檔案複製到/boa下

將/etc/mime.types複製到/boa目錄下

7.修改boa.conf配置檔案,boa啟動時會載入該檔案。

按照如下格式修改(下面的檔案去除了官方註釋):

Port 80
User 0
Group 0

##### error_log和access_log會自動生成,只要指定生成路徑就可以了。
ErrorLog /boa/log/error_log
AccessLog /boa/log/access_log

##### 存放HTML檔案的根路徑
DocumentRoot /boa/www
UserDir public_html

##### 預設頁面,若之輸入http://127.0.0.1/則會自動返回給瀏覽器預設頁面index.html
DirectoryIndex index.html

##### 保持預設
DirectoryMaker /boa/boa_indexer
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /boa/mime.types
DefaultType text/plain

#####指定傳給cgi程式的PATH環境變數
CGIPath /bin:/usr/bin:/usr/local/bin

#####保持預設
Alias /doc /usr/doc

#####如果輸入http://127.0.0.1/cgi-bin/test.cgi, 則boa伺服器會到/boa/cgi-bin中尋找test.cgi程式。
ScriptAlias /cgi-bin/ /boa/cgi-bin/

8.建立測試頁面

(1)index.html  ,放在/boa/www目錄下

<html>
<body>
<h3>this is a test!</h3><br/>
<img src="image.jpg"/>
<h3>tree picture</h3><br/>
<a href="/cgi-bin/test.cgi">to cgi page</a>
</body>
</html>
(2)test.c, 使用gcc -o test.cgi test.c編譯後得到的test.cgi放在/boa/cgi-bin目錄下
include <stdio.h>


int main()
{
      printf("Content-type:text/html\n\n"); //這句一定要加上
      printf("<html><body>");
      printf("<font style=\"color:red; font-size:30px;\">Hello, CGI!</font><br/>");
      printf("<a href=\"/index.html\">return index.html</a>");
      printf("</body></html>");
      return 0;
}
~  

9.測試效果

進入/boa目錄,使用./boa來執行boa伺服器(當然也可將/boa路徑加入系統PATH環境變數,這樣不用進入/boa目錄,直接輸入boa就可以了)

在瀏覽器中輸入http://127.0.0.1/便可訪問到預設的頁面index.html, 點選index.html頁面中的超連結便可訪問到cgi測試頁面,點選test.cgi中的超連結又可返回index.html頁面。

(1)index.html頁面

 

(2)test.cgi頁面

以上是在PC上部署BOA的大致步驟,僅供參考。

擴充套件部分:

下面是一個使用html + cig 模仿使用者登入的一個例子的原始碼,感謝原作者的分享。

功能:在pass.html中輸入使用者名稱和密碼,提交到pass.cgi程式中並將賬戶和密碼打印出來。

pass.html頁面:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>使用者登陸驗證</title>
</head>
<body>
<form name="form1" action="/cgi-bin/pass.cgi" method="POST">
<table align="center">
    <tr><td align="center" colspan="2"></td></tr>
    <tr>
       <td align="right">使用者名稱</td>
       <td><input type="text" name="Username"></td>
    </tr>
    <tr>
       <td align="right">密  碼</td>
       <td><input type="password" name="Password"></td>
    </tr>
    <tr>
       <td><input type="submit" value="登  錄"></td>
       <td><input type="reset" value="取  消"></td>
    </tr>
</table>
</form>
</body>
</html>

pass.cgi的原始碼pass.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* getcgidata(FILE* fp, char* requestmethod);

int main()
{
       char *input;
       char *req_method;
       char name[64];
       char pass[64];
       int i = 0;
       int j = 0;
      
//     printf("Content-type: text/plain; charset=iso-8859-1\n\n");
       printf("Content-type: text/html\n\n");
       printf("The following is query reuslt:<br><br>");

       req_method = getenv("REQUEST_METHOD");
       input = getcgidata(stdin, req_method);

       // 我們獲取的input字串可能像如下的形式
       // Username="admin"&Password="aaaaa"
       // 其中"Username="和"&Password="都是固定的
       // 而"admin"和"aaaaa"都是變化的,也是我們要獲取的
      
       // 前面9個字元是UserName=
       // 在"UserName="和"&"之間的是我們要取出來的使用者名稱
       for ( i = 9; i < (int)strlen(input); i++ )
       {
              if ( input[i] == '&' )
              {
                     name[j] = '\0';
                     break;
              }                  
              name[j++] = input[i];
       }

       // 前面9個字元 + "&Password="10個字元 + Username的字元數
       // 是我們不要的,故省略掉,不拷貝
       for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ )
       {
              pass[j++] = input[i];
       }
       pass[j] = '\0';

       printf("Your Username is %s<br>Your Password is %s<br> \n", name, pass);
      
       return 0;
}

char* getcgidata(FILE* fp, char* requestmethod)
{
       char* input;
       int len;
       int size = 1024;
       int i = 0;
      
       if (!strcmp(requestmethod, "GET"))
       {
              input = getenv("QUERY_STRING");
              return input;
       }
       else if (!strcmp(requestmethod, "POST"))
       {
              len = atoi(getenv("CONTENT_LENGTH"));
              input = (char*)malloc(sizeof(char)*(size + 1));
             
              if (len == 0)
              {
                     input[0] = '\0';
                     return input;
              }
             
              while(1)
              {
                     input[i] = (char)fgetc(fp);
                     if (i == size)
                     {
                            input[i+1] = '\0';
                            return input;
                     }
                    
                     --len;
                     if (feof(fp) || (!(len)))
                     {
                            i++;
                            input[i] = '\0';
                            return input;
                     }
                     i++;
                    
              }
       }
       return NULL;
}

補充說明:

(1)移植boa到嵌入式linux上的方法和上面幾乎一樣,具體做法是在./configure生成Makefile後將Makefile中的CC = gcc 改為CC = arm-linux-gcc,將CPP=gcc -E 改為 CPP = arm-linux-gcc -E,然後make就可以了。

(2)移植boa到嵌入式linux後,在啟動時若出現“gethostbyname:: Success"然後程式退出,則需在原boa.conf檔案中增加一行:

ServerName  www.your.org.here

然後重新執行boa就可以了。需要注意,若系統中有多個boa程式,則不應該將boa加入PATH環境變數中,這樣相互之間干擾可能引起異常,而應該使用帶路徑的方式來啟動boa程式。

(--------------完------------)

相關推薦

Ubuntupc部署boa伺服器

基礎部分: 部署詳細步驟如下 1.到http://www.boa.org/下載boa原始碼(下載得到boa-0.94.13.tar.gz),解壓後得到boa-0.94.13資料夾。 2.執行./configure生成Makefile檔案。 3.進入boa-0.94.13資料

在嵌入式Linux系統OK6410移植Boa伺服器

OK6410的Boa伺服器移植: <一> Boa的編譯 1. 從 www.boa.org 下載 Boa 伺服器的最新版:boa-0.94.13.tar.gz。 2. 解壓:tar xzf boa-0.94.13.tar.gz 3. 進入解壓後的資料夾 boa-0

物聯網倉儲系統—環境搭建—BOA 伺服器和 SQLite3 移植

一、專案環境介紹:1、Ubuntu 12.04 發行版2、GCC 交叉編譯工具鏈(版本 4.5.1)3、U-boot-2010.034、FS4412 開發板(ARM Cortex-A9 核心)5、FS_

LinuxDebian的Samba伺服器的配置

  配置Samba伺服器分為4步: 1.apt-get install samba (安裝) 2.建立使用者 ( 注意:該使用者是系統中已經存在的使用者,以debian為例) 在系統中建立test使用者debian~:# useradd -m test 增加samba使用

在 CentOS 部署 KMS 伺服器vlmcsd

準備 vlmcsd 下載 vlmcsd 本文使用的 vlmcsd 版本為 svn1111,支援的產品: Windows Vista – 10 Windows Server 2008 - 2016 Office 2013 - 2019 Visio 2013 - 20

LinuxUbuntu 16.04安裝OpenCV + OpenCV_Contrib

dep bsp blog pil 目錄文件 mod see dea spa   近兩個月來接觸了Linux系統,在老板的建議下翻了Ubuntu的牌子,我安裝的版本是16.04,用習慣之後感覺蠻好的,比Windows要強。好啦,廢話不說啦,下面開始說在Ubuntu中安裝Ope

使用O2OA二次開發搭建企業辦公平臺平臺部署篇:伺服器備份和資料匯入匯出

  本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平

Android直播實現srs流媒體伺服器部署

但是作為android程式設計師,寫好了推流器和播放器,沒有伺服器來測試還是很頭疼的,這裡就介紹一下srs伺服器的最簡單的部署,如果有興趣深入研究的可以去看看官方的wiki,因為是國內開發人員開源的,提供中文文件,講解的很詳細 https://github.

用U盤作為啟動盤安裝UbuntuPC已有Win10

然後,你需要在計算機上分出一塊空閒磁碟,作為Ubuntu系統使用的盤塊。由於我電腦已經有一個Win10系統,所以我藉助磁碟管理程式特意留出一些空間用於Ubuntu安裝。如何才算留給Ubuntu的空閒盤塊呢?只要在作業系統中不能像C盤D盤那樣被看見就好。但是,

搭載SRS伺服器-RTMP部署例項

RTMP部署的步驟。 假設ip地址為192.168.0.41 1.第一步,獲取SRS。 git clone https://github.com/ossrs/srs cd srs/trunk 如果提示git不存在,請自行更新 apt-get inst

U盤(usb儲存)在磁碟管理可以顯示 但是伺服器電腦找不到

WINDOWS2003 server環境,然後在磁碟管理顯示是正常的,良好; 如圖以下的問題 1、我先嚐試了吃下方法;沒有解決了,有磁碟顯示,但是讀不到任何的空間大小,為0; 解決方法: 右擊“我的電腦”,在彈出的快捷選單中選擇“管理”命令,進入到“計算機管

UbuntuLNMP專案部署全過程

登陸伺服器: 開啟 bash 命令列工具,例如git bash ssh [email protected]<ip> #回車後輸入密碼(輸入的密碼不會顯示) 更新 apt-get 庫 apt-get update

神經網絡結構在命名實體識別NER的應用

field edi most 好的 向量 後來 目標 領域 png 神經網絡結構在命名實體識別(NER)中的應用 近年來,基於神經網絡的深度學習方法在自然語言處理領域已經取得了不少進展。作為NLP領域的基礎任務—命名實體識別(Named Entity Recogni

Unity Editor 檢查工程Prefab預設的空組件

com game filepath ddr bug str 技術 程序 string 在我們做項目的過程中 經常會有預設中出現空的腳本 例如: 導致的原因是因為 腳本的丟失 現在我們來做一個檢查工程中有空腳本的預設工具 老規矩直接上代碼 放到工程就能用 using

Java內存模型JMM的happens-before

ati img 執行 簡單 pen 性能 .cn style 程序員   happens-before是JMM中最核心的概念,對於Java程序員來說,理解happens-before是理解JMM的關鍵 。 1.JMM的設計   首先,來看看JMM的設計意圖。從JMM的設計者

直方圖histogram的bins應如何理解

histogram 一個histogram,通常可以用一個列向量表示(例子中的a,b),列向量裏面的每一個值就是一個bin(a,b),比如說列向量有個50個元素,那麽就代表有50個bin。 對於彩色圖像,一般是rgb,3個維度,每個顏色一般是0-255的灰度級,就是對應8個bin,每個維度8bin,8x

命令提示符cmd的tracert命令詳解

跳轉 路由 操作系統 時間 經驗 由器 其中 cti 地址 tracert也被稱為Windows路由跟蹤實用程序,在命令提示符(cmd)中使用tracert命令可以用於確定IP數據包訪問目標時所選擇的路徑。本文主要探討了tracert命令的各個功能。 工具

每天一ubuntu1

tar 相機 信息 href 本地用戶 超級 png 移動介質 用戶主文件夾 ubuntu桌面入門指南 版本和發行號: Ubuntu 的版本號是根據我們發布一個版本的日期而定。 2004年10月發布的版本為 4.10。 2012年4月發布的版本號為 12.04

bartender鏈接數據庫提示:無法鏈接到數據庫 外部數據驅動程序1的意外錯誤#6670

bartender 6670 外部數據驅動程序bartender鏈接數據庫提示:無法鏈接到數據庫 外部數據驅動程序(1)中的意外錯誤#6670是 微軟 10月份更新的補丁導致。解決:1.關閉自動更新2.卸載補丁:win7 KB4041678 KB404168