國網中心 & 青草湖社區大學
王順泰 (c00wht00@nchc.gov.tw)
1. 介紹
在現代的生活中網際網路(Internet)的應用愈益普及,內容也愈加的豐富且多元多樣,其中以全球資訊網(WWW)的使用所佔比例最高,並且仍以驚人的速度成長著。使用者除了可以瀏覽世界各地的網頁之外,更可以將自己精心製作的網頁放到網站上,讓所有其他的人參觀。透過這種互動,整個 Internet 就如同是一個龐大的資料庫,我們可以在上面找到各式各類我們想要的資訊。
那麼我們該如何建立一個 Web 網站呢?首先,我們需要一台可以運作的主機(例如一般廉價的個人電腦),在上面我們還需要有一個平穩強大的作業系統(在此就採用大家最為熟悉的 Linux)。除此之外,我們還需要一套能把網路上的網頁供其它人來存取的軟體,也就是所謂的 HTTP (Web) Server 協定服務軟體,HTTP Server 比較有名的包括:Apache HTTP Server、M$ 的 Internet Information Server、Netscape 的 Enterprise Server 等.. 由於我們使用的作業系統平台是 Linux,因此將針對在 Unix 系統上最受歡迎的 Apache HTTP Server 來做介紹。
Apache HTTP Server 是一個免費且開放源碼的 HTTP 伺服器,主要目的在於提供一個安全並且有效率的 HTTP Server 環境。Apache HTTP Server 目前有 Unix-Based 和 Windows 的版本。根據統計,目前 Apache HTTP Server 已成為佔有率最高的 HTTP Server 軟體,而且它的功能與執行效率並不會比一般商業的 Web Server 軟體來的差,甚至領先許多。Apache HTTP Server 目前的版本分為 1.3.x 版與 2.0.x 版,兩個版本基本上功能都差不多,不一樣的地方在於 2.0.x 的執行效率會比 1.3.x 來得好,因為 2.0.x 程式結合了執行緒〈thread〉與程序〈process〉,讓熟悉系統的管理者能夠調校各種不同的組合,達到最佳效能,而 1.3.x 版只能以程序〈process〉方式來運作,兩者觀念完全不同。另外,2.0.x 版也把許多模組內建在自己的系統裡,詳細的資料可參考 Apache 的家:http://httpd.apache.org/
2. 安裝
2.1 如何取得
Apache HTTP Server 也如同 Linux 眾多的 package 一樣會有版本的更新,新版本通常會增加新的功能或是修正一些 bug,我們可以參考 Apache 的家 http://httpd.apache.org 以得到最新的消息。本例我們以Apache版本 1.3.27 為例,原始程式可以從 請按我 取得。
另外也可以到國網中心的 opensource 網站上取得。請按我
2.2 編譯與安裝
原始程式編譯及安裝
首先將原始程式檔解壓縮。
|
解壓縮: [root@root]# tar zxvf /tmp/apache-1.3.27.tar.gz -C /usr/local/src |
執行 configuration shell script。
|
更換目錄: [root@src]# cd /usr/local/src/apache_1.3.27/ 執行 configure,--prefix 用來指定要安裝的目錄名稱: [root@apache_1.3.27]# ./configure --prefix=/usr/local/apache |
進行編譯。在編譯完成後,需執行安裝步驟。
|
編譯: [root@apache_1.3.27]# make 安裝: [root@apache_1.3.27]# make install |
在編譯安裝完成後,可以執行以下動作來測試是否安裝成功:
|
啟動 apache: [root@apache_1.3.27]# /usr/local/apache/bin/apachectl start /usr/local/apache/bin/apachectl start: httpd started
驗證,如有看到 httpd process 在執行即表示安裝成功: [root@apache_1.3.27]# ps ax | grep httpd 3146 ? S 0:00 /usr/local/apache/bin/httpd
停止 apache: [root@apache_1.3.27]# /usr/local/apache/bin/apachectl stop /usr/local/apache/bin/apachectl stop: httpd stopped |
Debian apt-get 安裝
利用 apt-get 來安裝:
|
[root@root]# /usr/bin/apt-get install apache |
RPM 安裝
在取得 apache rpm 套件後,執行 rpm -ivh 檔名。
|
[root@root]# /usr/bin/rpm -ivh apache-1.3.27.i386.rpm |
3. 設定
在編譯安裝完後,在 /usr/local/apache/conf 目錄中應該會有三個檔案,包括:httpd.conf、srm.conf、access.conf。其中,httpd.conf 用來設定伺服器﹝port號碼、使用者等..﹞。srm.conf 用來設定 設定一般使用者的網站目錄 、網頁目錄的 alias、script 檔與相關 HTML 檔案的位置等。最後,access.conf 用來設定基本存取。雖然新版 Apache HTTP Server 的文件內提到已將 httpd.conf、srm.conf 與 access.conf 這三個檔整合為一個 httpd.conf,但實際上 access.conf 與 srm.conf 仍然存在,只不過沒有內容。以下針對 httpd.conf 檔案內容的設定做簡單介紹。
3.1 httpd.conf 檔的設定
I. 全域環境變數設定
ServerType
語法:ServerType <(inetd)/(standalone)>
預設:ServerType standalone
ServerType 用來指定系統該以何種型態去啟動伺服器。型態可以是其中之一:
- inetd:伺服器將由系統程序 inetd 執行;啟動伺服器使用的命令加在 /etc/inetd.conf 檔案裡。
- standalone:伺服器將會以伺服程式〈daemon〉方式來執行;啟動伺服器使用的命令加在系統啟動指令稿裡〈/etc/rc.d/rc.local 或 /etc/rc.d/init.d/httpd 裡〉。
inetd 在這兩個選項裡比較少使用。因為接收到每個 http 連線就要重頭開始執行另一份新的伺服器程式拷貝;連線結束後,這支程式就會結束,所以每次連線要付出的代價很高,相對的使用者等待時間會加長。但是因為安全上的理由,某些管理者喜歡這個選項。
standalone 是 ServerType 最普遍的設定,因為它是最有效率的執行方式。伺服器程式只啟動一次,而且服務所有的連線。如果我們想要利用 Apache Server 來服務一個忙碌的站臺,standalone 大概將會是唯一的選擇。
例:
|
ServerType standalone -> 指定 apache 以 daemon 方式來執行 |
ServerRoot
語法:ServerRoot <目錄名稱>
預設:ServerRoot "/usr/local/apache"
ServerRoot 用於設定 Apache Server 所安裝的絕對路徑,所有網站相關的襠案都存放在此目錄中。其它配置檔的相對路徑是相對於這個路徑。
例:
|
ServerRoot "/usr/local/apache" -> 指定 apache server 安裝的根目錄為 /usr/local/apache 目錄 |
PidFile
語法:PidFile <檔案名稱>
預設:PidFile /usr/local/apache/logs/httpd.pid
PidFile 用來設定伺服器記錄它的程式之程序號碼所使用的檔案。這樣就不必用 ps 指令來尋找它的程序號碼。而 PidFile 的功能只能使用在 ServerType 為 standalone 的模式。
我們可以藉由傳送 SIGHUP〈kill -1〉信號到列在 PidFile 檔案裡的程序號碼來達成關閉或重新再打開錯誤記錄與傳輸記錄以及重新讀取配置檔等。
例:
|
PidFile /usr/local/apache/logs/httpd.pid -> 指定 apache 執行時要存放記錄 PID 檔案的路徑與檔名 |
TimeOut
語法:TimeOut <數字>
預設:TimeOut 300
TimeOut 用來設定伺服器接收一個請求以及完成一個請求最長的等待時間〈以秒為單位〉,如果在此時間內沒有回應則終止服務。所以當接收或傳送一個資料時所花的時間超過 TimeOut 所規定的時間時,伺服器便將會中斷該連線。如果網路速度較慢,則此 Timeout 時間可以設長一些。
例:
|
TimeOut 500 -> 指定 apache 接收或傳送的等待時間 |
KeepAlive
語法:KeepAlive <(On/Off)>
預設:KeepAlive On
KeepAlive 用於設定伺服器要不要開啟連續請求的功能,On 是開啟,Off 是關閉。
例:
|
KeepAlive On -> 指定 apache 開啟連續請求功能 |
MaxKeepAliveRequests
語法:MaxKeepAliveRequests <個數>
預設:MaxKeepAliveRequests 100
MaxKeepAliveRequests 用於設定伺服器所能接受之最大連續請求量,如果連續請求超過這個此數限制則 Server 會自動拒絕請求連線。若設定為 0 則表示不做限制。
例:
|
MaxKeepAliveRequests 0 -> 指定 apache 不限制所能接收之連線數量 |
KeepAliveTimeout
語法:KeepAliveTimeout <秒數>
預設:KeepAliveTimeout 15
KeepAliveTimeout 用於設定使用者 '連續' 請求等待的時間上限,如果使用者連續請求的時間超過此數,則終止此請求服務。
例:
|
KeepAliveTimeou 15 -> 指定 apache 等待使用者連續請求的時間,在接到使用者請求開始,15 秒內若沒收到新請求訊息,即中斷該連線 |
MinSpareServers / MaxSpareServers
語法:MinSpareServers <數量> / MaxSpareServers <數量>
預設:MinSpareServers 5 / MaxSpareServers 10
MinSpareServers 用於設定最小閒置 (idle) 子伺服程序數量,而 MaxSpareServers 用於設定最大閒置 (idle) 子伺服程序數量。閒置子伺服程序是目前沒有處理要求的程序。如果有多於 MaxSpareServers 的子程序,那麼父程序會終止超過此數量的子程序。如果有小於 MinSpareServers 的子程序,那麼父程序會產生超過此數量的子程序。通常不會將 MaxSpareServers 設很大,只有在非常忙碌的站臺上才有調整這個選項的需要。
例:
|
MinSpareServers 5 -> 設定最少閒置等待服務的伺服程序數量為 5 個 MaxSpareServers 10 -> 設定最大閒置等待服務的伺服程序數量為 10 個 |
StartServers
語法:StartServers <數量>
預設:StartServers 5
StartServers 用於設定啟動時所要建立的子伺服程序數量。因為程序的數量是依據負載動態控制的,通常不需要調整這個參數。
例:
|
StartServers 5 -> 設定啟動 apache 時要建立 5 個伺服程序 |
MaxClients
語法:MaxClients <數量>
預設:MaxClients 150
MaxClients 用於設定同時能夠提供給使用者的最大服務請求數目。
例:
|
MaxClients 150 -> 設定 apache 在同一時間內最大能服務 150 個連線請求 |
II. Server 主要變數設定
Port
語法:Port <數字>
預設:Port 80
Port 設定伺服器用來監聽連線的網路埠號。參數<數字>是 0 到 65535 的一個數目;某些埠號(特別是低於 1024 的)是保留給特殊的協定。請參閱 /etc/services 裡定義的一些埠的列表,而標準的 http 協定則使用 80 埠號。Port 80 是 Unix 中的一個特別埠。所有低於 1024 的埠號都是保留給系統使用的,一般使用者 (non-root) 不能使用它們;取而代之的是他們可以使用較高的埠號。要使用 80 埠你必須以 root 帳號啟動伺服器。如果你不能使用 80 埠,選擇任何其它沒有使用到的埠。非 root 使用者必須選擇高於 1023 的埠號,像是 8000 。
例:
|
Port 8000 -> 設定 apache 的連線埠號為 8000 |
User
語法:User [username / #uid]
預設:User nobody
User 用來設定伺服器程式的執行者是誰。一般是 nobody,也可以是已註冊的使用者,若用 user id 則要先加上 # 號。這個執行者應該不能有存取外界所不能看到的檔案的權限,而且這個執行者應該不能執行對 httpd 要求而言沒有意義的程式碼。建議特別為執行這個伺服器設立新的使用者。
例:
|
User apache -> 設定 apache 程式以 apache 使用者身份來執行 |
Group
語法:Group [groupname / #gid]
預設:Group nogroup
Group 用於設定 httpd 這程式的執行者所屬的群組,一般是 nogroup,此 group 必須要存在於 /etc/group 中。相同於 User 指令,這個群組應該不能有存取外界所不能看到的檔案的權限,而且應該不能執行對 httpd 要求而言沒有意義的程式碼。建議特別為執行這個伺服器設立新的群組。
例:
|
Group apache -> 設定 apache 程式以 apache 群組的身份來執行 |
ServerAdmin
語法:ServerAdmin <電子郵件地址>
預設:ServerAdmin root@localhost
ServerAdmin 用於設定此站台管理者的電子郵件地址,當伺服器發生錯誤時,會傳送這些錯誤訊息給此電子郵件地址。
例:
|
ServerAdmin chanel@armani.com -> 當 apache 發生錯誤時,會傳送這些訊息給 chanel@armani.com 這個 E-mail 的管理者 |
ServerName
語法:ServerName <主機名稱>
ServerName 用於設定該伺服器的名稱,此名稱必須是已經向伺服器本身所在網域的 DNS 註冊。若沒有一個登記的 DNS name,則改為 IP 位址。
例:
|
ServerName www.prada.com -> 設定 apache 主機的名稱為 www.prada.com |
DocumentRoot
語法:DocumentRoot <目錄名稱>
預設:DocumentRoot "/usr/local/apache/htdocs"
DocumentRoot 用於設定伺服器文件或其它資料所在的根目錄位置。伺服器會把連線請求的 URL 附加到根文件目錄 (document root) 來組合到達文件的路徑。
例:
|
DocumentRoot "/usr/local/apache/htdocs" -> 指定文件的根目錄為 /usr/local/apache/htdocs 目錄,若使用者輸入 http://myserver/doc.html,最對映到系統中的 /usr/local/apache/htdocs/doc.html 檔。 |
Directory
語法:<Directory [目錄絕對路徑]> ... </Directory>
Directory 指令區間內的參數是用於設定目錄的相關屬性或控制目錄的權限。使用方法需配合 Order 或 Options 指令。
Order
語法:Order [allow/deny/allow,deny]
Order 用於設定何人可以從這個 Server 取得控制目錄的權限。
例:
|
Oeder allow,deny |
Options
語法:Options <參數>
Options 指令配合 <Directory [目錄絕對路徑]> ... </Directory> 來控制該目錄的屬性,
指令後面的 <參數> 表示可以開啟的屬性種類,所代表的值可以包括:
- All:此目錄除 MultiViews 外,所有屬性都開啟。
- MultiViews:允許 MultiViews 內容。
- Indexes:若該目錄被以 http 的方式讀取,而該目錄中並不存在 index.htm 或 index.html 等索引檔,則會自動將該目錄的檔案資訊轉化成為 HTML 格式傳回給瀏覽器。
- IncludesNOEXEC:開放 SSI (Server-side include) 的權限,但是會關閉 CGI 程式中 #exec 與 #include 的宣告。
- Includes:開放 SSI 的權限。
- FollowSymLinks:准許以符號連結到其他目錄。
- ExecCGI:允許執行 CGI 程式。
- SymLinksfOwnerMath:允許符號連結到的目錄與原始目錄的所有人不同。
例:
|
<Directory /> <-- 設定為根目錄
<Directory "/usr/local/apache/htdocs"> |
UserDir
語法:UserDir <目錄名稱>
預設:UserDir public_html
UserDir 用來指定供使用者放置個人網頁時,該放在自家〈home〉目錄裡的那一個目錄中才能讓人瀏覽。若以 http://myserver/~username 作為開始的一個 URL 連線請求將會被轉換成以 home-dir/public_html 作為開始的檔案名稱,其中 home-dir 是 username 這個使用者的自家目錄。
例:
|
UserDir public_html -> 設定使用者必須把自己的網頁放在自家目錄的 public_html 目錄下才能供人瀏覽。對 http://myserver/~user/dir/file.html 的請求將傳回 http://myserver/home/user/public_html/dir/file.html 這個檔案。 |
DirectoryIndex
語法:DirectoryIndex <檔名1> <檔名2>...
預設:DirectoryIndex index.html
DirectoryIndex 用於設定當使用者端藉由指定沒有以檔案做結尾的目錄名稱請求該目錄的索引時所要找尋的來源列表。參數 [檔名1] 是在伺服器上相對於請求之目錄的文件;它通常是目錄裡某個檔案的名稱。可以有好幾個檔名,伺服器會回傳它所找到的文件。
例:
|
DirectoryIndex index.html -> 對於 http://myserver/docs/ 的請求若該來源設定的檔案存在的話會回傳 http://myserver/docs/index.html。 |
DefaultType
語法:DefaultType <MIME 種類>
預設:DefaultType text/plain
DefaultType 用於設定當伺服器無法辨識檔案類型,要把它當作何種的 MIME 格式。
例:
|
DefaultType text/plain -> 將無法分辨的一律當成明文文字格式 |
HostNameLookups
語法:HostNameLookups <On/Off>
預設:HostNameLookups Off
HostNameLookups 用於設定要不要把自動搜尋 HostName 的功能打開,設定為 On 時,則會記錄進入此網站使用者的主機名稱。設為 Off,則僅記錄使用者主機的 IP。
例:
|
HostNameLookups Off -> 關掉自動反查 IP 功能 |
ErrorLog
語法:ErrorLog <檔案名稱>
預設:ErrorLog /usr/local/apache/logs/error_log
ErrorLog 設定錯誤記錄檔案名稱,伺服器將會把其遭遇的每個錯誤記錄到這個檔案。如果檔案名稱不是以 / 開始的話那麼它就會被假設為相對於 ServerRoot 的路徑。
例:
|
ErrorLog /usr/local/apache/logs/error_log -> 當 apache 發生錯誤時,會把訊息記錄到 /usr/local/apache/logs 目錄下的 error_log 檔中 |
LogLevel
語法:LogLevel <debug/info/notice/warm/error/crit/alert/emerg>
預設:LogLevel warm
LogLevel 用於設定 error_log 中記錄的錯誤訊息種類,建議值是 warm,參數越往右邊所記錄的資訊越簡略。
例:
|
LogLevel debug -> 設定 apache 的記錄錯誤方式為除錯模式〈debug〉 |
Alias
語法:Alias <虛擬目錄> <實際目錄>
Alias 指令用於設定實際目錄至虛擬目錄之別名,可將原本很長的路徑簡化。
例:
|
Alias /doc /usr/local/apache/htdocs/manual/doc/ -> 原本需要用 http://localhost/manual/doc 才能連到的網頁,現在僅需使用 http://localhost/doc 即可。 |
4. 啟動與結束
當設定完 httpd.conf 之後,Apache 的設定步驟就算完成了。現在我們來看如何啟動以及結束 Apache 伺服器程式。
4.1 啟動 httpd
啟動 Apache 伺服器程式的方法非常簡單,執行以下程式,即可將伺服器程式 httpd 啟動:
|
[root@root]# /usr/local/apache/bin/apachectl start |
若使用 apt-get 或 rpm 安裝則可以直接執行位於 /etc/init.d 目錄下的指令稿來啟動:
|
[root@root]# /sbin/service httpd start 或 [root@root]# /etc/init.d/httpd start |
啟動後,可以使用 ps 指令來檢查一下目前 httpd 是否已經在執行:
|
[root@root]# ps axu | grep httpd |
4.2 結束 httpd
結束 Apache 伺服器程式的方法也非常簡單,執行以下程式,即可將伺服器程式 httpd 結束:
|
[root@root]# /usr/local/apache/bin/apachectl stop |
若使用 apt-get 或 rpm 安裝則可以直接執行位於 /etc/init.d 目錄下的指令稿來結束:
|
[root@root]# /sbin/service httpd stop 或 [root@root]# /etc/init.d/httpd stop |
4.3 測試
當啟動 Apache Server 後,可以透過開啟 X Windows 中的 Mollia 瀏覽器來測試,只需在位址列輸入:http://localhost/ 即可。或者可利用 Lynx 文字瀏覽器來測試,用法如下:
|
[root@root]# lynx -dump http://localhost/ |
若看到以下畫面就是代表連線正常安裝完成了。
|
If you can see this, it means that the installation of the [1]Apache |
5. 參考資料
- Apache Reference Manual: http://httpd.apache.org/docs/
- Study Area: http://www.study-area.net/linux/servers/linux_www.htm
- 中文 Linux WWW HOWTO: http://www.linpus.com.tw/nicedoc/CLDP/WWW-HOWTO.html






0 Responses