在開始設定 Apache 之前,你要知道由於主機名稱對於 WWW 是有意義的,所以雖然利用 IP 也能架設 WWW 伺服器, 不過建議你還是申請一個合法的主機名稱比較好。 如果是暫時測試用的主機所以沒有主機名稱時,那麼至少確定測試用主機名稱為 localhost 且在你的 /etc/hosts 內需要有一行:
[root@www ~]# vim /etc/hosts
127.0.0.1   localhost.localdomain localhost
這樣在啟動你的 Apache 時才不會發生找不到完整主機名稱 (FQDN) 的錯誤訊息。此外, Apache 只是個伺服器平台而已,你還需要瞭解 HTML 以及相關的網頁設計語法, 如此才能豐富你的網站。對於想要設計網頁的朋友來說,應用軟體或許是很好入門, 不過想要完整的瞭解網站設計的技巧,還是研究一下基礎的 HTML 或 CSS 比較妥當。
如果你真的對於一些基礎語法有興趣,並且也想要開發一些所謂的『無障礙網頁空間』的話,那麼可以造訪一下 http://www.w3c.org 所列舉的標準語法,或者是行政院的無障礙網頁空間申請規範 (http://www.webguide.nat.gov.tw) 相信會有所收穫的啦!
終於要來談一談如何設定 Apache 這個 httpd.conf 設定檔了!再次強調,每個 distribution 的這個檔案內容都不很相同,所以你必需要自行找出相關的設定檔才行喔!那麼這個 httpd.conf 的設定為何呢?他的基本設定格式是這樣的:
<設定項目>
    此設定項目內的相關參數
    ...........
</設定項目>
舉例來說,如果你想要針對我們的首頁 /var/www/html/ 這個目錄提供一些額外的功能,那麼:
<Directory "/var/www/html">
    Options Indexes
    ...........
</Directory>
幾乎都是這樣的設定方式喔!特別留意的是,如果你有額外的設定時,不能隨便在 httpd.conf 裡頭找地方寫入!否則如果剛好寫在 <Directory>...</Directory> 裡面,呼呼! 那麼就會發生錯誤啦!需要前前後後的找一找喔!或者是在檔案的最後面加入也行!好啦,底下咱們先來聊一聊 Apache 伺服器的基礎設定吧!
 
 
 
 
 
針對伺服器環境的設定項目
Apache 針對伺服器環境的設定項目方面,包括回應給用戶端的伺服器軟體版本、主機名稱、伺服器設定檔頂層目錄等。 底下咱們就來談一談:
[root@www ~]# vim /etc/httpd/conf/httpd.conf
ServerTokens OS
# 這個項目在僅告知用戶端我們伺服器的版本與作業系統而已,不需要更動他。
# 如果不在乎你系統的資訊被遠端的用戶查詢到,則可以將這個項目註解掉即可(不建議)
ServerRoot "/etc/httpd"
# 伺服器設定的最頂層目錄,有點類似 chroot 那種感覺。包括 logs, modules
# 等等的資料都應該要放置到此目錄底下 (若未宣告成絕對路徑時)
PidFile run/httpd.pid
# 放置 PID 的檔案,可方便 Apache 軟體的管理啦!只有相對路徑吧!
# 考慮 ServerRoot 設定值,所以檔案在 /etc/httpd/run/httpd.pid !
Timeout 60
# 不論接收或傳送,當持續連線等待超過 60 秒則該次連線就中斷。
# 一般來說,此數值在 300 秒左右即可,不需要修改這個原始值啦。
KeepAlive On    <==最好將預設的 Off 改為 On 啦!
# 是否允許持續性的連線,亦即一個 TCP 連線可以具有多個檔案資料傳送的要求。
# 舉例來說,如果你的網頁內含很多圖檔,那麼這一次連線就會將所有的資料送完,
# 而不必每個圖檔都需要進行一次 TCP 連線。預設為 Off 請改為 On 較佳。
MaxKeepAliveRequests 500  <==可以將原本的 100 改為 500 或更高
# 與上個設定值 KeepAlive 有關,當 KeepAlive 設定為 On 時,則這個數值可決定
# 該次連線能夠傳輸的最大傳輸數量。為了增進效能則可以改大一點!0 代表不限制。
KeepAliveTimeout 15
# 在允許 KeepAlive 的條件下,則該次連線在最後一次傳輸後等待延遲的秒數。
# 當超過上述秒數則該連線將中斷。設定 15 差不多啦!如果設定太高 (等待時間較長),
# 在較忙碌的系統上面將會有較多的 Apache 程序佔用資源,可能有效能方面的困擾。
<IfModule prefork.c>   <==底下兩個 perfork, worker 與記憶體管理有關!
StartServers       8   <==啟動 httpd 時,喚醒幾個 PID 來處理服務的意思
MinSpareServers    5   <==最小的預備使用的 PID 數量
MaxSpareServers   20   <==最大的預備使用的 PID 數量
ServerLimit      256   <==伺服器的限制
MaxClients       256   <==最多可以容許多少個用戶端同時連線到 httpd 的意思!
MaxRequestsPerChild  4000
</IfModule>
<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
上面的 prefork 及 worker 其實是兩個與伺服器連線資源有關的設定項目。預設的項目對於一般小型網站來說已經很夠用了, 不過如果你的網站流量比較大時,或許可以修訂一下裡面的數值呢!這兩個模組都是用在提供使用者連線的資源 (process),設定的數量越大代表系統會啟動比較多的程序來提供 Apache 的服務,反應速度就比較快。 簡單的說,這兩個模組的功能分類為:
  • 針對模組的功能分類來說:

    worker 模組佔用的記憶體較小,對於流量較大的網站來說,是一個比較好的選擇。prefork 雖然佔用較大的記憶體,不過速度與 worker 差異不大,並且 prefork 記憶體使用設計較為優秀,可以在很多無法提供 debug 的平台上面進行自我除錯,所以,預設的模組就是 prefork 這一個呢!

  • 細部設定的內容方面:(以 Prefork 為例, worker 意義相同)

    • StartServers:代表啟動 Apache 時就啟動的 process 數量,所以 apache 會用到不止一支程序!
    • MinSpareServers, MaxSpareServers:代表最大與最小的備用程序數量。
    • MaxClients:最大的同時連線數量,也就是 process 不會超過此一數量。現在假設有 10 個人連上來,加上前面的 MinSpareServer=5, MaxSpareServers=20,則 apache 此時的程序數應有 15-30 個之意。而這個最終程序數不可超過 256 個 (依上述設定值)!
    • MaxRequestsPerChild:每個程序能夠提供的最大傳輸次數要求。 舉例來說,如果有個使用者連上伺服器後(一個 process),卻要求數百個網頁,當他的要求數量超過此一數值, 則該程序會被丟棄,另外切換一個新程序。這個設定可以有效的控管每個 process 在系統上的『存活時間』。 因為根據觀察所得,新程序的效能較佳啦!
