程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> MC_HTTPD(自己編寫的一個web服務器的介紹)

MC_HTTPD(自己編寫的一個web服務器的介紹)

編輯:關於C語言

author: 顏文澤(robin)
Revision: 0.9

1. cd mc_httpd-x.x

2. ./configure --mandir=/usr/share/man

3. make

4. su root
 
5. make install

6. take look at the configuration file in doc/mc_httpd.conf and modify it for your needs.

7. cp doc/mc_http.conf /etc/mc_httpd.conf

8. exit

支持:

支持GET, HEAD, POST, DELETE 和 PUT。

支持 Accept, Accept-Charset, Accept-Encoding, Accept-Language, Host, If-Match, If-Modified-Since, If-None-Match, If-Range, Range, If-Unmodified-Since 和 User-Agent request頭部域。

支持Connection 和Date general 頭部域。

支持Etag, Location 和Server response頭部域。

支持Expires, Content-Encoding, Content-Length, Content-Location, Content-MD5, Content-Range, Last-Modified 和 Content-Type entity頭部域。

支持cookie和status頭部域。

支持cgi/1.1。

支持虛擬主機。

支持斷點下載。

支持斷點上傳。(注:content-length的值必須遵照HTTP/1.1中的示例)

支持Multi-line header field。

不支持:

服務器不能用作代理服務器。

服務器不支持視頻和音頻。

命令行參數:

注:命令行參數的優先級高於配置文件。並且命令行參數重啟時無法重新指定,所以除了-4,-6,-f選項外,其他的參數不建議使用。

-4:服務器進程以ipv4運行。

-6:服務器進程以ipv6運行。

注:如果-4和-6都不指定,具體的協議由服務器進程自己選定。例:ubuntu12.04會默認選擇ipv4, freebsd9.1會默認選擇ipv6。

-c:服務器進程將會測試用戶的環境和配置文件,然後輸出測試結果。服務器不會實際工作。

-x:調試選項。該版本不會工作。

-v:輸出服務器的版本信息。服務器不會實際工作。

-d:指定服務器的根目錄。例: -d /home/nns 服務器進程將會以/home/nns為根目錄運行(就是執行chroot(/home/nns/)操作)。

-f: 指定配置文件的路徑(必須為絕對路徑)。默認的配置文件路徑為/etc/mc_httpd.conf。

-u:指定服務器進程的uid。用戶名和用戶id都是可以接受的參數,服務器會自行轉換。

-g:指定服務器進程的gid,組名和組id都是可以接受的參數,服務器會自行轉換。

-p:指定端口號。

配置文件參數:

注:配置文件的參數的修改可以在重啟後生效。源碼doc目錄下有mc_httpd.conf的范本,用戶可以修改該文件,然後復制到/etc目錄下。

rootpath:指定服務器的根目錄。例:rootpath "/home/nns"  服務器進程將會以/home/nns為根目錄運行(就是執行chroot(/home/nns/)操作)。

cgitimelimit: cgi程序的運行時間限制。該版本不起作用。

timelimit:該版本不起作用。

maxrequests:該版本不起作用。

maxinterval:同一個鏈接兩個請求間的最大時間限制。

port: 指定端口號。

backlog:指定listen函數中的backlog值。

dirset: 0表示不顯示目錄。非0表示顯示目錄。

putset:0表示服務器禁止put辦法,非0表示服務器允許put辦法。

deleteset: 0表示服務器禁止delete辦法,非0表示服務器允許delete辦法。

mdaset:0表示服務器禁止發送Content-MD5頭部域,非0表示服務器默認發送Content-MD5頭部域。

etagset:0表示服務器禁止發送ETAG頭部域,非0表示服務器允許發送ETAG頭部域。

defaulttype: 當服務器無法鑒別文件的類型時,將使用該值。

defaultcharset: 服務器使用的字符集。

user:指定服務器進程的uid。用戶名和用戶id都是可以接受的參數,服務器會自行轉換。

group: 指定服務器進程的gid,組名和組id都是可以接受的參數,服務器會自行轉換。

tmppath: 服務器存放臨時文件的路徑。 例tmpath "/tmp/","/tmp/"前後的/可以添加也可以不添加,程序會自己處理。在本例子中的臨時目錄實際上是/home/nns/tmp(如果rootpath是/home/nns的話)。

logfile:服務器日志文件的路徑(絕對路徑)。用戶應該定期查看和清理該文件的內容。

pidfile:服務器存放服務器進程id的文件。

hosts:服務器虛擬主機設置。具體格式如下:

    
}

 

indexnames:服務器會處理的默認頁面。比如一個服務器的hosts 是

}

indexnames是

    | 
}     

那麼當服務器接受到nnsmgsone.com的請求時,它會查看/home/nns/www目錄下是否存在index.html和index.xhtm然後將頁面發送給浏覽器。(假定rootpath是/home/nns)

cgipaths: cgipaths目錄下的文件全部被當成cgi程序。如:

    | 
}        

那麼程序將會把/home/nns/cgi-bin和/home/nns/cgi目錄下的一切文件當成cgi程序處理。(假定rootpath是/home/nns)

errpage:指定程序的出錯頁面。如:

}

 

當服務器找不到一個頁面是就會將/home/nns/www/404.html回復給浏覽器。

假設rootpath是/home/nns/,hosts是

}

 

mimeencoding:指定mime encoding。

mimetype:指定mime type。

信號:

SIGTGERM: 溫柔的殺死進程。

SIGHUP: 重啟服務器進程。

cgi程序:

如果要運行一個cgi程序,rootpath目錄下必須要有運行該程序的一切環境。例(假定rootpath是/home/nns):如果要運行一個shell文件,那麼/home/nns/bin/sh是必須的(可能還需要其他的文件),如果要運行一個perl程序,那麼 /home/nns/bin/perl和/home/nns/lib/libperl.so是必須的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved