在具體講解之前,我們必須告訴大家,Apache已經在安裝時就採用了一系列的預設值,已經讓WWW伺服器跑起來了。你只需要將裝上Linux+Apache的主機聯入Internet,然後將首頁存放到“/home/httpd”目錄下即可。
下面介紹一些最主要的配置選項的含義,以便大家用最小的精力、最小的配置準備好伺服器。
4.1 httpd.conf
httpd.conf是主設定檔。它告訴伺服器將如何運行。
一、最重要的配置選項ServerType standalone | inetd
這個配置選項指定如何運行WEB伺服器。Apache可以使用兩種方法來運
行伺服器:standalone(獨立的)和inetd(由inetd啟動並執行)。
standalone參數表示WEB服務進程以一個單獨的守候進程的方式在後台偵聽是否有用戶端的請求,如果有就產生一個子進程來為其服務。
inetd參數表示WEB服務不是以一個單獨的守候進程的形式支援。而是由Inetd這個超級伺服器守候進程進行代勞,當它收到一個用戶端的WEB服務要求的時候,再啟動一個WEB服務進程為其服務。
從功能的角度看,這兩種方法幾乎是相同的。但它們之間實際有很大區別,區別在於伺服器的效能。一個由inted啟動並執行伺服器處理序在它結束對請求服務的同時立刻退出。而在standalone模式下,子WWW伺服器處理序在退出之前要掛起一段時間,這就給它們提供了機會,可以重新用來服務新的請求。
在standalone模式下,不存在對每個請求啟動新進程的開銷,所以它的效率更高;而inetd模式被認為比standalone模式更具安全性。
standalone模式:
此種模式下,WWW伺服器偵聽特定連接埠的串連請求。當客戶機發出到特
定連接埠地址的串連請求時,主伺服器進程啟動子WWW服務進程來服務該請求。如所示:
圖2 獨立伺服器
另外還需要告訴主伺服器進程偵聽的特定連接埠地址,使用命令:
Port [number] (預設值為80)
inetd模式
inetd是偵聽有小於1024的連接埠串連請求的Internet守護進程(一個伺服器處理序)。與前面的方法不同,當客戶系統發出到WWW伺服器的串連請求時,inetd啟動一個WWW伺服器處理序,由此進程服務此請求,完成服務後即退出。如所示:
圖3 由inetd啟動的伺服器
如果選擇通過inetd伺服器來運行Apache,需要編輯/etc/inetd.conf檔案為Apache添加一條新的記錄:
httpd stream tcp nowait httpd /etc/httpd/bin/httpd –f /etc/httpd/conf/httpd.conf
修改了/etc/inetd.conf檔案後,就需要修改/etc/services中添加一行
httpd 80/tcp httpd
做完以上修改後,需要重新啟動inetd進程。首先,使用以下命令取得inetd的進程ID:
ps auxw |grep inetd
然後執行命令:kill –HUP
在RedHat Linux中,預設是採用inetd伺服器來運行Apache,所以只要你在安裝時選擇了httpd,以上工作在安裝時就已經代你完成了。
二、其它配置選項
Server Admin命令,用來設定WEB管理員的E-Mail地址。這個地址會出現在系統串連出錯的時候,以便訪問者能夠將情況及時地告知WEB管理員。
命令格式: Server Admin [you E-Mail address]
例:Server Admin admin@xxx.com
ErrorLog命令,用來指定錯誤記錄檔案名稱和路徑。
命令格式: ErrorLog [log filename]
例:ErrorLog /var/httpd/error.log
Timeout命令,只要用戶端超過這裡設定的秒數還沒有完成一個請求的話,服務端將終止這次請求服務。如果網路速度較慢的話,建議在此設定較大的數值。以給用戶端更多機會。
命令格式: Timeout [second]
例:Timeout 120
ServerRoot命令,它指定在何處儲存伺服器的配置、錯誤及記錄檔。
命令格式: ServerRoot [fully qualified path name]
例:ServerRoot /etc/httpd
ServerName命令,它設定管理員的Internet主機名稱
命令格式: ServerName [host name]
例:ServerName www.xxx.com
4.2 srm.conf
srm.conf是資源設定檔,用它來告訴伺服器你想在WWW網站上提供什麼資源以及在哪裡和如何提供它們。
DocumentRoot命令,用來指定主文件的地址。
命令格式: DocumentRoot [Path]
例:DocumentRoot /home/httpd/html
UserDir命令,用來指定個人首頁的位置。如果你有一個使用者test,那麼它主目錄是“/home/test”,當用戶端輸入“http://yourdomain/~test”,系統就會到對應的目錄“/home/test/UserDir/”中去尋找。其中“UserDir”就是在UserDir命令中設定的指定目錄。
命令格式: UserDir [Path]
例: UserDir Public_html
DirectoryIndex命令,用來聲明首頁檔案名稱。一般地,我們使用“index.html”或“index.htm”作為首頁的檔案名稱。如果這樣設定後,那麼用戶端發出WEB服務要求時,將首先調入的首頁是在指定目錄下檔案“index.html”或“index.htm”。
命令格式: DirecotryIndex [filename]
例:DirecotryIndex index.html index.htm
ScriptAlias命令,為指令碼程式目錄起個別名,具體可見4.7小節。
命令格式: ScriptAlias [/alias/] [fullly qualified path for script directory]
例: ScriptAlias /cgi-bin/ /home/httpd/cgi-bin
4.3 access.conf的配置
access.conf檔案用來設定WWW網站上諸如檔案、目錄和指令碼項目的存取權限。該檔案的第一段非注釋部分如下:
Option Indexes Includes ExecCGI FollowSymLink
AllowOverride None
Order allow , deny
allow from all
大家應該注意到,這一個部分是以開始,以結束的。這表示在其中間的部分都是針對指定目錄“/home/httpd/html”而言的。
1.Option命令有很多的參數,各個參數的意義如下所示:
All 准許以下所有功能(MultiViews除外);
MultiViews 准許內容協商的Multiviews;
Indexes 若該目錄下無index檔案,則准許顯示
該目錄下的檔案以供選擇;
IncludesNOEXEC 准許SSI(Server-side Includes),但不可
使用#exec和#include功能;
Includes 准許SSI;
FollowSymLinks 准許符號連結到其他目錄;
ExecCGI 准許該目錄下可以使用CGI。
2.而AllowOverride命令則是用來決定是否准許在“access.conf”檔案中設定的許可權是否可以被在檔案“.htaccess”中設定的許可權覆蓋。它有兩個參數:
All 准許覆蓋;
None 不準許覆蓋。
3.Order命令:用來設定誰能從這個伺服器取得控制。它也有兩個參數:
allow 可以取得控制;
deny 禁止取得控制。
現在我們一起來看看關於目錄“/home/httpd/html”的設定的含義:它使得這個目錄,如果不存在index.htm檔案時,列出目錄資訊以供選擇,准許SSI,允許執行CGI程式,開啟了動態串連。它不允許再使用在檔案“.htaccess”中設定來覆蓋這裡所設定的許可權。使所有的人都可以取得控制。
該檔案的第二段非注釋部分如下:
Option ExecCGI
AllowOverride None
這個表示目錄“/home/httpd/cgi”的設定為,目前的目錄下可以執行CGI程式。不允許再使用在檔案“.htaccess”中設定來覆蓋這裡所設定的許可權。
需要說明的是,不同的LINUX系統中,可以在這個檔案中看到的資訊不完全相同,但是根據這裡給出的資訊,大家可以參照命令的解釋自行理解檔案中的設定,以及根據自己的需要進行相應的修改。
4.4 使新的配置生效
在上面,我們可能已經根據新的需求更改了相應的配置選項,如果我們要
使得這個新的配置立即生效。我們就必須重新啟動WEB服務進程。在LINUX中,我們可以十分方便地使用命令列來使得WEB服務進程重啟。
/etc/rc.d/init.d/httpd restart