在上面的設定中,比較有趣的是 MaxClients 這個程序模組的參數值,如同上面的說明,這個 MaxClients 設定值可以控制『同時連上 WWW 伺服器的總連線要求』數量,亦即想成最高即時線上人數啦。 不過你要注意的是,MaxClients 的數量不是越高越好,因為他會消耗實體記憶體 (與 process 有關嘛),所以如果你設定太高導致超出實體記憶體能夠容許的範圍,那麼效能反而會降低 (因為系統會使用速度較慢的 swap 啊),此外, MaxClients 也在 Apache 編譯時就指定最大值了,所以你也無法超出系統最大值, 除非...你重新編譯 Apache 啦!
除非你的網站流量特別大,否則預設值已經夠你使用的了。而如果你的記憶體不夠大的話,那麼 MaxClients 反而要調小一點,例如 150 ,否則效能不佳。那,apache 到底是使用那個模組啊?prefork 還是 worker ?事實上 CentOS 將這兩個模組分別放到不同的執行檔當中,分別是:
  • /usr/sbin/httpd:使用 prefork 模組;
  • /usr/sbin/httpd.worker:使用 worker 模組。
那如何決定你使用的是哪一支程式?你可以去查閱一下 /etc/sysconfig/httpd , 就能夠知道系統預設提供 prefork 模組,但你可以透過修改 /etc/sysconfig/httpd 來使用 worker 模組的。 如果你很有好奇心,那麼可以分別試著啟動這兩種模組啊!接下來,繼續瞧瞧其他的伺服器環境設定參數吧!
Listen 80
# 與監聽介面有關,預設開放在所有的網路介面啊!也可修改埠口,如 8080
LoadModule auth_basic_module modules/mod_auth_basic.so
....(底下省略)....
# 載入模組的設定項目。Apache 提供很多有用的模組 (就是外掛) 給我們使用了!
Include conf.d/*.conf
# 因為這一行,所以放置到 /etc/httpd/conf.d/*.conf 的設定都會被讀入!
User apache
Group apache
# 前面提到的 prework, worker 等模組所啟動的 process 之擁有者與群組設定。
# 這個設定很重要,因為未來你提供的網頁檔案能不能被瀏覽都與這個身份有關啊!
ServerAdmin vbird@www.centos.vbird  <==改成你自己的 email 吧
# 系統管理員的 email,當網站出現問題時,錯誤訊息會顯示的聯絡信箱(錯誤回報)。
ServerName www.centos.vbird    <==自行設定好自己的主機名稱較佳!
# 設定主機名稱,這個值如果沒有指定的話,預設會以 hostname 的輸出為依據。
# 千萬記得,你填入的這個主機名稱要找的到 IP 喔!(DNS 或 /etc/hosts)
UseCanonicalName Off
# 是否使用標準主機名稱?如果你的主機有多個主機名稱,若這個設定為 On,
# 那麼 Apache 只接受上頭 servername 指定的主機名稱連線而已。請使用 Off。
在某些特殊的伺服器環境中,有時候你會想要啟動多個不同的 Apache,或者是 port 80 已經被使用掉了,導致 Apache 無法啟動在預設的埠口。那麼你可以透過 Listen 這個設定值來修改埠口喔!這也是個很重要的設定值。 此外,你也可以將自己的額外設定指定到 /etc/httpd/conf.d/*.conf 內,尤其是虛擬主機很常使用這樣的設定,在移機時會很方便的