架個WWW伺服器


[Back to LINS | Back to Tseng's Home Page]

曾元顯 Feb. 29, '96

Access times.


Windows 上的 WWW 伺服器

安裝 WinHTTPD 伺服器

啟動/關閉伺服器

伺服器之運作與文件的 URL

認識 WinHTTPD 的組態檔


Windows 上的 WWW 伺服器

	微軟作業系統 Windows 3.1 上的 WWW 伺服器目前有ZBServer、
SerWeb、Chameleon Web Personal Server、WEB4HAM、WebServer、          
WinHTTPD [1]。其中 WinHTTPD 具備 NCSA Unix 伺服器大部份的功能[2],
而且安裝簡易、個人及教育單位使用免付費、可以Visual BASIC 製作 CGI 程
式、支援使用者權限管理,因此特別值得介紹。讀者可藉此瞭解 WWW 伺服器
的運作方式,並進而能夠架設與管理一個伺服器站,為個人服務的單位提供更好
的服務。

安裝 WinHTTPD 伺服器

一、以 FTP 取得 whttpd14.zip 檔案

如果您對網路資源的利用不熟悉,請參閱相關文件 [3-5]

二、在硬碟機根目錄中造個子目錄 httpd

	C:\>md httpd

並將取回之檔案放在此目錄。為了減少麻煩,建議第一次安裝時最好按照這裡的
步驟及指示,先不要自作主張任意修改。

三、解開取回的壓縮檔

	C:\httpd>pkunzip -d whttpd14.zip

其中參數 -d 會將壓縮檔中的子目錄一併解開。你的PKUNZIP 解壓縮程式必須
是V2.04g 版或是較新的版本。 如果不是,一樣用 FTP去取吧。檔案解開之後,
稍微瀏覽一下有哪些子目錄與檔案,瞭解一下這個才 600K bytes 左右的軟體有
哪些東西。

四、設定時區

在根目錄的 AUTOEXEC.BAT 檔案中,適當的地方加入設定台灣時區的指令, 如下
	SET TZ=EST8

然後重新開機以便時區設定能夠生效。在此所謂適當的地方通常是 
AUTOEXEC.BAT 檔案的最後一行,您的電腦中是否如此,視您的開機程序設
定而可能有所不同,只要開機時能讓 DOS 執行到即可。


為了能順利執行所附的展示功能,請繼續下列兩步驟(或者在碰到問題時再執行
亦可,並記得重新啟動伺服器):

五、修改 SYSTEM.INI

	修改 Windows 目錄底下 SYSTEM.INI 檔案中 [NonWindowsApp] 部份的 
CommandEnvSize 命令,使成為
	CommandEnvSize = 8192

六、取得 VBRUN300.DLL

以 FTP 取得 VBRUN300.DLL 放在 Windows 目錄的 System 子目錄中。

啟動/關閉伺服器

	啟動伺服器前的準備工作跟執行瀏覽器之前的準備工作一樣,必須先執行 
WinSock 之類的軟體如trumpet,使 Windows 能夠以 TCP/IP 的協定在網路上
與別的機器溝通。一旦 Winsock 執行後,即可透過檔案管理員,到 httpd 目錄
下執行 httpd.exe 以啟動伺服器。或者在程式管理員下,選擇「檔案」的「開啟
新檔」,再選擇「程式項目」,以便在程式管理員下造出伺服器 httpd 的小圖形,
方便爾後的執行。
	
	結束伺服器的執行就像結束 Windows 其他應用程式一樣,選到之後按 
ALT+F4 即可離開。


	到此,讀者就擁有一個伺服器了。但是如何玩您的新玩具呢,下面將做簡單
的介紹,詳細的資料請參閱 WinHTTPD 的線上參考文件,其主檔案在: 

	C:\httpd\htdocs\httpddoc\overview.htm

伺服器之運作與文件的 URL

	在啟動 httpd 後,您可以在同一部電腦執行瀏覽器,透過 URL:
http://127.0.0.1/ 可以連到這個伺服器的 Home Page,這個 Home Page 其實
是硬碟 C:httpd\htdocs\ 目錄下的 index.htm 檔案。下面進一步的說明,請利
用檔案管理員與瀏覽器來相互對照,以便瞭解硬碟上的文件位置與文件的 URL
是如何關連起來的。

	一、不管您的電腦有沒有連上網路,有沒有 IP Address,都可以執行這個
伺服器,並以瀏覽器透過 127.0.0.1 這個位址來做測試。也就是說,要是您的電
腦同時執行瀏覽器與伺服器,而沒有連上網路的話,則在瀏覽器上輸入 
http://127.0.0.1/,會連到同一部電腦裡的伺服器。如果電腦有連上網路,而且 IP 
Address 是 server's_IP_address 的話,那麼 URL: http://127.0.0.1/ 與 URL: 
http://server's_IP_address/ 都可以連上同一部電腦的伺服器。所以 IP Address 
127.0.0.1 是供您的電腦不接網路時測試用的。

	二、伺服器啟動時,會讀入 C:\httpd\conf\ 目錄下的數個組態檔,以設定伺
服器的環境變數。WinHTTPD 的環境變數都已在組態檔案中「預設」好了,使
用者只要解開壓縮檔後,即可啟動。組態檔中環境變數「文件路徑」會預設為
C:\httpd\htdocs\,「目錄索引檔」會預設為 index.htm
,這些「預設」當然都可以藉由修改組態檔案來做變更。

	三、所謂「文件路徑」是放置您的 HTML 文件供外界以 HTTP 協定取用
的路徑。通常我們以 DOS 或 Windows 命令在「文件路徑」下建立子目錄以便
放置這些 HTML 檔案,如

		C:\httpd\htdocs\lins\faculty\tseng\papers.htm

這時,這個檔案的 URL 為

		http://server's_IP_address/lins/faculty/tseng/papers.htm

注意,/httpd/htdocs/ 不在此 URL裡,那是因為伺服器收到 URL 後,會自動
加入「文件路徑」/httpd/htdocs/,以便在硬碟中找到正確的檔案。所以您必須
將所有的文件放置在「文件路徑」或其子目錄下,才可以對應到正確的 URL。
除非,透過組態命令的設定,才能不受此種「預設」的限制。

	四、所謂「目錄索引檔」,其功用是當伺服器收到沒有指定檔名的 URL 時
(也就是格式如

		http://server's_IP_address/path/ 

之類的 URL),伺服器會自動將預設的「目錄索引檔」index.htm接在這個 URL 
後面,變成 

		http://server's_IP_address/path/index.htm

來當作是這個 URL 所要取用的文件。但是,如果給定的路徑 path 目錄裡找
不到 index.htm,伺服器就把這個目錄裡的檔案名稱送出;其效果就好像使用
者在 DOS 底下,對這個 path 目錄打了 DIR 命令一樣。舉個例子,請把 
C:\httpd\htdocs\index.htm 改名成為 C:\httpd\htdocs\index1.htm,再以 URL: 
http://127.0.0.1/連連看,您就明瞭上面的意思了。如果要馬上看範例展示,
請連至

		http://127.0.0.1/demo/index.htm#treenav

	五、當您以 http://server's_IP_address/ 的 URL連上伺服器而沒有指定路徑
與檔名時,伺服器回應的文件是C:\httpd\htdocs\ index.htm檔案。現在您只要
修改C:\httpd\htdocs\ 目錄下的 index.htm 這個檔案,即可作成您自己的 
Home Page。

	到此,您應該可以建立自己的資料在伺服器上供別人取用了。至於伺服器還
有哪些功能,下面繼續做簡單的介紹。同樣的,詳細資料請您參閱
 WinHTTPD 的線上參考文件

認識 WinHTTPD 的組態檔

	前面的說明顯示,伺服器的行為取決於組態檔案中的環境設定。至於
WinHTTPD 伺服器的組態檔,都放在 C:\httpd\conf\ 目錄下,重要的有httpd.cnf
(主要設定檔)、srm.cnf(資源設定檔)、及access.cnf (存取設定檔)等三
個檔,每個設定檔的重要命令說明如下。

主要設定檔 httpd.cnf

# ServerRoot c:/httpd/

此命令告訴伺服器「組態檔案子目錄」、「錯誤檔案子目錄」、「記錄檔案
子目錄」都放置在 C:\httpd\ 目錄下。注意在組態檔裡牽涉到設定路徑時,幾
乎都是用 UNIX 的習慣,也就是「斜線(/)」而不是 DOS 的「倒斜線(\)」。
另外,此命令前的井字號(#),是表示此行是「註解」的意思。組態檔裡把命
令標示為註解,表示此命令已經「預設」為註解的值了。如果要改變預設值,
就要刪除井字號,使改變的值生效。

# Port 80

由於 UNIX 系統具有多人多工的特性,系統同時可以執行好幾個程式。當
程式透過網路與另一個程式互相溝通時,除了要知道對方的主機位置(即 IP 
Address)外,還要知道對方的 Port Number,才能在眾多的程式中正確地找到另
一個程式。

# ServerAdmin 命令的格式:ServerAdmin <email addr>

此命令在告訴伺服器誰是伺服器的管理員,萬一出現任何錯誤時,伺服器會
通知使用者誰是管理員,使用者就可以將發生錯誤的現象與過程 Mail 給管理員
知曉。所以 <email addr> 應該換成你自己的 Email address。


主要設定檔裡的其他的命令,牽涉到比較進階的應用,在此不做說明,您目前也
可以略過不管。

資源設定檔 srm.cnf

# DocumentRoot c:/httpd/htdocs

這便是設定「文件路徑」的指令,已於前一節描述,請參閱。如要修改
「文件路徑」,請直接修改路徑名稱,並將井字號去掉使之生效。注意在此路徑
使用「斜線」符號,而不是「到斜線」。

# DirectoryIndex index.htm

這是設定「目錄索引檔」的指令,請參閱前一節。所以如果要讓所有的子目
錄的「目錄索引檔」改名為 overvewi.htm 時,就可以透過這個命令作修訂。

# AccessFileName #haccess.ctl

WinHTTPD 可以透過 #haccess.ctl 檔案來控制「文件路徑」及其下每個子
目錄文件的取用權。請參考存取權控制文件

	C:\httpd\htdocs\httpddoc\info\authtut.htm

# Redirect 命令的格式:Redirect fakename url

當某個文件原來是放在這個伺服器,而現在改放到別的伺服器時,使用者如
果還連到目前的伺服器會找不到他要的文件。這個命令可以讓伺服器告訴使用者
原來的文件搬到哪裡去了。

# Alias 命令的格式:Alias fakename realname

文件除了放在「文件路徑」底下外,可以透過此命令放在別的地方。例如,
若 myfile.htm 放在 C:\user\sam\ 底下,則命令

		Alias /mydir/ c:/user/sam/

可讓c:\user\sam\myfile.htm 對應到 

		URL:http://server's_IP_Address/mydir/myfile.htm

# FancyIndexing on

 當 URL 指定到某個目錄而沒有指出檔案時,如果該目錄有 index.htm 
檔,伺服器就會送出此 index.htm 檔。如果該目錄沒有 index.htm 檔,伺服器
就把該目錄下的子目錄與檔案名稱送出,就像使用 DOS 時在該目錄輸入 DIR 
一樣。此命令是告訴伺服器,除了送出子目錄名稱與檔案名稱外,還送出一些關
於檔案的資料。

IndexIgnore ~* *.bak *.{* #readme.htm #haccess.ctl

接續上一個命令的說明,伺服器送出子目錄名稱與檔案名稱時,會根據此命
令,保留一些檔案不送出去,讓使用者看不到不該看到的檔案。上面的設定,將
所有以 「~」開頭的檔案、以 「.bak」結尾的檔案、中間是「.{」的檔案、
「readme.htm」結尾的檔案、及 「#haccess.ctl」檔案,都不讓使用者看到。

存取設定檔 access.cnf

	存取設定檔的說明,請參考範例文件

	C:\httpd\htdocs\httpddoc\info\authtut.htm

及線上說明

	C:\httpd\htdocs\httpddoc\setup\access\overview.htm

如果想看範例展示,請連到

	c:\httpd\htdocs\demo\index.htm#accesshttp://140.136.85.1/~tseng/index.htm#lins84

參考資料

  1. "World Wide Web Frequently Asked Questions," http://www.sinica.edu.tw/www/faq/boutell/index.html
  2. Ian S. Graham, "HTML Sourcebook," John Wiley & Sons, 1995.
  3. 黃燕中,「Internet 網際網路入門指南」,博碩顧問,1995年4月,台北。
  4. 陳建豪譯,「透視 Mosaic 全球資訊網路」,和碩科技,1995年。
  5. 曾瑞源,「Internet 實務手冊第二版」, http://osil.csie.ntu.edu.tw/internet/Internet_Tools/