伺服器架設篇 - RedHat 9

第十八章、簡易 WWW 伺服器設定

Linux + Apache + MySQL + PHP (LAMP) 架設詳解囉!

最近更新時間: 2003/10/02

本文資料主要針對 RedHat 9 的系統進行說明,要注意的是,RedHat 9 與 Red Hat Enterprise Linux (RHEL) 是完全不同的東西!RedHat 9 在 2003 年推出,在 2004 年就不再維護了!這部份網站更新到 2005 年,也沒有再維護過! 因此,建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 RedHat 9 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
我們最常講的『架站』其實就是架設一個 Web 網站啦!那麼什麼是 Web 呢?說穿了,就是全球資訊廣播的意思(World Wide Web),或者也可以稱之為互連網吧!這個是我們目前的人類最常使用的 Internet 的協定之一啦!通常說的上網就是使用 WWW 來查詢使用者所需要的資訊囉!^_^!目前的 WWW 伺服器主要分為兩大陣營,分別是 Unix-Like 上面的 Apache 與 Windows 上面的 IIS ,就以價格效能比來說,當然是 Linux 上面的 Apache 最棒啦!至於 WWW 伺服器的類型可以分為靜態與動態,而這些動態的網站裡面,很多都是以目前的當紅炸子雞 Linux + Apache + MySQL + PHP 架設而成的,簡稱為 LAMP 的咯!這種動態 WWW 主機很有趣喔!他可以溝通 Server 與 Client 端的資料呢!趕緊來進入這個 LAMP 的世界吧!

原理:什麼是 WWW 與網址

    WWW 是 World Wide Web 的縮寫,其中, Web 有廣播網的意思存在,所以,簡單的說,WWW就是全球資訊網,可以結合文字、圖形、影像及聲音等多媒體,並透過 超連結 ( HyperText ) 的方式,將資訊透過 Internet 傳遞到世界各處!那 WWW 的資料是如何傳遞的呢?
     
    如果你常上網瀏覽的話 ( 不論是使用 Mosilla 、IE 或是 Netscape ),你應該會知道,臺灣有個蠻有名氣的入口網站:奇摩雅虎站 ( tw.yahoo.com ),所以你只要在網址列上面輸入『  http://tw.yahoo.com 』就可以瀏覽到奇摩雅虎的網頁資訊囉!這個http://tw.yahoo.com就是所謂的 URL ( Uniform Resource Locator ) ,其中 tw.yahoo.com 就是所謂的主機名稱,亦即是我們前面剛剛提過的 DNS 裡頭的 FQDN ( Fully Qualified Domain Name ) ,即是主機名稱加上領域名稱所得的一個獨一無二的 Internet 上面之名字啦!由於電腦在網路裡面僅認識 IP 而已,所以,奇摩雅虎站的真實 IP 就是透過 DNS 解析 tw.yahoo.com 而找到這部電腦,然後經過 WWW 的協定功能將資料傳到你的眼前來!那麼有哪些格式的 URL 呢?呵呵!整個來說,網址列可以輸入這些咚咚:
     
    <協定>://<主機位址>[:port]/<目錄資源>
     
    • 協定:包括 http, ftp, news, gopher, telnet 這幾種常見的方法! 其中呢,http 是利用『主機的 http port ,通常為 80 』,至於 ftp 這個方法則是利用『主機的 ftp port ,通常為 21 這個埠口』,請注意喔,我們使用的 80 與 21 都是主機所提供的服務喔!而不是我們 client 端的 port ㄋㄟ,所以,使用 http 與 ftp 連上同一部電腦,所取得的資訊並不見得會一樣,因為服務本身就不同嘛!一個是 WWW 一個是 ftp 怎麼會相同。此外,如果你沒有指定協定的話,那麼預設的協定就需要看客戶端 ( Client ) 使用的那個連線程式的預設協定了!舉個例子來說,如果你是使用 Netscape 的話,呵呵!那麼預設的協定就是 http 囉,因此,你在網址列輸入 tw.yahoo.com 時, Netscape 立刻就會以 http 來連接出去囉! ^_^;

    •  
    • 主機位址:剛剛才提過的 FQDN 應該還沒有忘記吧!由於電腦僅認識 IP ,所以,如果你輸入 IP 的話,同樣的可以連線喔!但是,如果是輸入主機名稱 ( domain name ) 的話,那麼你就必需要讓該主機名稱可以經由轉譯器得到對應的 IP 喔!轉譯器是什麼?就是 /etc/hosts 或者是 /etc/resolv.conf 裡面的設定啊!當然,對外提供正常的 WWW 服務時,你的 host name 就必需要讓大家可以轉譯到 IP ,就需要去申請一個合法的領域名稱囉! ^_^

    •  
    • 目錄資源:其實這個是 Uniform Resource Indicator, URI 的意思,如果你要去的網站網頁在主網頁的目錄底下,那麼你可以直接輸入目錄與網頁的名稱,就可以直接取得那個頁面的資料囉!此外,如果你只輸入網址而已呢?並沒有輸入網頁名稱呢?那麼在 Server 端將會自動的判斷 ( 看 Server 自己的設定而定 ) 該目錄下是否有設定中引用的網頁名稱囉!這個在底下我們會再次的提到喔!

    •  
    • :port:一般而言,各個協定都有其獨特的使用的 port ,例如眾所皆知的 http 使用的是 80 而 ftp 使用的是 21 這些個 port,所以,當你要連接到某個網站時,輸入 http://that.host.name 就會主動的利用 80 那個 port 來嘗試連接到對方主機!但是如果你不想要使用該 port 呢?舉個例子來說,假如你的網站使用的是 8080 這個 port 來進行 WWW 的服務,果真如此的話,那麼除非你有進行防火牆內的 port 對應,否則直接在網址列輸入 http://your.host.name 結果將無法連接到你的 WWW 伺服器,因為他會主動的連接到 80 那個 port 吶!所以,我們就要告訴瀏覽器,要向 Server 要求服務的是哪一個 port ,因此,你就要將他寫成: http://your.host.name:8080!才可以連接到對方的 8080 那個 port 喔!
     
    舉個例子來說,我們通常去到中山大學的 FTP 網站都是以 Web 介面進入的,因為可以直接以瀏覽與搜尋的功能去捉取資料,因此,這個時候我們可以在網址列輸入:『 http://ftp.nsysu.edu.tw 』以進入 WWW 介面的 FTP 網站!請注意,是 WWW 介面喔!那麼如果我想要直接以 FTP 的模式來進行資料的瀏覽與傳輸呢?呵呵!直接在網址列輸入以 ftp 為方法的網址:『 ftp://ftp.nsysu.edu.tw 』呵呵!是否發現兩者顯示的咚咚不太相同?!沒錯啦!那就是因為我們所連接的主機的協定不一樣的緣故,所以主機回應的資料當然就不同啦!請特別留意這種網址列的格式喔!
     

    Client 如何向 Server 要求資料:
     
    那麼 WWW 是透過什麼樣的協定來傳達資料的呢?呵呵!沒有看到網址列的 http 嗎?對啦! WWW 就是使用所謂的 http 這個協定來傳送資料的,HTTP 即是 HyperText Transfer Protocol 的簡寫,亦即是目前 WWW 的資料傳遞主流協定啦!而在網站上面供人瀏覽的網頁,則大部分需要符合 HyperText Markup Language (HTML) 的語法囉!也就是說,當我們在網址列輸入主機的網址之後:
     
    1. Client 端先經過 DNS 解析得到 WWW 主機的 IP ,然後會發出一個資料封包,以 http 這個協定( 或方法 )聯繫到 WWW 主機,告知 WWW 主機我們要以 http 的方法來取得資料,同時,這個時候使用的是 TCP 協定,亦即需要經過三向交握的過程喔;
    2. WWW 主機收到這個資料封包之後,會根據 Client 端的要求,提供相關的訊息來回應,大部分的情況下皆是使用 http 的協定傳送具有 HTML 語法的網頁資料到 Client 端的瀏覽器上;
    3. 最後 Client 端的瀏覽器將 HTML 的語法經過解析後,以相關的畫面來顯示到螢幕上,提供用戶來觀賞喔!
     
    這就是主要的流程啦,不過,Client 傳到到 WWW 主機,與 WWW 主機回應的訊息裡面,可包含有哪些可能的動作呢?
     
    • GET:這是最常見的,就是 Client 端向WWW 主機要求的資源,也可以看成 Client 端向主機取得的資料;
    • HEAD:主機端回應給 Client 端的一些資料檔頭而已;
    • POST:Client 端傳送到 WWW 主機端的資料;
    • OPTIONS:主機端回應給 Client 端的一些允許的功能與方法;
    • DELETE:刪除某些資源的舉動。
     
    大致上就有這些功能,當然啦,最主要的就是 GET 這個功能啦!畢竟我們連上 WWW 主機就是為了要取得他的資料嘛! ^_^。要記住的是,因為未來我們可能會去分析網站上的資料,所以,你必需要瞭解一下什麼是 GET 或 HEAD 等等的意思!不然很多東西很難理解喔! ^_^
     

    有哪些類型的 WWW 網站?什麼是 LAMP?
     
    剛剛前頭我們提到的都是關於 Client 端相對於 Server 端求取資料方面的問題,那麼再來要談的,是『咦!到底有哪些主要的 WWW 主機作業系統與軟體之搭配呢?』呵呵!問的好!在回答這樣的問題之前,我們先來討論一下, WWW 主機的主要類型好了。基本的類型我們可以分為兩種:
     
    • 僅提供使用者瀏覽的網站:這種類型的網站大多是提供『靜態』的網頁,或許有提供一些動畫圖示,但基本上就僅止於此啦!因為他僅提供你來瀏覽,Server 不需要與 Client 端互動,所以你可以到該網站上去瀏覽,但是無法進行進行資料的上傳喔!目前主要的免費虛擬主機大多是這種類型,所以,你只要依照 HTML 的語法寫好你的網頁,並且上傳到該網站空間上,那麼你的資料就可以讓大家瀏覽了!

    •  
    • 提供與使用者互動介面的資料庫網站:這類型的網站可就多采多姿啦!因為他提供了與使用者互動的資料庫軟體,因此,使用者可以依據主機提供的服務,來進行留言、資料上傳、存取的服務。由於 Server 與 Client 是互動的,因此一個介面良好的『資料庫軟體』就相當的重要!因為他可以線上即時來更新使用者所傳遞的資料訊息!這方面的網站例如最簡單的留言版、討論區、phpBB 架站論壇、phpnuke 架站論壇、金流與物流的商業型網站等等,都是屬於這種互動類型的主機喔!
     
    呵呵!這麼看起來的話,似乎動態網頁比較精彩喔!因為他可以跟使用者互動,也就更增加 WWW 主機的可變性與靈活運用之性質!所以囉,有辦法的話,當然是選擇動態網站的 WWW 主機架設比較好囉!那麼動態網頁的 WWW 主機需要些什麼呢?就如同剛剛我們提到的,最重要的是那個可以隨時更新資料的『資料庫軟體』所提供的資訊,來與使用者互動,因此,一定要有資料庫軟體喔!再來,只有資料庫,沒有存取介面來溝通 Server 與 Client 端的資料傳遞當然還是無法直接在 Web 介面上面存取資料庫的內容啦!因此,我們還需要一個『網頁程式語言』來進行這個介面的編寫哩!當然啦,最主要的還有就是需要 WWW 運作的軟體啦!所以你需要:
     
    • WWW 運作的主要軟體:(目前有 Apache 與 IIS 兩大系統)
    • 資料庫軟體:(例如 MySQL, MS 的 SQL, 及其他相關的資料庫)
    • 編寫網頁的網頁語言:(例如 shell scripts, perl scripts, Java, PHP CGI 等等)
     
    那目前有哪些主流的個人動態 WWW 主機系統呢?大致上可以分為兩種:一種是 Windows 系統的 IIS + MS 的 SQL + ASP WWW伺服器,這種 WWW 主機架設上蠻容易的,不過由於 Windows 的某些特性,所以很容易被 Cracker 所破壞;另外一種則是 Linux 系統上面的 Apache + MySQL + PHP 的 WWW 伺服器 ( 簡稱 LAMP ) ,這種伺服器架設上有一定程度的困難度,尤其在升級與維護的方面,但是運作妥當的話,他的硬體要求、性能、安全性等方面,則相對的較佳喔!我們這裡本來就是練習 Linux 的嘛!因此底下鳥哥將針對 Linux 系統上面的動態 WWW 主機進行介紹,當然啦,主角是 WWW 套件的 Apache 啦!至於需要瞭解的是: PHP 與 MySQL 分別是兩個獨立於 Apache 的套件,因此要讓 Apache 這個 WWW 軟體能夠啟用 PHP 與 MySQL 的功能,就必需要啟動 Apache 裡面的 PHP 與 MySQL 的模組啦!首先,不能免俗的,我們還是得分別介紹一下 LAMP 裡面各個小東西的說明:
     
    • Apache :在 1995 年之前就有蠻多的 Web 架設伺服器軟體的出現,不過,真正到了 1995 年之後,由國際超級電腦應用中心 ( National Center for Supercomputing Applications, NCSA ) 主導並克服了一些 Web 主機的臭蟲之後,才讓這個 http 協定的 WWW 套件得到了更廣泛的應用!而因為這個釋出的版本是來自於一些臭蟲的克服,因此,這個 WWW 套件被戲稱為『 A patchy server 』,意思就是說,一個經過更新後的 Server 的意思!後來,因為要將名字確定下來,乾脆就直接取其諧音,用『 Apache 』,這也就是我們要介紹的 WWW 軟體啦!

    •  
    • PHP官方的說法為:『PHP is a tool that lets you create dynamic web pages. PHP-enabled web pages are treated just like regular HTML pages and you can create and edit them the same way you normally create regular HTML pages.』所以說, PHP 可簡單的視為一種程式語言,可以用來設計留言版、討論區、或聊天室等等的動態網頁的咚咚!由於他具有免費、跨平台、易學及效率高等等的優點,目前算是很盛行的一種設計網頁的咚咚啦! ( 基本上,PHP是使用來設計網頁的程式語言,當然其功能不只如此!你可以輕易的在市面上找到相關的書籍喔 )

    •  
    • MySQL:將官方網站上的翻譯文件中這麼說:『MySQL是一個真正的多使用者、多執行緒SQL資料庫伺服器。SQL(結構化查詢語言)是世界上最流行的和標準化的資料庫語言。MySQL是以一個客戶機/伺服器結構的實現,它由一個伺服器背景執行程式mysqld和很多不同的客戶程式和庫組成。SQL是一種標準化的語言,它使得儲存、更新和存取資訊更容易。例如,你能用SQL語言為一個網站檢索產品資訊及儲存顧客資訊,同時MySQL也足夠快和靈活以允許你儲存記錄文件和圖像。MySQL 主要目標是快速、健壯和易用。』簡單一點來說,這個東西就是一個資料庫軟體啦!例如:你在設計討論區的時候,由於討論的文章會日漸增多,因此就會有所謂的資料庫處理的情況,MySQL 的目的就是在處理你這些由用戶端傳送來的資料。當然,其功能還不只此,我這裡僅說一些我們可能用的到的咚咚!
     

    SSL 與 CA 的認證機制:
     
    我們在前頭有提過關於 HTTP 使用在傳輸上面的協定仍然是以 TCP/IP 為準,他傳輸的時候是使用明碼來傳送的,也就是說,在 Internet 上面流竄的 WWW 資料,基本上,都是以沒有加密過的形式在傳送資料!那麼,當有些有心人士,利用 TCP Listen 的功能,即可將 Internet 上面的資料封包捉下來進行解析,並可能進一步取得該資料封包內的資訊!『嗄!這有什麼了不起,不過就是 WWW 資訊而已,又不像 SSH 這種遠端連線伺服器的重要!』嘿嘿!這您可就有所不知了。要曉得的是,我們的網站並不涉及金流及物流的資訊,所以當然沒有什麼『隱密性』可言,但是,如果今天換成是一個交易網站呢?例如網路書店的信用卡交易,例如一些金融公司提供的網路交易行為!這些訊息當中,很多都是含有相當重要的私人訊息ㄋㄟ~例如信用卡、身份證等代表個人的證號。萬一被人擷取,呵呵!那可不是鬧著玩的!所以囉,這個時候就需要有『資料加密』的動作了!目前用在 WWW 上面的主要加密功能,有 Secure Socket Layer ( SSL ) 及 Certificate Authorities ( CA )兩個主要的模式。
     
    Secure Socket Layer ( SSL )
    不曉得您是否還記得我們在 遠端連線伺服器 裡面提到的關於 SSH 這個伺服器的連線過程!?也就是利用 Server 提供的 Public Key 並配合 Client 端隨機產生的 Private Key 來組成一組加密( Public Key )與解密( Private Key )的方法!呵呵!這個方法同樣的也被運用於 WWW 主機的設定啦!而支援這個 WWW 主機進行 Public 與 Private 加密的套件,就是很多時候都被拿出來使用的 OpenSSL 這個好傢伙了!所以囉,要讓你的 WWW 具有 SSL 加密的功能,就必需要安裝 OpenSSL 這個套件才成吶!基本上,當 Client 端要向 Server 端求取資料的時候,則利用 Server 端本身提供的 Public Key 及 Client 端隨機產生的 Private Key 組成一組可供利用的密碼組合!則資料由 Server 傳送到 Client 端之前,會先經由 Server 的 Public Key 將資料封包加密,而到了 Client 之後,才經由 Private Key 將資料解密!所以,當資料在 Internet 上面跑時,他是加密過的資料封包喔!即使被人劫取下來,他不曉得 Public 與 Private ,那麼要解密可能也得費上幾天幾夜,甚至是好幾年的功夫ㄋㄟ!因此,資料就會比較安全啦!當然啦,以我們這種主要以分享為主的網站,自然不需要使用這種技術!反正資料本來就是 Open 的! ^_^
     
    Cerificate Authorities ( CA )
    CA 這個方法同樣也是使用 Public 與 Private Key 的方式, ( 呵呵!我們可以說,目前加密與解密的行為大部分都是使用這種類似的觀念來進行的啦! ) 由於 SSL 使用的 Public 是 WWW Server 自行建立與產生的,所以具不具有公信力我們還不是很清楚!萬一你連上去的 WWW 網站是個騙人的集團建立的,那麼有沒有加密對你而言,不都是粉危險的嗎?咦!那麼是否可以透過第三公證人來查驗這個 Server 的 Public Key 呢?呵呵! CA 這個方法就是要達成這個目的啦!基本上, CA 是一個公認的合法組織,他可以用來查驗 WWW Server 提供的 Public Key 是否合法!以保障 Client 者的權益。因此, CA 是要錢的喔!
     
    我們這裡對於 SSL 及 CA 這兩個咚咚僅提及他的概念,底下的文章並沒有提到要怎麼製作!有興趣的朋友得自行到相關的網站去查詢喔:
     

套件安裝

    好了,終於提到了我們要安裝的 LAMP 的地方啦!如何安裝 LAMP 呢?基本上仍然是有兩種方式的,一個是 RPM 另一個就是 Tarball 啦!詳細的觀念請參考 鳥哥的 Linux 私房菜--基礎學習篇 裡面的RPM 與 Tarball 這篇文章吧!請仔細的閱讀喔!因為兩種方法安裝上的難易度差異性很大,而且眾所皆知的, RPM 的檔案與 (1)Linux 發行廠商與版本 (2)及其他相依套件 之間有很大的相依性,所以你不能隨便的拿網路上得到的 RPM 檔案來安裝!但是 Tarball 又很難安裝完整!唉~真是兩難!底下我們分別以 RPM 與 Tarball 的安裝來說明!在 RPM 方面,我們分別以 Mandrake 9.0Red Hat 9Apache + MySQL + PHP 來說明,其中 Mandrake 提供的是 Apache 1.3.xx 版本,至於 Red Hat 9 則是提供 httpd-2.xx 版本 ( 註:Apache 這個套件在 2.x 以後的版本當中,套件名稱已經改為 httpd 了,原來的 1.3.xx 版本則是以 apache 為套件名稱喔!)至於 Tarball 的方式,則都以最新的 Apache + MySQL 及 PHP ( 2003/09/10 )來安裝啦!如果您還是希望以 Apache 1.3.xx 版本來安裝您的 LAMP 時,那麼請參考這篇: LAMP 的安裝方法(http://linux.vbird.org/linux_server0360apache-1.php)底下的 Tarball 安裝方式僅適合 Apache 2.xx 版喔!不要搞錯囉! ^_^
     

    RPM 安裝 LAMP 方式:以 Mandrake 9.0 與 Red Hat 9.0 為例
     
    既然要安裝 LAMP 自然需要 Linux 系統,以及 Apache, MySQL 及 PHP 囉!我們以 Mandrake 9.0 提供的作業系統,及預設的相關檔案來安裝起所需要的套件!需要的套件至少有:
     
    • 相關的函式庫安裝:
      • libmm1-1.1.3-10mdk.i586.rpm
      • libmm1-devel-1.1.3-10mdk.i586.rpm
      • libmm1-static-devel-1.1.3-10mdk.i586.rpm
    • PHP 安裝:
      • php-common-4.2.3-1mdk.i586.rpm
      • php-4.2.3-1mdk.i586.rpm
      • php-devel-4.2.3-1mdk.i586.rpm
      • php-imap-4.2.3-1mdk.i586.rpm
      • t1lib1-1.3.1-6mdk.i586.rpm
      • php-gd-4.2.3-1mdk.i586.rpm
    • MySQL 安裝:
      • libmysql10-3.23.52-1mdk.i586.rpm
      • MySQL-client-3.23.52-1mdk.i586.rpm
      • MySQL-3.23.52-1mdk.i586.rpm
      • php-mysql-4.2.3-1mdk.i586.rpm
    • Apache 安裝:
      • apache-common-1.3.26-6mdk.i586.rpm
      • apache-conf-1.3.26-3mdk.i586.rpm
      • apache-modules-1.3.26-6mdk.i586.rpm
      • apache-1.3.26-6mdk.i586.rpm
      • apache-manual-1.3.26-6mdk.i586.rpm
      • libgdbm2-devel-1.8.0-18mdk.i586.rpm
      • libdbtcl3.3-3.3.11-11mdk.i586.rpm
      • libdb3.3-devel-3.3.11-11mdk.i586.rpm
      • db1-devel-1.85-8mdk.i586.rpm
      • apache-devel-1.3.26-6mdk.i586.rpm
      • mod_php-4.2.3-1mdk.i586.rpm
      • mod_perl-common-1.3.26_1.27-7mdk.i586.rpm
      • apache-mod_perl-1.3.26_1.27-7mdk.i586.rpm
     
    檔案可不少哪!所以需要好好的選擇來安裝才行!『請依照上面的順序一個一個的安裝下去吧!』當然,這麼安裝會瘋掉的吶!所以我們建議使用 urpmi 來安裝您的 Mandrake 的 LAMP 主機喔!請回到『網路升級套件』那一章節去查閱如何使用喔!
     
    好了,那麼如果是 Red Hat 9 呢?他需要的套件至少也需要底下這些咚咚吶:
     
    • Apache 的相關套件
      • httpd-2.0.40-21.5
      • httpd-devel-2.0.40-21.5
      • httpd-manual-2.0.40-21.5
    • MySQL 的相關套件
      • mysql-3.23.56-1.9
      • mysql-devel-3.23.56-1.9
      • mysql-server-3.23.56-1.9
    • PHP 的相關套件
      • php-4.2.2-17.2
      • php-devel-4.2.2-17.2
      • php-mysql-4.2.2-17.2
     
    當然還有很套件沒有列出來咯,您可以使用 apt 去安裝這些套件,以克服屬性相依的問題呢!重點在 httpd, mysql-serve, php 以及 php-mysql 這幾個套件說!挺重要的喔!趕快去安裝吧!
     
    鳥哥的特別告知:特別注意到,這裡是以 Mandrake 9.0 與 Red Hat 9 做為介紹的,如果您不是以這個版本來安裝你的 Linux 系統的話,而且您所在的環境並沒有連上 Internet 時,那麼在檔案的名稱上面可能會有一點點的不同!不過不要緊啦!因為你可以使用:
     
    1. 直接 mount 你的 CDROM ,不會 mount 我可是會 K 人的喔! ^_^:例如『mount -t iso9660 /dev/cdrom /mnt/cdrom 』;
    2. 然後以 find 搭配 grep 來找出相關的 php, apache, 或 mysql 的字眼,注意到, mysql 有時候會有大寫,有的套件僅要小寫即可!都不太一樣啦:例如『 find /mnt/cdrom -type f | grep -i php 』將資料都給他找出來啦!
    3. 最後就一個一個的裝上去,不過,這裡會出現很多的問題,那就是各個套件的屬性相依的問題啦!這個時候怎麼辦呢?沒辦法啦,就只有將需要的相依屬性的檔案一個一個的裝上去囉!還要再找出來其他的檔案來裝的意思啦! @_@
     
    這裡不談完全的安裝,我們僅安裝可以讓 Apache 跑 MySQL 及 PHP 等基本的套件,不玩 LDAP 及其他的咚咚!等到您對於 Apache 有一定的概念之後,自然就可以針對你希望的模組來加以設計了! ^_^其中,最重要的是 mod_php  (Mandrake 9.0) 或者是 libphp4.so (Red Hat 9)喔!如果你沒有安裝下去的話,那麼很可能會造成 apache 無法執行 PHP 的困擾喔!OK!這樣就安裝完畢了!如果你不想要使用 Tarball 安裝的話,可以跳到後續的 主機設定 去瞧一瞧設定的步驟囉!
     

    Tarball 安裝 LAMP 方式 ( Apache 2.xx 2003/09/10 前 )
     
    Tarball 的安裝方式方面,我們選擇最新的套件來安裝,如果您想要安裝舊版的 1.3.xx 的 Apache 時,請參考 LAMP 的安裝方法(http://linux.vbird.org/linux_server0360apache-1.php) 一文。
     
    下載各個套件:
    要架設這樣的一個主機需要哪些套件呢?不就是: ApacheMySQLPHP 囉!要從何處下載呢?你可以到中山大學的 FTP 站去搜尋,因為他提供的介面鳥哥真是蠻喜歡的,而且也真的很實用喔!尋找檔案快又正確!
       
    當然,你也可以到各個套件的發展處去下載:
         
    也就是說,我們需要的檔案有三個,分別是:
       
    依序安裝:
    還記得我們在 Tarball 與 RPM 一文裡面提到的 Tarball 的安裝方法嗎?沒錯!基本上,就是幾個步驟而已:
     
    • ./config ( 或 ./configuration ) 建立 Makefile
    • make 開始編譯
    • make install 開始安裝到設定的目錄去
     
    大致上只有這樣而已ㄋㄟ!簡單吧!但是 Apache 的安裝方法卻不太簡單! Why ??這是因為他還需要支援 PHP 這個玩意兒!所以就顯的特別的麻煩~不過,現在有比較簡單的方式了!呵呵!就是使用 Dynamic library 的方式 ( 動態函式庫 ) 來安裝 PHP ,哈哈!那麼就不需要將他 compile 到 apache 裡面去,而可以將他視作一個獨立的模組!如此一來, PHP 的升級與安裝就顯的很簡單囉!不過,由於動態函式庫的安裝雖然有好處,然而缺點就是....你的模組路徑不能夠隨便亂擺!好在我們很少將編譯好的模組隨便移動的~呵呵!所以請注意:底下我們將 PHP 以『動態函式庫』的形式來安裝。
     
    1. 先安裝最簡單的 MySQL :

    2. 為什麼說 MySQL 最簡單呢?這是因為在 官方網站 上面提到了一個問題,也就是使用 source code ( Tarball ) 的方式來編譯時,如果您的 compiler ( GCC ) 版本高於 2.96 時,那麼您所編譯出來的 MySQL 程式,『有可能』會有資料庫突然死掉的情況發生!因此, MySQL 的官方網站上面『建議』在目前的版本當中,最好直接以他們編譯好的 MySQL 的 binary 版本來進行安裝的動作!因為他已經幫你編譯好了啊!所以,我們就不需要 make 囉!因此就變的很簡單啦!此外,如果你的 Linux 版本中,你的 GCC 大於 2.96 時,且你使用的就是該 Linux 版本提供的 MySQL 時,官方網站上面,亦建議你直接將該 MySQL 移除,然後以他們的版本來安裝,會比較沒有問題啦!看來我們可能也需要升級一下 MySQL 啦!( 無論如何, MySQL 僅是提出『有網友回報出有這個問題』,所以,如果您的 MySQL 向來就沒有問題,那麼就不用理會這個困擾了!)
       
      另外,我怎麼知道我目前的 GCC 版本呢?可以這樣做:
       
      1. 查詢可以使用:
      [root@test root]# rpm -qa | grep gcc
      libgcc1-3.2-1mdk
      gcc-cpp-3.2-1mdk
      gcc-3.2-1mdk
      gcc-c++-3.2-1mdk

      2. 移除 MySQL 可以使用:
      [root@test root]# rpm -e MySQL

       
      如果還不會使用 RPM ,那麼就不要玩架站吧!說過好多次囉! ^_^!上面的結果就顯示我的 gcc 是 3.2 版,哇!太新了!比 2.96 版要更新的多!那麼照 MySQL 官方網站的建議,還是置換成舊版本會比較好ㄋㄟ!如果要移除的話,那麼就使用 -e 的參數來移除 MySQL 吧!( 註:還是那句老話,請特別留意你的每個動作代表的意義,尤其是如果您的 MySQL 已經運作了一段時間了,請將 /var/lib/mysql 這個目錄內的所有資料備份下來! ) 好了!假設我已經將 mysql-3.23.57-pc-linux-i686.tar.gz 這個檔案捉下來了,那麼要如何安裝呢?假設該檔案在 /root 底下時:
       
      0. 查詢是否已經有 mysql 的帳號:
      [root@test root]# grep mysql /etc/passwd
      # 如果沒有 mysql 出現的話,那麼請建立一個名為 mysql 的帳號!
      # 這個是要給 MySQL 的 Process 使用的!為了安全性,請務必建立!
      # 如果之前已經建立過了,那麼底下這一步建置的工作就可以跳過,
      # 直接到 1. 解壓縮與建立連結 去安裝囉!
       
      [root@test root]# groupadd -g 315 mysql
      # 因為我剛好沒有 315 這個 GID ,而 mysql 是系統使用的帳號,我希望他在 500 以內,
      # 因此就選擇 315 做為 mysql 的 gid 囉!你當然可以變更這個數字,
      # 使用小於 500 的 GID 做為系統的帳號之用只是慣用的習慣而已啦! ^_^
       
      [root@test root]# useradd -u 315 -g mysql -d /usr/local/mysql/data -M mysql
      # 我使用 315 做為 mysql 這個帳號(與群組同名!)的 UID 啦!
      # 並且建立他的家目錄在 /usr/local/mysql/data 裡面!
       
      1. 解壓縮與建立連結:
      [root@test root]# cd /usr/local    <==因為已經是 binary 的套件,不用 make !
      [root@test local]# tar -zxvf /root/mysql-3.23.57-pc-linux-i686.tar.gz
      ...(訊息略過)....
      # 最後會產生一個目錄: mysql-3.23.57-pc-linux-i686
       
      [root@test local]# ln -s mysql-3.23.57-pc-linux-i686 mysql
      # 通常習慣將 MySQL 安裝在 /usr/local/mysql 當中!但為了未來升級版本的確認,
      # 官方網站上面建議使用連結的方式來進行 MySQL 的使用!
       
      3. 檔案權限修正:
      [root@test local]# mkdir -p /var/lib/mysql
      [root@test local]# chown -R mysql:mysql /var/lib/mysql
      [root@test local]# chown -R root:mysql /usr/local/mysql-3.23*
      [root@test local]# chown -R mysql:mysql /usr/local/mysql/data
      # 修改成較為安全,且資料庫所屬人為 mysql 喔!特別留意啦!
       
      4. 建立資料庫:
      [root@test local]# cd mysql
      [root@test mysql]# ./scripts/mysql_install_db
      [root@test mysql]# chown -R mysql:mysql /var/lib/mysql
      [root@test mysql]# chown -R mysql:mysql /usr/local/mysql/data
      # 這個步驟會在 /usr/local/mysql/data 裡面建立好 MySQL 的資料庫!
      # 由於 /usr/local/mysql/data 是 MySQL 的資料庫目錄,所以很重要喔!請多加備份!
      # 不過,在新版的 3.23.57 這個版本當中,資料庫竟然移到 /var/lib/mysql 去了!
      # 還真是有點奇怪吶!另外,根據諸多網友的回報,發現在建立資料庫之後,
      # 還需要重新設定一下資料庫的所屬群組與擁有者喔!
       
      5. 啟動測試:
      [root@test mysql]# /usr/local/mysql/bin/safe_mysqld --user=mysql &
      Starting mysqld daemon with databases from /usr/local/mysql/data
      # 注意:這個時候 mysql 會建立一個 socket file 在 /var/lib/mysql/mysql.sock 喔!
      # 未來我們在使用 MySQL 的各種指令功能時,都需要使用到這個 socket file,
      # 但是 MySQL 偏偏預設的 socket file 是在 /tmp 底下,怎麼辦?!真討厭,
      # 我們可以透過這個簡單的動作來欺騙我們的 MySQL 喔!
      [root@test mysql]# ln -s /var/lib/mysql/mysql.sock  /tmp/
      # 如果還是找不到 mysql.sock 時,請使用 find / -name mysql.sock 
      # 來找出這個檔案的絕對路徑吧!
       
      [root@test mysql]# netstat -tl | grep mysql
      tcp        0      0 *:mysql                 *:*                     LISTEN
      [root@test mysql]# ps -aux | grep mysql
      mysql     6394  0.0  1.5 10528  992 pts/3    S    16:16   0:00 /usr/local/mysql/
      mysql     6395  0.0  1.5 10528  992 pts/3    S    16:16   0:00 /usr/local/mysql/
      mysql     6396  0.0  1.5 10528  992 pts/3    S    16:16   0:00 /usr/local/mysql/
      root      6422  0.0  1.1  2408  732 pts/3    S    16:20   0:00 grep mysql
      # 呵呵!這樣就應該是搞定了! MySQL 已經在監聽要求囉!而且所有人為 mysql !
       
      6. 開機後立即啟動!
      [root@test mysql]# vi /etc/rc.d/rc.local
      # 將底下這一行加入這個檔案的最後面一行喔!
      cd /usr/local/mysql; /usr/local/mysql/bin/safe_mysqld --user=mysql &
      # 這樣一來,每次開機就可以自動的啟動 MySQL 囉!
      # 註:由於很多網友回覆之問題中發現,如果沒有加上 cd /usr/local/mysql 時,
      # 會導致無法自動於開機的時候啟動,因此,請大家記得加上這個動作呢!
       
      7. 進階設定內容:
      #  由於我們 MySQL 放置的地點在 /usr/local/mysql 內,這個目錄並不在 PATH 當中!
      #  且 man page 亦不在 MANPATH 裡面,所以,我們要手動的幫他加入囉!
       
      [root@test mysql]# vi /etc/profile
      # 大約在 33 行的地方,而且每個 distribution 設定的地方都不太相同!
      # 請找到 export PATH ... 那一行,以 Mandrake 9.0 來說,大概在 33 行左右,
      # 新加入一行:
      PATH="$PATH":/usr/local/mysql/bin
      export PATH ....(略)....
       
      [root@test mysql]# vi /etc/man.config( 有的 distribution 為 /etc/man.conf )
      # 可以在這個檔案的任何地方加入底下這一行:
      MANPATH /usr/local/mysql/man
      # 就可以具有 man page 的能力了!
       
      8. 建立 MySQL 的 root 帳號密碼!
      [root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root password 'your.password'
      # 請建立密碼!為了安全起見!否則你的 MySQL 資料庫,將預設所有人都可以登入喔!
      # 注意,如果執行上面的指令時,竟然出現如下的錯誤:
      ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
      # 這表示 mysql 找不到 mysql.sock 這個檔案!我們上面不是提到 mysql.sock 的
      # 絕對路徑嗎?假設是 /var/lib/mysql/mysql.sock 好了,那麼我們可以:
      [root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root \
      -S /var/lib/mysql/mysql.sock password 'your.passwd'
      # 當然也可以進行檔案的連結阿! ln -s /var/lib/mysql/mysql.sock /tmp
       
      [root@test mysql]# /usr/local/mysql/bin/mysql -u root -p  \
      > [-S /var/lib/mysql/mysql.sock] # 後面 [] 的內容不一定需要!且 [] 不要打!
      Enter password: <==這裡輸入你剛剛建立的那個密碼喔!
      Welcome to the MySQL monitor.  Commands end with ; or \g.
      Your MySQL connection id is 2 to server version: 3.23.57

      Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

      mysql> exit
      Bye

      # 這樣就是可以確認已經可以連接到你的 MySQL 資料庫了!請特別留意,有的朋友沒有移除
      # RPM 的 MySQL 時,那麼您可能會有兩個 mysql 的執行程式,一個在 /usr/bin/mysql ,
      # 一個在 /usr/local/mysql/bin 裡面,不要使用錯檔案,否則可能會顯示如下的錯誤訊息:
      ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
      # 解決的方法我們上面提過囉! ^_^

       
      有這幾個步驟就 OK 啦!您的 MySQL 已經建立了,而且管理者的帳號 root 也已經建立的密碼啦!請特別留意的是,這個 root 是 MySQL 的帳號,與 Linux 在 /etc/passwd 裡面的 root 是完全沒有關係的喔!因為 MySQL 只是 Linux 裡面的一個軟體,任何 Linux 裡面的使用者,只要知道 MySQL 的 root 密碼,就可以使用 MySQL 的 root 功能! 此外,特別需要留意的還有,由於我們使用的是 Tarball 的方式來安裝的 MySQL ,所以我們的 data directory 會是擺在 /usr/local/mysql/data 當中!因此,有必要針對這個目錄進行『備份』的工作!(註:還是得視您的 MySQL 版本來設定的!以 3.23.54a 版本來說,他確實是在 /usr/local/mysql/data ,不過 3.23.57 則改換到了 /var/lib/mysql 去了!真是傷腦筋吶!)千萬不要大意備份的舉動喔!
       
    3. 再安裝需要編譯的新版 Apache 2.xx :

    4. 因為目前有所謂的這個動態函式庫,因此,我們在安裝 Apache 的時候,請特別要『向 Apache 宣告 PHP 模組使用動態函式庫的模式』來進行 PHP 的執行!這個時候,你可以這樣的來安裝你的 Apache 喔!
       
      0. 解壓縮:
      [root@test root]# cd /usr/local/src
      [root@test src]# tar -zxvf /root/httpd-2.0.47.tar.gz
      # .....(訊息略)....
      # 最後會產生一個 /usr/local/src/httpd-2.0.47 的目錄
       
      1. 搜尋設定內容:
      [root@test src]# cd httpd-2.0.47
      [root@test httpd-2.0.47]# ./configure --prefix=/usr/local/apache2  \
      > --enable-so --enable-rewrite
      # 上面請特別注意到:
       --prefix=/安裝的路徑:這個項目在設定未來你的 Apache 安裝在那個目錄當中?!
      --enable-so     :這個項目則是在宣告使用動態函式庫啦!特別重要!
      --enable-rewrite  :這個項目只是預防用的!可以先設定,不過不一定會用到!
      # 其他的額外項目請使用 ./configure --help 來察看吧!
      # 按下 Enter 之後,會開始偵測你的主機內容!如果發生找不到 gcc 或 cc ,
      # 那麼肯定就是沒有安裝 make 或一些編譯軟體!請自行再加以安裝吧!
       
      2. 開始編譯與安裝:
      [root@test httpd-2.0.47]# make; make install
      # 如果沒有錯誤的話,那麼在 /usr/local/apache2 這個目錄當中就已經將你的 Apache 安裝了
       
      [root@test httpd-2.0.47]# cd /usr/local/apache2
      [root@test apache2]# ls -l
      bin/     :預設的 Apache 所有執行檔案的放置目錄
      build/    :一些編譯過程中安裝好的咚咚
      cgi-bin/   :預設的可以執行 CGI 的目錄!!粉重要!
      conf/     :預設的 Apache 的參數檔放置的目錄!!粉重要!!
      error/    :當使用者連上 server 有問題時,顯示的錯誤網頁在這裡提供!
      htdocs/    :這個就是預設的主機的主頁!!粉重要!
      icons/    :預設的一些小圖示 ( icon ) 放置的目錄
      include/   :其他一些 Apache 相關的函式庫放置的目錄
      lib/     :其他函式庫放置的目錄
      logs/     :登錄訊息檔案放置的目錄喔!
      man/     :這個就是 man page 放置的目錄
      manual/    :使用說明喔!
      modules/   :其他 Apache 使用的模組放置的目錄!
       
      3. 做個簡易的修改:
      #  奇怪的很,在 httpd.conf 這個 Apache 的設定檔當中,竟然啟用的 User 
      #  與 Group 有點怪怪的,所以這個時候我們必須要修正一下這個項目啦!
      [root@test apache2]# vi /usr/local/apache2/conf/httpd.conf
      # 找到底下這兩行:
      User nobody
      Group #-1
      # 粉奇怪吧!竟然是 #-1 那!而且 nobody 也不見得每部機器上面都有這個
      # 系統帳號,請查出您的 /etc/passwd 裡面,是否有 nobody 這個帳號,如果
      # 沒有 nobody 這個帳號,可以使用 useradd -r nobody 來新增系統帳號。同時,
      # 查看一下您的 /etc/group 裡面是否有 nobody 或者是 nogroup 的存在?
      # 通常 Mandrake 會存在 nogroup 這個群組,至於 Red Hat 則會有 nobody 這個群組,
      # 所以將上面兩的項目改成底下的模樣吧!
      User nobody
      Group nobody
      # 然後儲存後離開!
       
      4. 確定啟動狀態:
      [root@test apache2]# /usr/local/apache2/bin/apachectl start
      [root@test apache2]# netstat -utl
      tcp        0      0 *:http                  *:*                     LISTEN
      # 呵呵!看到上面這行就表示您的 Apache 已經啟動囉!當然啦!
      # 有的人會看到的是:
      tcp        0      0 *:www                   *:*                     LISTEN
      # daemon 的名字會依照 /etc/services 而變呢!
      # 而那個 apachectl 檔案,就是啟動的 scripts 啦!若要開機時啟動 apache ,
      # 那麼將 /usr/local/apache2/bin/apachectl start 放在 /etc/rc.d/rc.local 內吧!
       
      5. 進階設定:
      [root@test apache2]# vi /etc/profile
      # 將剛剛我們上面 MySQL 時新增的一行,重新再改為如下所示:
      PATH="$PATH":/usr/local/mysql/bin:/usr/local/apache2/bin
       
      [root@test apache2]# vi /etc/man.config
      # 再新加一行!
      MANPATH /usr/local/apache2/man
       
      6. 使用文字介面瀏覽器測試:
      [root@test apache2]# lynx http://localhost
                                                     Test Page for Apache Installation
         If  you  can see this, it means that the installation of the Apache web
         server  software on this system was successful. You may now add content
         to this directory and replace this page.
                           ___________________________________

                    Seeing this instead of the website you expected?

         This  page  is  here  because  the  site  administrator has changed the
         configuration of this web server. Please contact the person responsible
         for  maintaining  this  server  with  questions.  The  Apache  Software
         Foundation, which wrote the web server software this site administrator
         is  using, has nothing to do with maintaining this site and cannot help
         resolve configuration issues.
                           ___________________________________

         The Apache documentation has been included with this distribution.

         You  are  free  to use the image below on an Apache-powered web server.
         Thanks for using Apache!
      # 當然啦!要使用 lynx 必須先安裝他!所以,請先將您的光碟 mount 然後安裝 lynx 吧!
      # 如果出現上面的測試網頁,呵呵!恭喜您,您的 Apache2 已經可以正常的啟動囉!

       
      為什麼一定要在 /usr/local/src 底下進行 Tarball 呢?這僅是約定俗成的啦!因為如此一來,大家都安裝在這個地方,以後主機的維護與移交都很簡易!並且,對於您未來在主機上面的『升級』與『版本判別』都有很好的幫助呢!基本上,如果上面的過程都沒有錯誤發生,那麼恭喜您,已經可以順利的來啟動你的 Apache 了!並且應該有第一個主機網頁產生啦!呵呵!真是快樂喔!但是如果有問題呢?通常最大的問題排除打字的錯誤之外,應該就是來自於我們在 Tarball 與 RPM 一文當中提到的,忘記安裝那個 make, gcc 等套件!這個時候,請拿出您的光碟,一個一個的將套件安裝上去吧!粉麻煩的啦!好了!接著下來看看怎麼安裝 PHP 咯!而這個方式安裝下來的 Apache 首頁就在 /usr/local/apache2/htdocs 這裡啦![ 注意:在這個安裝的方法之後,很奇怪的是,並沒有將中文的首頁設定正確!你可以到 /usr/local/apache2/htdocs 裡頭,下達 cp index.html.zh index.html.tw.Big5 即可! ]
       
    5. 安裝 PHP 在您的系統中:

    6. 沒有 PHP 時,您的網頁將變的很單調ㄟ~而且粉多的 PHP 論壇都沒能架設,很可惜!所以底下我們來談談怎麼讓你的 LAMP 正確的支援 PHP 囉!
       
      0. 解壓縮:
      [root@test root]# cd /usr/local/src
      [root@test src]# tar -zxvf /root/php-4.3.3.tar.gz
      # .....(訊息略)....
      # 最後會產生一個 /usr/local/src/php-4.3.3 的目錄
       
      1. 搜尋設定內容:
      [root@test src]# cd php-4.3.3
      [root@test php-4.3.3]# ./configure --prefix=/usr/local/php4   \
      >--with-apxs2=/usr/local/apache2/bin/apxs   \
      >--with-mysql=/usr/local/mysql   \
      >--with-config-file-path=/usr/local/php4
      # 上面請特別注意到:
      --prefix=/安裝的路徑:這個項目在設定未來你的 Apache 安裝在那個目錄當中?!
      --with-apxs2    :這個則是 Apache2 專用的選項喔!請針對您的主機情況設定!
      --with-mysql    :這個則是針對 MySQL 啦!當然啦,就寫我剛剛搞定的咚咚!
      --with-config-file-path:這個又是什麼?呵呵!是 php 的設定檔 php.ini 放置的目錄啦!
      # 其他的額外項目請使用 ./configure --help 來察看吧!
       
      2. 開始編譯與安裝:
      [root test php-4.3.3]# make; make install
      # 如果沒有錯誤的話,那麼在 /usr/local/php4 這個目錄當中就已經將你的 php 安裝好了!
       
      3. 轉存 PHP 基本組態檔案:
      [root@test php-4.3.3]# cp php.ini-dist /usr/local/php4/php.ini 
      # 這個路徑與你剛剛在 ./configure 當中那個 --with-config-file-path 設定有關!
       
      4. 啟動 Apache 當中的 PHP 選項:
      [root@test php-4.3.3]# vi /usr/local/apache2/conf/httpd.conf
      # 找到底下兩行:
         LoadModule php4_module modules/libphp4.so  <==大約在 231 行處
         AddType application/x-httpd-php .php      <==這一行可以在 847 行處自行增加!
       
      5. 重新啟動 Apache :
      [root@test php-4.3.3]# /usr/local/apache2/bin/apachectl stop
      [root@test php-4.3.3]# /usr/local/apache2/bin/apachectl start
       
      6. 測試 PHP 是否是正常工作的:
      [root@test php-4.3.3]# cd /usr/local/apache2/htdocs
      [root@test htdocs]# vi test.php
      <?php
      phpinfo( );
      ?>
      # 以我的測試主機為例,我的測試主機 IP 為 192.168.1.2 ,所以隨便以一部可以連線的PC,
      # 在網址列輸入 http://192.168.1.2/test.php 
      # 或者直接在本機的 X-Window 上面輸入 http://localhost/test.php 亦可!
       
      在上面的最後一個步驟中,如果你的瀏覽器有出現類似底下的畫面,那麼就是編譯成功啦! ^_^,而且,主要的 PHP 組態檔案會是在 /usr/local/php4/php.ini 這個檔案喔
     
    哈哈!費了九牛二虎之力,終於將 LAMP 以 Tarball 安裝完畢,並且也測試 OK 囉!
     

    升級與安裝方式的選擇建議:
     
    推薦使用 RPM 的原因:
    一般而言,如果沒有特別的需求的話,那麼使用 RPM 通常已經可以滿足大家的需求了!並且在安裝上面確實比較容易!此外,未來在升級方面,可以由各家的 Linux distributions 來提供適當的升級版套件,因此,升級上面也是絕對沒有問題的!所以這裡特別推薦使用 RPM 的方式來進行您的 LAMP 的架設!不但方便簡單,而且基礎功能都已經含有了!不需要再考慮有的沒的咚咚!
     
    有些時候, Tarball 也是不得已的:
    不過,有些時候也是不得不升級的吶!或許是因為 distribution 廠商提供的版本速度更新太慢,或者是網路上的 Bug 問題太多,或者是你需要新版本的某些功能時,那麼您只好自行以 Tarball 的方式來安裝了!而這裡需要特別強調的是,如果您使用 Tarball 來安裝 LAMP 時,需要整體考量喔!因為 PHP 有使用到 Apache 2.xx 版本的某些功能,所以重新編譯 Apache 時,需不需要重新編譯 PHP 呢?絕大部分的情況之下,由於 Apache 支援動態函式庫,因此或許不需要重新的編譯 PHP ,不過,還是需要注意的!並且,使用 Tarball 的時候,最好全部這三個咚咚都使用 Tarball ,不要一個 RPM 一些 Tarball 的,容易錯亂啦!

主機設定:

    終於來到主機設定的地方了!在底下的設定裡面,我們講的是大方向喔!還有很多的設定可能要大家有興趣的多多自行試看看囉!此外,由於每個版本的 Linux distribution 都會將 Apache 作一些調整,因此,不見得每個 Linux distribution 的設定檔案都會在同一個地方!舉個例子來說, Red Hat 6.x 版本以前的 Apache 會用到三個設定檔案,但是目前新推出的幾個 Red Hat 版本中,只要 httpd.conf 這個檔案設定 OK 就好了!另外, Mandrake 使用 RPM 安裝後, httpd.conf 竟然不是主要設定檔!他的 Apache 已經改到 commonhttpd.conf 囉!還真是奇怪~無論如何,如果您使用的是 Tarball 安裝 Apache 2.x 的話,那麼設定檔與套件的目錄架構,應該就會差不多了!而且,請善用 locate 與 find 來搜尋 Apache 與 PHP 還有 MySQL 的設定檔喔!因為他們的設定檔名稱應該是不變的!即使 Mandrake 修改了部分內容到 commondhttpd.conf ,但同目錄之下,仍然有 httpd.conf ㄋㄟ!此外,底下我們的設定主要以 Tarball 安裝的 Apache 2.xx 版本來談論。基本上,不論是 1.3.xx 還是 2.xx 版本,主要設定的內容都大同小異啦!看看就能夠明瞭了!
     

    LAMP 的套件結構與主機規劃
     
    因為 LAMP 主要有三個基本套件,分別是 Apache/MySQL/PHP,那麼這三個套件的設定檔與主要執行檔在哪裡呢?
     
    關於 Apache 的路徑問題:
    我們在瀏覽網站的時候,總會進入該網站的『首頁』吧,那個首頁放置的目錄就是所謂的『主網頁目錄』了。主網頁目錄我們可以在 httpd.conf 裡面來設定,不過還是有套件的預設值的啦!底下我們就來談一談吧! ^_^
     
    • 主要設定檔 httpd.conf :Apache 的主要設定檔之檔名為 httpd.conf ,因為不同的安裝方式與不同的 Linux distribution 下,這個檔案放置的地方會不相同!舉例來說, Red Hat 9 的預設路徑在 /etc/httpd/conf/httpd.conf ,而我們以 Tarball 安裝之後,該檔案則是在 /usr/local/apache2/conf/httpd.conf 囉!請依照您的安裝情況來判斷這個檔案的所在喔!

    •  
    • 主網頁目錄:主網頁的目錄預設在 /var/www/html 這個目錄,而如果是以 Tarball 安裝的話,則預設在 /usr/local/apache2/htdocs 這個目錄當中呢!不過,這個主網頁的目錄是依據 httpd.conf 裡面的設定而改變的!

    •  
    • 登錄檔:一般來說,登錄檔我們會希望放置到 /var/log/httpd 裡面呢!統一管理比較好一點了!

    •  
    重點其實就是 httpd.conf 所在的目錄啦!因為我們在 Apache 裡面進行的各種設定都是在該檔案裡面進行的吶! ^_^
     
    關於 MySQL 的路徑問題:
    MySQL 是資料庫軟體呀!所以最重要的當然就是他的資料庫放置的目錄囉!呵呵!答對了!那麼這個資料庫放在哪裡呢?預設是在/var/lib/mysql 裡面的!所以如果你有使用 MySQL 做為你的網頁或者是論壇的話,那麼請將這個目錄的咚咚備份下來吧!很重要的喔!
     
    關於 PHP 的模組問題:
    一般而言,我們大多以『動態函式庫』的方式來進行 PHP 的模組編譯的!最大的優點就是可以在升級的時候,只要直接升級 PHP 即可!與 Apache 的相關性就比較小一點,因此,在升級某個套件的時候,不需要全部的套件都一起升級的啦!這樣真的是比較簡單喔!
     
    好了,那麼如何規劃我們的 Apache 主機呢?如果您的主機想要提供使用者來設計個人的首頁,那麼自然就得開放使用者具有家目錄囉!而為了安全起見,當然家目錄 (/home) 獨立一個 partition 是比較好的!並且,由於未來可能會針對不同的使用者進行磁碟配額 (quota) 的限制,所以, /home 真的可以考慮獨立一個 partition 的啦!此外,如果您的 apache 未來連接的 Client 數量挺大的時候,呵呵!硬碟與記憶體需要大而且速度快一點的才好喔!
     

    基本要求:
     
    要讓您的 Apache 就是 WWW 能夠在 Internet 上面被搜尋到,您的主機最好要有個 domain name ,亦即是有個獨一無二的名字啦!如此一來,在 Internet 上面,大家比較容易找的到您的主機!並且,如果您主機的內容已經大致上完備的話,那麼可以到各大搜尋引擎去註冊(免費)一下,例如奇摩雅虎蕃薯藤新浪網等等去註冊一下!這樣就可以讓大家搜尋到你的網站囉!所以,你需要:
     
    1. 連上 Internet :這不是囉唆的很嗎?沒錯啦!但還是要提醒,既然要對 Internet 公開,第一件事就是要連上 Internet 吶!

    2.  
    3. 申請領域名稱 ( domain name ):其實應該稱為 FQDN 比較好的! ^_^ !如果你使用的連線方式取得的 IP 是非固定的,亦即俗稱的浮動式 IP ,那麼可以選擇類似 www.adsldns.org 之類的免費動態 IP 之 DNS 系統!還頗好用的!詳情請參考:申請合法的主機名稱一文。那麼如果想要自行申請 domain name 的話,那麼就可以參考 DNS 的設定啦!但請注意,該服務『最好有固定 IP 』者才適用喔!總而言之,就是當 Client 在找 domain name 就需要可以找到 IP 啦!但要特別留意,如果您希望未來架設虛擬主機的話,那麼就務必要有授權的 DNS 囉!

    4.  
    5. 安裝好 LAMP :又是廢話! @_@ 反正一定要好好的安裝就是了。這裡又要特別強調,除非你有很好的邏輯觀念,那麼你同時安裝 RPM 與 Tarball 還沒有關係 ( 同時存在兩套 LAMP ) ,反正可以讀到正確的即可!但是,如果你沒有良好的邏輯概念,那麼,如果要安裝 RPM ,請將 Tarball 的移除!如果要安裝 Tarball ,請將 RPM 移除!當然,資料庫與網頁的資料請記得備份!這樣會比較簡單啦,而且不容易發生錯誤!

    6.  
    7. 具備簡易的 HTML 語法概念:這個鳥哥就沒有辦法教大家了!因為不在 Linux 範圍內~有興趣的可以到一個十分棒的網頁建置教學網站:網站建置百寶箱(http://dob.tnc.edu.tw/index.php)!因為具備簡易的 HTML 觀念後,才比較容易理解整個 Apache 運作的資料之傳遞的狀況!
     
    好了!不囉唆,立刻來實作看看先!
     

    最簡易 Apache 設定
     
    為什麼掛了個『最簡易』呢?呵呵!因為那就是沒有任何麻煩的設定嘛!基本上,如果你按照鳥哥上面 Tarball 的方法安裝好之後,其實立刻就有主機的首頁了!當然,使用 RPM 也有首頁啦!因此,用最原始的設定其實就可以進行主機的首頁瀏覽了!需要特別注意的是,第一次進入到 Apache 之後,你會發現有個 documentation ,在那個超連結當中,對於 Apache 有『相當完整的介紹!』如果有任何問題,可以到該連結裡面去搜尋!絕對可以找到您要的資訊喔!底下我們就以 Apache 2.xx 版本的設定檔案來介紹,如果您是 1.3.xx 版本,請自行參考底下的設定來解決您的 httpd.conf !設定方面差不多啦! ^_^
     
    此外,需要注意的是基本的環境設定方法為:
     
      <設定項目>
        ......
        ......
      </設定項目>
     
    例如:
     
      <Directory>
        Options Indexs
      </Directory>
     
    幾乎都是這樣的設定方式喔!請注意一下即可!特別留意的是,如果你有額外的設定時,不能隨便在 httpd.conf 裡頭找地方寫入!否則如果剛好寫在 <Directory>...</Directory> 裡面,呼呼!那麼就會發生錯誤啦!需要前前後後的找一找喔!
     
    • 基礎環境設定:

    •  
      [root@test root]# cd /usr/local/apache2/conf
      [root@test root]# vi httpd.conf

      ServerRoot "/usr/local/apache2"
      # 最上層的 Apache 目錄!我們安裝的時候,以這個目錄來安裝的,他就是 ServerRoot 囉!
      # 其實,也就是說,如果底下以『相對路徑』的方式寫的,那麼就是相對於這個路徑!
      # 當然,寫絕對路徑就沒有任何影響啦!

      PidFile logs/httpd.pid
      # 不要跟我說不曉得 PID 是什麼?查看一下 Linux 基礎的資源管理去!
      # 這個項目在設定 Apache 的 PID 記錄檔!可以用在重新讀取設定檔等等的功能!
      # 如上面所言,因為寫了相對路徑,所以實際的目錄為 /usr/local/apache2/logs/httpd.pid
      # 通常我也喜歡將他移動到 /var/log/httpd 底下去,統一管理較方便!
      # 我喜歡將這行改變為PidFile /var/log/httpd/httpd.pid

      Timeout 300 
      # 這是用來設定連接到你這部主機的用戶端,當超過 300 秒用戶端還沒有 
      # 辦法連上你的主機時,就予以斷線處理! 

      KeepAlive On
      # 是否允許持續性連線,亦即一個連線有多個要求!這裡通常設定為 On 比較好,
      # 就鳥哥的經驗來看,設定為 Off 似乎會產生很多 Time_Wait 的封包!粉怪!

      MaxKeepAliveRequests 100
      # 在持續性的連線當中,最多允許的連線數目!如果不要限制,可以設定為 0 ,
      # 當然,官方網站上面說,要有較佳的效能,最好設定大一點,所以我都將他改為 200 以上。

      KeepAliveTimeout 15
      # 同一個連線的 Client 下次的需求沒有在 15 秒內送出,那麼該連線會被視同斷線喔!

      <IfModule prefork.c>
      StartServers         5
      MinSpareServers     5
      MaxSpareServers    10
      MaxClients        150
      MaxRequestsPerChild  0
      </IfModule>
      <IfModule worker.c>
      StartServers         2
      MaxClients         150
      MinSpareThreads     25
      MaxSpareThreads     75
      ThreadsPerChild     25
      MaxRequestsPerChild  0
      </IfModule>
      # 這兩段主要是與系統的效能較有關係!如果不需要效能設定的話,那麼使用預設值就很夠了!
      # 1. MinSpareServers 與 MaxSpareServers 是開啟 httpd 服務數目的地方,當你執行
      #    /usr/local/apache/bin/apachectl start 之後, 在 shell 下執行 
      #    ps -aux|grep http 就可以看到 http 的數量, 通常這與你的 RAM 有關。
      #    如果是小站的話,可以設小一點, 例如最小設 3 最大設 5 即可!
      # 2. 而 StartServers 則設與 Min 相同即可!
      # 3. 至於 MaxClients 則可以設小一點,因為設定太大很耗系統資源,
      #    而太小則無法讓很多人連上來!所以可以設成例如 100

      Listen 80
      # 設定監聽的 port ,如果你要更改 WWW 的 port number ,可以在這裡修改,例如 8080

      User nobody
      Group nogroup
      # 這個是設定 apache 所產生的,就是剛剛我們上頭所設定的 MinSpareServers ,之後會產生
      # 一些 process ,那麼這些 processes 的擁有者與擁有群組 ( owerner & group ) 是誰!
      # 這個與未來的『 PID 權限及 Linux 權限設定』有關!通常如果是 RPM 安裝的話,
      # 大致上都會是 apache ,而如果是 Tarball 安裝,通常是 nobody 與 nogroup 吧!
      # 是否有該 user 還要查看 /etc/passwd 及 /etc/group 喔!不能設錯!否則無法啟動 apache

      ServerAdmin root@localhost
      # 這個是設定你的機器的 httpd 管理員帳號!設成你的e-mail吧!例如我都設定為:
      # 我的機器上:ServerAdmin  test@localhost

      #ServerName new.host.name:80
      # 設定主機名稱的地方,若有需要的話才設定,否則可以將他 mark 掉也沒關係!
      # 但如果你需要讓 Apache 自動幫你將其他名稱連過來的主機名稱修改時(下一個設定),
      # 那麼這裡就需要填寫囉!此外的此外,需要瞭解的是,有時,例如 Openlinux server 3.1.1 
      # 如果沒有設定這個的話,那麼你的 WWW 將無法啟動!另外,如果設定錯誤,同樣無法啟用!
      # 因此,沒有特別要求的話,那麼這個就暫時不要設定吧!免得自找麻煩~

      UseCanonicalName Off
      # 主機的別名啦!例如你的主機有三個名稱時,那麼這個 Off 的設定,會讓 Client 端
      # 可以分別使用三個名稱顯示在他們的瀏覽器上面,如果是 On 的話,那麼將以上面的
      # ServerName 內容來顯示在他們的瀏覽器上面,而不是原來他們寫的主機名稱喔!
      # 說是這樣說,但是我試不出來這個功能~~ @_@

      AddDefaultCharset ISO-8859-1
      LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw
      # Apache 的預設顯示語言編碼!請特別留意,因為這裡的設定並不適合台灣的繁體中文,
      # 呵呵!所以底下請『務必』修改成這樣!否則您的網頁總是無法顯示中文喔!
      # 這兩行大概在 httpd.conf 的 750 ~ 800 行之間!請以搜尋的方式找一下!
      AddDefaultCharset Big5
      LanguagePriority tw en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv

      HostnameLookups Off
      # 在記錄檔案的時候,登錄檔的內容,來捉取我們資料的主機是以 IP 還是主機名稱來顯示?
      # 當然是 IP 來顯示比較快喔!所以,這裡通常設定為 Off ,不需要轉譯 IP 成為主機名!

       
    • 目錄路徑設定:

    •  
      [root@test root]# cd /usr/local/apache2/conf
      [root@test root]# vi httpd.conf

      DocumentRoot "/usr/local/apache2/htdocs"
      # 將 /usr/local/apache2/htdocs 設定為 Apache 的根目錄!
      # 這個就是主機的主網頁啦!你可以將他移到任何你高興的地方!
      # 不過,比較重要的限制是,最好這個目錄底下不要包含重要的資訊,例如你不要將根目錄 / 
      # 設定為這個 DocumentRoot 吧! ^_^ 否則你的主機下的任何資料,不就任何人都可以使用 
      # 瀏覽器來查看?豈不是很危險!

      <Directory />
          Options FollowSymLinks
          AllowOverride None
      </Directory>
      # 這個是設定根目錄,亦即是 /usr/local/apache2/htdocs 這咚咚的屬性啦!
      # 使用 Options 來設定相關屬性,相關的屬性還有底下幾個ㄋㄟ!
      ExecCGI  :使該目錄底下的 CGI 具有可以執行的能力!重要項目!如果您要您的
             某個目錄可以執行 CGI 的程式時,那麼請將該目錄多加 ExecCGI 這個屬性!
      FollowSymLinks :讓您的 link 的目錄或檔案,雖然在其他的目錄下,仍然可以連接出去!
               舉個例子來說,目前我的主頁是 /usr/local/apache2/htdocs ,但我想
               連接到 /home/vbird/testing 底下,然而我又不想多加一個 directory 
               的設定值在 httpd.conf 內,那麼我可以在 /usr/local/apache2/htdocs 
               使用 ln 連結一個名為 vbird 使他指向 /home/vbird/testing ,那麼
               當我網址輸入 http://localhost/vbird 時,就可以到
               /home/vbird/testing 了!
               如果沒有設定這個屬性,那麼就無法連接出去喔!
      Includes  :在 Server 端的工作可進行!
      Indexes   :如果在該目錄底下找不到 index.html 時,就顯示整個目錄下的檔案名稱!
             粉危險吧! ^_^ 所以囉,盡量不要包含 Indexes 這個項目啦!
      MultiViews :這個東西有點類似多國語言支援啦!你可在同一目錄下的同一個檔案,
             編寫多個不同語言的檔案,並且以一個 *.var 的檔案來規範不同編碼!
             有興趣的話,請自行參考自己的 /usr/local/apache2/htdpc/index.html.var
      All :全部的屬性都啟動啦!但是不包含 MultiViews !

      <Directory "/usr/local/apache2/htdocs">
          Options Indexes FollowSymLinks
          AllowOverride None
          Order allow,deny
          Allow from all
      </Directory>
      # 1. 這段主要在設定 / 的屬性啦!可以看到預設的情況中有 indexes 喔!所以趕緊將他拿掉
      # 2. 至於 AllowOverride 主要與認證網頁的設定有關啦!亦即 .htaccess 檔案!意思是說,
      #    httpd.conf 在與 .htaccess 相同目錄下的設定中,哪些設定會用來取代 .htaccess 的
      #    設定內容?當然啦, .htaccess 這個檔案設定較為靈活,所以當然設定為 None 囉!
      #    仍然是以 .htaccess 的設定為主啦!
      # 3. Order allow,deny 注意喔,那個 allow,deny 中間是以 , 隔開,並沒有空格!不要
      #    設定錯了!這個東西與底下的 Allow 在設定『權限』的啦!我們後面會再詳談!

      UserDir public_html
      # 這玩意兒在設定個人家目錄下的首頁在何處啦!這裡預設是 public_html ,舉例來說,
      # 我的家目錄是 /home/test ,那麼這個使用者的首頁目錄在 /home/test/public_html !
      # 當然,這個目錄是可變的!就看你要怎麼設定囉! ^_^
      # 例如很多人都喜歡將這個目錄設定為 www ㄋㄟ!呵呵!也順道去修改一下 /etc/skel 的內容

      DirectoryIndex index.html index.html.var
      # 這個就是當我們輸入 http://192.168.1.2 時,那麼 Apache 將會去搜尋該目錄底下的檔名!# 預設只有兩個,太少了!如果我們使用 php 之類的,哇!那可就糗了!所以,這裡可以改成
      DirectoryIndex index.html index.htm index.php index.cgi index.php3 index.html.var
      # 如果還有喜歡的預設檔名,將他加進去吧!這就是首頁的網頁名稱囉! ^_^

      Alias /icons/ "/usr/local/apache2/icons/"
      <Directory "/usr/local/apache2/icons">
          Options Indexes MultiViews
          AllowOverride None
          Order allow,deny
          Allow from all
      </Directory>
      # Aliase 之設定主要也是在簡化一些繁複的連結內容啦!舉上面的例子來說,我們的 Apache
      # 根目錄在 /usr/local/apache2/htdocs 裡面,那麼輸入網址 http://localhost 則到該目錄
      # 在上面的設定中,則輸入 http://localhost/icons 會跑到 /usr/local/apache2/icons 
      # 的意思!如此一來,設定上較為簡便了!

      Alias /manual "/usr/local/apache2/manual"
      <Directory "/usr/local/apache2/manual">
          Options Indexes FollowSymLinks MultiViews IncludesNoExec
          AddOutputFilter Includes html
          AllowOverride None
          Order allow,deny
          Allow from all
      </Directory>
      # 這個與上面的設定相同!所以,未來只要輸入 http://localhost/manual 即可到達自己的
      # 主機上面的說明文件喔!很簡易吧! ^_^

      ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
      <Directory "/usr/local/apache2/cgi-bin">
          AllowOverride None
          Options None
          Order allow,deny
          Allow from all
      </Directory>
      # ScriptAlias 這部份則大概專屬於 CGI 之類的可執行程式吧!呵呵!要瞭解一下,
      # 我們預設都是將 http://localhost/cgi-bin 設定為可執行的 CGI 程式放置區!
      # 那麼 CGI 程式要開放的權限有哪些!呵呵!就上面設定的囉!

       
    • 啟動 PHP 與 CGI 相關模組,及預設的登錄檔修訂!:

    •  
      [root@test root]# cd /usr/local/apache2/conf
      [root@test root]# vi httpd.conf

      LoadModule php4_module        modules/libphp4.so
      AddType application/x-httpd-php .php
      AddHandler cgi-script .cgi .pl
      # 至少這三行必須要啟動喔!尤其是第三行,通常預設都是關閉的!所以,你必須要將 # 移除
      # 否則你將無法執行 CGI 的程式ㄋㄟ~

      ErrorLog logs/error_log
      LogLevel warn
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
      LogFormat "%h %l %u %t \"%r\" %>s %b" common
      LogFormat "%{Referer}i -> %U" referer
      LogFormat "%{User-agent}i" agent
      CustomLog logs/access_log combined
      # 上面全部都跟 log 有關,因為鳥哥真的比較喜歡將 log file 放在一起處理,所以我都會
      # 這樣改:
      ErrorLog /var/log/httpd/error_log
      CustomLog /var/log/httpd/access_log combined
      # 只改這兩行,其他的保留預設值咯! ^_^

       
    這樣就給他設定完成了啦!粉不錯吧! ^_^接下來,介紹一下怎麼啟動吧!
     

    啟動 httpd (如何關閉 https )
     
    要啟動 WWW 實在是太簡單啦!直接給他啟動即可!如果是以 RPM 安裝的,那麼啟動檔案預設在 /etc/rc.d/init.d/httpd 這個檔案,所以,你可以這樣啟動:
     
    [root@test root]# /etc/rc.d/init.d/httpd start (啟動)
    [root@test root]# /etc/rc.d/init.d/httpd stop  (關閉)
     
    至於 Tarball 則是以 apachectl 來作的:
     
    [root@test root]# /usr/local/apache2/bin/apachectl start (啟動)
    [root@test root]# /usr/local/apache2/bin/apachectl stop  (關閉)
     
    無論如何,啟動之後請立即察看一下 port 是否已經開啟了?!
     
    [root@test root]# netstat -tuln | grep ':80'
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
     
    並且需要在登錄檔當中發現底下這一行才算成功喔!
     
    [root@test root]# vi /var/log/httpd/error_log
    [Thu Dec 26 20:16:53 2002] [notice] Apache/2.0.43 (Unix) PHP/4.2.3 configured -- resuming normal operations
     
    如何關閉 https :
    此外,如果您比較細心留意的話,會發現 Red Hat 9 的 httpd.conf 裡面有這一行:『Include conf.d/*.conf』(大約在 162 行的地方),這表示:『 Apache 在啟動的時候,除了讀取原來的 httpd.conf 這個設定檔之外,也會讀取 /etc/httpd/conf.d/*.conf 的所有檔案來規範 Apache 的啟動狀態。』這樣的設定無疑是比較靈活的,可惜的是,對於一些初接觸 Apache 的朋友來說,可能會覺得有點怕怕的~ 好了,那麼我們來看一下, Red Hat 9 裡面的 /etc/httpd/conf.d/ 有什麼資料呢?
     
    [root@test root]# ll /etc/httpd/conf.d/*.conf
    -rw-r--r--    1 root     root   814 Feb 10  2003 /etc/httpd/conf.d/perl.conf
    -rw-r--r--    1 root     root   459 Jun 30 04:35 /etc/httpd/conf.d/php.conf
    -rw-r--r--    1 root     root  1276 Feb 20  2003 /etc/httpd/conf.d/python.conf
    -rw-r--r--    1 root     root 11140 Jul 31 23:40 /etc/httpd/conf.d/ssl.conf
     
    在上面的檔案當中,較為有趣的是 ssl.conf 那個檔案,那個咚咚就是我們前面提到的以 SSL 加密的設定值!這個設定值會讓我們的系統多了一個 https (port 443) 在監聽網路服務呢!有需要這東西嗎?當然不需要了!因為我們又不需要使用信用卡資料說~好了,那麼如何將 Red Hat 9 的 https 取消呢?呵呵!將 ssl.conf 更改檔名即可!不要使用 .conf 的附檔名就行了!例如底下的方式:
     
    [root@test root]# cd /etc/httpd/conf.d
    [root@test conf.d]# mv ssl.conf ssl.conf.bak
    [root@test conf.d]# /etc/rc.d/init.d/httpd restart
     
    這樣就可以關閉 https 囉!
     

    測試結果:
    相信您應該都會自行測試您的 WWW 是否正常了吧?!沒錯! Apache 是否正常,直接在遠端的主機,或者是近端的本機上面,以瀏覽器直接輸入你的 IP 來試看看即可知道!而測試 PHP 呢?就用上面我們提到的那支小小的 PHP 程式來進行 PHP 的內容顯示,成功就是 OK 啦! MySQL 呢?直接給他 mysql -u username -p 再輸入密碼,就可以知道有沒有設定成功啦!整個的設定真的是粉簡單的啦!通常,如果上面的測試沒有成功的話,最大的可能為:
     
    • 網路問題:雖然在本機上沒有問題,但不代表網路一定是通的!請確認一下網路狀態!例如 Route table, 撥接情況等等;
    • 網頁問題:例如鳥哥第一次以 Tarball 安裝好之後,竟然發現無法顯示主機的首頁!後來才發現是主機的首頁設定錯誤!導致找不到網頁,這個時候,請特別留意瀏覽器上面的顯示訊息,裡面包含了無法連進來主機的問題!請提供這樣的訊息到討論區,大家才知道問題出在哪裡吶!
    • 權限問題:例如你剛剛在上面的 user 設定為 nobody 了,但偏偏要被瀏覽的目錄權限為 750 ,自然就無法讓人家連線進去啦!
    • 問題的解決之道:如果還是沒有辦法連接上來你的 Linux Apache 主機,那麼請:
      1. 察看 /var/log/httpd/error_log 這個檔案吧!他應該可以告訴你很多的資訊喔!
      2. 另外,也要仔細的察看一下你的瀏覽器上面顯示的資訊,這樣才能夠知道問題出在哪裡! ^_^
      3. 另一個可能則是防火牆啦!察看一下 iptables 的訊息!
     

    用戶的個人網頁啟動
     
    呵呵!再來則是個人用戶啦!如果是個人用戶要自己的首頁時,要怎麼辦呢?剛剛我們不是提到了 httpd.conf 中有一項關於個人首頁的設定,通常如果你不另行修改 httpd.conf 檔案的話,他的預設值都是『 public_html 』這個設定,好了,那要如何設定個人網頁呢?假設以 test 這個帳號為例,我們可以這樣進行:
     
    [test@test test]$ cd  # 回到自己的家目錄
    [test@test test]$ mkdir public_html 
    [test@test test]$ chmod 755 public_html 
    [test@test test]$ chmod 755 /home/test
    # 在你的用戶端家目錄中建立了一個 public_html 的目錄, 
    # 並將此目錄的權限改成可以讓其他人觀看,注意喔, apache 
    # 預設是 public_html ,但是如果你在 httpd.conf 這個檔案中 
    # 改變了目錄名稱,則必須作適當的修正喔!
     
    然後在你的目錄中,亦即 /home/test/public_html 當中,建立一個檔名為 index.html 的 HTML 檔案,然後在 IE 的網址列打入
      http://你的網站名稱/~test/
    則 apache 會自動將 IE 的訊息傳到 /home/test/public_html 這個目錄中,並搜尋檔名為 index.html 或 index.htm 或 index.php 的檔名!所以說, index.html 是 apache 第一個找尋的檔名喔!這就是你的首頁啦!
    不過,如果您覺得這樣實在很討厭,怎麼需要多加一個毛毛蟲的符號『 ~ 』呢!真煩,可不可以只使用:
      http://你的網站名稱/test
    就好啦!?當然沒問題啦!但是就需要動一點手腳了!最常見的有兩種方式:
    • 建立連結檔:

    • 這是最簡單的方法啦,還記得我們的主頁有 Options FollowSymLinks 吧?!呵呵!所以利用 ln 就可以達到我們的需求了!首先,需要找到首頁,然後在首頁底下輸入連結的方法:
      [root@test root]# cd /usr/local/apache2/htdocs
      [root@test htdocs]# ln -s /home/test/public_html test
      這樣立刻生效啦!不需要重新修改喔!厲害吧!! ^_^
       
    • 建立 Alias:

    • 另一種方是就是使用我們剛剛提到的那個 Alias 功能啦!也是粉簡單的ㄋㄟ:
      [root@test root]# vi /usr/local/apache2/conf/httpd.conf
      Alias /test/ "/home/test/public_html/"
      <Directory "/home/test/public_html">
          Options FollowSymLinks
          AllowOverride None
          Order allow,deny
          Allow from all
      </Directory>

      [root@test root]# /usr/local/apache2/bin/apachectl stop
      [root@test root]# /usr/local/apache2/bin/apachectl start

      請注意:
       
      1. 在 Alias 後面雙引號接的目錄『務必』於最後面加上一個 / ,亦即 ....public_html/ 才行!若沒有加上 / ,則該行字串會被視為『檔案』而非目錄!特別留意這一點!
      2. 那個 <Directory ....> 裡面的設定中,關於目錄 /home/test/public_html 請『務必』幫他加上雙引號喔!否則可能會無法成功的啟動!!
       
      好啦!這樣你的用戶之個人網頁就 OK 囉! ^_^

進階安全設定:

    接著下來,我們想要瞭解一下,那麼 Apache 有沒有其他額外的設定呢?
     

    CGI 之執行、Index 顯示、查無網頁顯示之設定:
     
    CGI 之執行:
    首先要來提到的是 CGI 的執行問題,這也是很多朋友想要提出的問題啦!到底要怎麼設定才可以在某些路徑裡面執行 CGI 的程式呢?而不是使用純文字將他 show 出來?!難道要執行 CGI 就非得在 /usr/local/apache2/cgi-bin 這個目錄下不可嗎?當然不是!有很多的方法可以來設定的!舉個例子來說,假設今天有個一般身份的使用者 test ,他想要可以執行 CGI ,那麼他的家目錄在 /home/test/public_html 底下,而他的程式是放在 /home/test/public_html/cgi 這個目錄中,那我可以怎麼作呢?同樣有兩種作法:
     
    • 使用 Options 及 ExecCGI

    • 你可以在 httpd.conf 這個檔案中,找個地方加入底下的文字:
      [root@test root]# vi /usr/local/apache2/conf/httpd.conf

      方法一:
      # 先確認在 httpd.conf 當中,底下這一行已經將註解拿掉了!
      AddHandler cgi-script .cgi
      # 請注意,如果是想要讓 .pl 的檔案可以執行 ( Perl ),那麼上面那行要改寫成:
      AddHandler cgi-script .cgi .pl

      # 再加入底下幾行:
      <Directory "/home/test/public_html/cgi">
          Options ExecCGI
          AllowOverride None
          Order allow,deny
          Allow from all
      </Directory>

      方法二:
      # 直接加入底下這幾行即可!
      <Directory "/home/*/public_html/cgi">
          Options ExecCGI
          SetHandler cgi-script
      </Directory>

      [root@test root]# /usr/local/apache2/bin/apachectl stop
      [root@test root]# /usr/local/apache2/bin/apachectl start

      呵呵!這樣該目錄立刻就可以執行 CGI 的程式啦!當然啦,那個 cgi 的檔案,權限當中也必須要有『可執行, x 』的權限喔!而,如果你要執行某個 cgi 程式,例如 index.cgi 好了,那麼就需要填入:http://your.server.name/~test/cgi/index.cgi 囉!
       
    • 使用 ScriptAlias 功能:

    • 還有另外一個功能也可以達到同樣的效果,那就是使用 ScriptAlias 喔!你可以在 httpd.conf 這個檔案中,找個地方加入底下的文字:
      [root@test root]# vi /usr/local/apache2/conf/httpd.conf

      # 先確認在 httpd.conf 當中,底下這一行已經將註解拿掉了!
      AddHandler cgi-script .cgi

      # 再加入底下這一行:
      ScriptAlias /testcgi/ "/home/test/public_html/cgi/"

      [root@test root]# /usr/local/apache2/bin/apachectl stop
      [root@test root]# /usr/local/apache2/bin/apachectl start

      呵呵!這樣也是可以啦!假設你要執行的檔案仍然是 index.cgi ,那麼,你的執行網址會變成: http://your.server.name/testcgi/index.cgi !就是這點不同囉!其他的都一樣啦!
       
    Index 顯示:
    剛剛我們前面不是提到 Options 關於 Indexes 的說明嗎?對啦!由於 Indexes 加入的時候,找不到 index.html 時,會將該目錄下的所有檔案以類似 FTP 的畫面秀出來,所以很危險,因此,可以的話,盡量不要在 Options 後面加 Indexes 喔!記得將他拿掉!會比較稍微安全一些!
    查無網頁:
    那麼好啦,既然不要秀出沒有 Index.html 的目錄下的所有檔案,有沒有什麼替代的方法,可以讓使用者知道該目錄下沒有這個檔案,並提供他另一個網頁的連結呢?再舉個另外的例子,如果你的網頁經過了大量的改版,所以某些原來的檔案已經不見了!但是你有很多的老網友,那麼他們連過來的時候,將會發生很多的錯誤,怎麼辦?
     
    沒關係,還記得當你查不到網頁的時候, IE 或者是其他的搜尋引擎,會自動的跑出一個視窗,警告說,查無該網頁,並提供另一個可能的連結給您是吧?!同樣的,我們也可以利用這樣的機制,自己建立一個額外的連結資料來給大家使用!如此一來,嘿嘿!找不到網頁也沒關係,我們已經提供了其他的連結,這樣就可以很輕易的引導使用者到適當的目錄去瀏覽啦
     
    • 設定 httpd.conf

    • 又要設定這個 httpd.conf 檔案啦!找到底下的地方,並且將他開啟吧:
      [root@test root]# vi /usr/local/apache2/conf/httpd.conf

      # 大概在 880 行左右,可以找到下面這一行:
      ErrorDocument 404 /missing.html
      # 將前面的 # 拿掉喔!由於我們的 code 有:
      100-199:一些基本的訊息
      200-299:要求成功的達成
      300-399:Client 的需求需要其他額外的動作,例如 redirected 等等
      400-499:Client 的要求沒有辦法完成(例如找不到網頁)
      500-599:主機的設定錯誤問題
      # 所以,上面的 ErrorDocument 404 就是在無法查詢到網頁的代號之一啦!
      # 而接在這個項目後面的就是網頁的名稱咯!因為在 / ,所以可以瞭解他的檔案全名為:
      # /usr/local/apache2/htdocs/missing.html 還記得 / 在 Apache 就是 DocumentRoot 吧!

      [root@test root]# /usr/local/apache2/bin/apachectl stop
      [root@test root]# /usr/local/apache2/bin/apachectl start

       
    • 編輯 /usr/local/apache2/htdocs/missing.html

    • 再來則是要編輯這個檔案囉!因為只要沒有找到對應的網頁時,這個網頁就會被顯示在 Client 端的瀏覽器上面,喝!你可以這樣編啦:
      [root@test root]# vi /usr/local/apache2/htdocs/missing.html
      <html>
      <center>
      Missing HTML Web Page<br><br>
      I can't find any web page for you, <br>
      Please contact with me root@localhost, <br>
      or press <a href="http://192.168.1.2/manual/">here</a> to see the manual of Apache 2.xx
      </center>
      </html>
      打上面那個 192.168.1.2 改成你的 IP ,這樣就可以啦!註:這個版本很是奇怪!同樣的方法,我在其他的所有 distribution 上面都可以成功,唯獨以 Mandrake 9.0 即使用 Tarball 方式安裝的此一方法,卻無法成功!然而若使用 Apache 所預設提供的功能,那麼就又可以成功!還真的是很奇怪.....
       

    抵擋 IP 與限制使用者動作的設定(allow, deny, limit)
     
    任何的 Service 都一樣,應該都會有『限制連線登入者』的功能!當然, Apache 也不例外!他提供了抵擋 IP 或者是限制使用者進行某些工作的方法!那就是 Allow 與 Deny 的功能,另外,亦有 Limit 的功能可以來使用!
     
    • 抵擋某些 IP 或 domain 來源:

    • 很多時候我們發現有某些來源的使用者似乎沒有很遵守我們網站的約定,可能會砍站啦,或者是可能從事一些讓管理員很生氣的勾當!當然,你可以使用 iptables 等之類的防火牆功能來擋掉他,不過,我們也可以額外的再以 Apache 來擋他喔!還記得我們在前面的 <Directory> 裡面的設定時,常常會看到 order allow,deny 那一行吧!呵呵!那就是我們可以針對的某些設定啦!舉例來說,假如你知道 192.168.1.100 這個 IP 的使用者不乖以及 testing.idv.tw 這個 domain 的來源不被信任,你就不讓他進入某個目錄內,例如 /home/test/public_html/cgi,那麼你可以這樣做:
      [root @test root]# vi /usr/local/apache2/conf/httpd.conf
      # 額外再新增幾行吧!
      <Directory "/home/test/public_html/cgi">
          Options ExecCGI
          SetHandler cgi-script
          order allow,deny
          deny from 192.168.1.100
          deny from testing.idv.tw
      </Directory>
      如此一來,嘿嘿!那個 192.168.1.100 及所有來自 testing.idv.tw 這個領域的主機就無法進入你的 /home/test/public_html/cgi 這個目錄囉!不過,其他的目錄還是可以進入喔!請留意這個現象!所以,如果要將他全部的權限都關閉的話,或許 iptables 還是比較好的選擇,不過,如果只是在乎某些目錄而已,那麼這個選項就不錯用了!
       
    • 限制某些功能:

    • 一般來說, Client 端有哪些功能可以動作呢?大概有:GET, POST, OPTIONS, DELETE 等等,由於 POST 與 DELETE 算是比較高權限的功能,如果今天您有一個目錄,在這個目錄中對於 192.168.1.50 這個 IP 來源你只許他觀看,而不許他貼上資料,那麼你要怎樣設定呢?我們繼續以上面的例子來進行說明好了,在 /home/test/public_html/cgi 這個目錄中,你要限制讓 192.168.100.0/24 這個網段不能『瀏覽』,至於張貼文章方面,則僅有 192.168.1.50 這個 IP 可以具有這樣的的功能,那麼你可以這樣修改:
      [root@test root]# vi /usr/local/apache2/conf/httpd.conf
      # 額外再新增幾行吧!
      <Directory "/home/test/public_html/cgi">
          Options ExecCGI
          SetHandler cgi-script
          <Limit GET>
              order allow,deny
              deny from 192.168.100
              allow from all
          </Limit>
          <Limit POST>
              order allow,deny
              allow from 192.168.1.50
              deny from all
          </Limit>
          order allow,deny
          deny from 192.168.1.100
          allow from all
      </Directory>
      嘿嘿!如此一來,就可以將我們的網頁資料搞的更安全啦!! ^_^
       

    主機狀態說明網頁設定
     
    既然已經安裝好了 WWW 主機,除了提供服務之外,重要的是要如何維護囉!嘿嘿!那麼是否一定要額外安裝其他的套件才能知道目前的主機狀態呢?當然不需要啦!我們可以透過 Apache 提供的特別功能來查詢主機目前的狀態!那就是 mod_status 這個模組囉!如何使用呢?由於 mod_status 是預設一定會安裝的模組,所以根本不需要擔心載入與否的問題,唯一要擔心的,則是需要啟動這個模組的相關設定而已!同樣的,也是編輯 httpd.conf 這個檔案即可,可以這樣做:
     
    [root@test root]# vi /usr/local/apache2/conf/httpd.conf
    # 找到底下這幾行,並且將他修改一下:
    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 192.168.1.11
    </Location>

    [root@test root]# /usr/local/apache2/bin/apachectl stop
    [root@test root]# /usr/local/apache2/bin/apachectl start

     
    在上面的設定中,必須要特別留意那個 Deny 與 Allow 的設定,說明的是,要察看這個訊息的,只有 192.168.1.11 這個 IP 來的要求才提供!否則一切則予以禁止。當然啦,主機的安全是需要維護與保密的,當然不讓人家知道是比較好的呢!然後直接在網址上面輸入: http://your.server.name/server-status 這樣就可以看到你的主機的一些狀態囉!有點像底下的樣子:
     
    Apache Server Status for 192.168.1.2
    Server Version: Apache/2.0.43 (Unix) PHP/4.2.3 
    Server Built: Dec 26 2002 01:59:03 

    ------------------------------------------------------------------------------

    Current Time: Monday, 30-Dec-2002 01:31:28 CST 
    Restart Time: Monday, 30-Dec-2002 01:31:13 CST 
    Parent Server Generation: 0 
    Server uptime: 15 seconds 
    1 requests currently being processed, 4 idle workers 
    W____...........................................................
    ................................................................
    ................................................................
    ................................................................

    Scoreboard Key:
    "_" Waiting for Connection, "S" Starting up, "R" Reading Request,
    "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
    "C" Closing connection, "L" Logging, "G" Gracefully finishing,
    "I" Idle cleanup of worker, "." Open slot with no current process

    PID Key: 
     

       31027 in state: W ,   31028 in state: _ ,   31029 in state: _ 
       31030 in state: _ ,   31031 in state: _ ,
     

    ------------------------------------------------------------------------------
    To obtain a full report with current status information you need to use the ExtendedStatus On directive. 
    ------------------------------------------------------------------------------

    Apache/2.0.43 Server at 192.168.1.2 Port 80

     
    上面說明的,除了顯示出主機目前的 IP 與 時間 之外,亦列出 Linux Server 上面,關於 Apache 的使用程序狀態!雖然很簡單且陽春,不過該有的還都是有了!蠻不錯的ㄋㄟ~有空的時候,可以多多的察看一下 Apache 的狀態!不過,特別需要注意一下能夠使用這個路徑的,最好侷限在少數人會較為安全喔!
     

    關於權限的意義說明與設定
     
    在網路的服務當中,最麻煩的地方可以說是『權限』的問題了!怎麼說呢?剛剛上面提到了提到了 httpd.conf 當中有設定 User 與 Group 這幾個咚咚,而這兩個屬性是針對 Process 來設定的,也就是說,當你啟動了 apache 之後,就會有 httpd 這個服務的 Process 在你的 Linux 系統(記憶體當中)的背景中執行了,而且這個 httpd 屬於剛剛我們設定的 nobody 使用者與 nobody 群組(註:剛好 User 與 Group 的名稱都叫做 nobody 啦!^_^)!所以囉,當使用 httpd 這個 Process 來進行 Linux 資料的存取時,那麼如何設定 Linux 底下最重要的『權限』問題呢?還記得我們在 Linux 主機之資源管理 裡面提到的,所謂的 PID 就是 Process 的 ID,當我們觸發一個事件時,Linux 就會給這個事件一個 ID 當作執行時候的識別碼,例如當 test 這個人下達『 vi /etc/fstab 』的時候,主機就會給這個事件一個 ID ,此外,這個 PID 還會記錄其他的權限喔!例如,因為啟動 vi 這個事件的使用者是 test ,所以這個 PID 當然就屬於 test 囉!所以當 vi 執行期間所開啟的所有檔案,都需要針對 test 來察看他是否可以具有讀、寫、執行的權限呢!
     
    這樣說您應該有點瞭解了吧?是的,你在 Client 是否能瀏覽 Server 所提供的資料,是跟 Server 內的『權限』設定有關吶!舉個例子來說,還記得剛剛我們有將 /home/test/public_html 這個目錄設定成可瀏覽吧!而這個目錄屬於誰呢?沒有錯,是屬於 test 這個人的!那麼我們的 apache 所啟動的 process 屬於誰呢?以上面的例子為例,那就是 nobody 這個人的!那麼萬一 /home/test 的屬性是『drwx------』,請問你,Client 端的使用者能否瀏覽這個目錄呢?呵呵!由於 Apache 的 nobody 在 /home/test 的權限當中要尋找的是 others 的屬性,嗄!怎麼是『 --- 』,自然就是『不行瀏覽!』無論你的 /home/test/public_html 權限開放的有多大!這樣可以瞭解嗎?也就是說,萬一上層目錄就不許進入了,那麼底下的目錄當然也就無法被登入囉!
     
    一般而言,使用者容易在個人首頁發現『Permission deny』的字眼,最常見的問題就是『Linux 權限設定錯誤』了!只要針對你的權限去修訂,那麼差不多就可以解決絕大部分的 Apache 權限問題喔!另外,需要特別留意的是,使用者能否進入一個目錄,主要是與可執行與否的權限(也就是 x )有關,因此,如果您要開放靜態網頁的瀏覽,那麼至少應該要將 /home/test 設定成 drwxr-xr-x ,亦即是 755 才行,不過,如果您要執行的是 PHP 之類的網頁程式語言,呵呵!那麼您只要設定 drwx--x--x 就可以囉!也就是 711 啦!因為畢竟 Client 只要能夠執行 PHP 程式即可,因為結果的顯示是在 Client 端吶!與是否能在 Server 端瀏覽是沒有關係的ㄋㄟ~
     

    設定認證網頁
     
    是不是有過進入某個網站之後,按下某些連結,竟然出現一個對話框框,告訴你要登入該目錄,需要輸入帳號與密碼才能登入?呵呵!那就是所謂的『認證網頁』囉!這種認證的模式最起碼可以達到最小的保護作用,使你的資料比較保險啦!咦!那麼使用 Limit 不就好了?但是 Limit 的規定較為嚴格,若是改天你去外頭的網咖店,然後想要連線進入你的主機作一些事情,如果你設定除了內部 IP 之外,外部就無法以 Web 介面連進來的話,那麼不就糗了嗎?呵呵!這個時候認證網頁可就是你的好幫手囉!另外,目前很多學校老師也會將自己的講義放在網站上,然後以認證網頁的方式提供自己的學生下載使用!所以說,這個也是蠻不錯的一個變通方式哩!
     
    那麼認證網頁怎麼搞呀!?說來還真的是很容易ㄋㄟ!
     
    1. 既然我們是『按了某個連結進入某個目錄之後,才會出現對話視窗』,那麼首先當然就是要有那個設定為認證網頁的『目錄』囉!請注意,是要目錄才行喔!
    2. 然後,在對會視窗中,既然我們需要輸入 ID 與密碼,那麼自然就需要密碼檔囉!另外,雖然 Apache 有支援 LDAP 及 MySQL 等等的認證機制,不過我們這裡並不討論其他的認證機制,完全使用 Apache 的預設功能而已,所以,底下我們會使用基本 ( Basic ) 的認證模式喔!
    3. 再來,當然就是到 httpd.conf 檔案中去設定我們剛剛建立的那個目錄的相關資訊囉!
    4. 最後,重新啟動就 OK 啦!
     
    好了,那麼我們來作個例子吧!假設,我要在 http://localhost/protect/ 這個目錄下作一個認證資料,在這個目錄當中僅有 test.html 這個檔案,此外,我要讓 test 這個 ID ,密碼為 testing 及 qqq 這個帳號,密碼為 qqqpass 做為登入的帳號,那麼我該如何設定我的資料呢?一樣的,一步一步來進行吧!
     
    1. 製作保護目錄:

    2. 第一步驟當然是製作保護目錄囉!既然這個目錄在 http://localhost/protect/ 底下,那麼有哪些方式可以達成呢?
      • 最簡單的方是就是直接在 /usr/local/apache2/htdocs 這個目錄下再建立一個名為 protect 的子目錄囉!不過,這樣似乎太簡單了 ^_^
      • 再來,如果您的網頁支援 FollowSymLinks 這個參數(options)的話,那麼在任何一個目錄下,只要你在 /usr/local/apache2/htdocs 利用 link ( ln ) 製作一個連結檔,那麼也可以達成所要的目的!
      • 最後,哈哈!直接使用 Alias 就可以啦!
      我們選擇使用最簡單的目錄方式來達成好了:
      [root@test root]# mkdir -p /usr/local/apache2/htdocs/protect
      [root@test root]# cd /usr/local/apache2/htdocs/protect
      [root@test root]# echo "This is a protect page" > test.html
      上面我加一個 -p 的參數可以幫我遞迴的一直建立好這個目錄喔!然後立刻就又做好一個檔案ㄋㄟ~
       
    3. 製作密碼檔:

    4. 製作密碼檔只要使用 htpasswd 這個命令就可以啦!他的語法是這樣的:
      htpasswd
      語法:
      [root@test root]# htpasswd [-c] password_file_name User_name
      說明:
      -c  :當後面的 password_file_name 這個密碼檔不存在時,那麼就建立該檔案

      範例一:
      新建一個檔案,並建立 test 這個 ID
      [root@test root]# cd /usr/local/apache2
      [root test apache2]# htpasswd -c apache.passwd test
      New password:
      Re-type new password:
      Adding password for user test

      範例二:
      已經存在密碼檔了,要新增使用者帳號
      [root@test apache2]# htpasswd apache.passwd qqq
      New password:
      Re-type new password:
      Adding password for user qqq

      [root@test apache2]# more apache.passwd
      test:gPxbCD4QIGFwg
      qqq:5qPxrLrxRyRrg

      沒錯!這樣就 OK 啦!你已經有兩個帳號( test 與 qqq )在 /usr/local/apache2/apache.passwd 這個檔案中囉!不過,這裡請注意,由於你的密碼檔可以存放在任何地方,但是畢竟這裡面有你的重要資訊,所以,請特別留意的是,『不要將這個檔案放置在瀏覽器可以瀏覽到的目錄!』舉個例子來說,放在 /usr/local/apache2/htdocs 就不是一個明智的選擇!因為很可能會被別人瀏覽到這個檔案而失去『認證密碼』了,那麼豈不是很危險!?所以,盡量給他放在瀏覽器無法瀏覽到的地方,例如我們提到的 /usr/local/apache2 這個目錄就是一個還不錯的目錄!
       
    5. 針對保護的目錄設定認證的內容:

    6. 當然接下來我們要針對那個受保護的目錄進行設定啦!就是要又開始搞設定檔囉!怎麼搞?!就是要加入資訊吶!加入哪些資訊呢?這當中當然就包含了『密碼檔的完整目錄與檔名、認證的類型、提示的字元、與允許登入的使用者』如果你看到認證網頁的登入視窗時,通常就會看到兩個輸入 ID 與密碼的格子,所以自然要設定密碼檔的檔案,而你也會看到該視窗上面有一些提示字元告訴你這個網頁是幹嘛用的!另外,像我們剛剛製作了兩個帳號,那萬一你只允許一個帳號登入,另一個帳號不許登入,那要如何搞呢?可以這樣搞喔:
      [root@test root]# vi /usr/local/apache2/conf/httpd.conf
      在這個檔案的設定中,請特別留意設定的地方,不要設定錯誤地方,
      一般而言,新的咚咚可以加在最後面一行開始,比較不會搞錯地方!
      加入底下這幾行:
      <Directory "/usr/local/apache2/htdocs/protect">
        AuthName "Protected Directory"         #這個是顯示在視窗上面的提示字元
        AuthType Basic                 #這個則是認證的類型!就選Basic即可,Apache的預設功能
        AuthUserFile /usr/local/apache2/apache.passwd  #密碼檔放置的地方啦!完整的目錄與檔名
        require valid-user               #允許的使用者,valid-user為任何一個在認證檔案當中的帳號皆可
        #require user test               #若將 # 移除,則表示只有 test 才是可以登入的帳號!
      </Directory>
      真的很簡單啦!就只要上面的四行設定內容就夠了! AuthName 就是在出現要你輸入ID與密碼的那個提示字元啦!至於誰可以登入呢?以上面的說明為例,當設定為 valid-user 時,表示任何在認證檔案中出現的使用者都接受登入,至於如果是 require user test 那一行,則表示可以登入者僅有 test ,如果有兩個以上呢?可以寫成『 require user test qqq 』的樣式喔!
       
    7. 重新啟動與測試:

    8. 這個不用再講了吧?!:
      [root@test root]# /usr/local/apache2/bin/apachectl stop
      [root@test root]# /usr/local/apache2/bin/apachectl start
      測試怎麼測試?直接連上網頁吶!在網址列輸入:『http://your.host.name.or.IP/protect/test.html』然後應該就會出現:

      看到那個 Protected Directory 的字眼了吧!那就是 AuthName 囉!然後使用者名稱與密碼即是我們剛剛建立的密碼檔之內容啦!認證網頁設定成功!恭喜喔!
       

    .htaccess 檔案與 AllowOverride 設定的用途:
     
    從頭到現在有的學的吧? ^_^ 粉累喔!呵呵!尤其最累的是,如果萬一你真的設定好了一個 Apache ,而且也真的很高興的對外開放了!那麼你是否會注意到一件事情,那就是,萬一你有 20 的使用者,每個使用者都要求由他設定自己風格的家目錄,亦即他們想要自己設定自己的認證網頁,想要自行管理自己的 Apache 底下的其他功能,怎麼辦?由於有關 Apache 的設定就一定需要:
     
    1. 修改 httpd.conf這個檔案;
    2. 然後再重新開機,好讓設定的結果可以正確的顯現出來!
     
    如此一來的話,難道:
     
    • 我就要把 root 的密碼給他們嗎?好讓他們可以自行修改 httpd.conf ?如此一來的話,不就粉危險,而且,難保 A 君的設定被 B 君不小心給修改了~哇!真是傷腦筋~
    • 我就要一個一個的幫他們修改嗎?誰來就要幫誰改,難道改天我有 200 的使用者時,若一天分配給一個人,我就要改 200 天的 Apache ,豈不討厭~
     
    這不是很累嗎?呵呵!這個時候, .htaccess 的檔案就『英雄有用武之地』咯!這個檔案的最大功能就是『可以取代 httpd.conf 裡面,對於這個 .htacces 所在目錄的設定內容!』也就是說,如此一來,每個目錄下的 .htaccess 可以讓該目錄擁有相關的權限、風格等等的設定!如此一來, root 也就不會這麼累了,並且,修改完這個檔案之後,也不需要重新開機ㄋㄟ!棒吧! ^_^,不過,到底 .htaccess 這個檔案可以工作的內容有哪些呢?呵呵!這個時候,可就需要 AllowOverride 在 httpd.conf 裡面的設定來規定囉!所謂的 AllowOverride 說的是『允許取代某些設定內容』的意思,而這個 AllowOverride 可以取代的資料有:
     
    • Options:就是允許自行設定一些網頁參數,例如 Index, ExecCGI....等等
    • AuthConfig:就是網頁認證的設定內容啦!
    • Limit:就是上面我們提到過的關於安全的設定咯!
    • All:上面的規定都可以允許 .htaccess 裡面來設定
    • None:上面的規定都不許由 .htaccess 來規定!
     
    如果你想讓 .htaccess 這個檔案有最大的取代內容時,可以選擇 AllowOverride All,若僅想讓這個檔案具有取代網頁認證的功能,那麼就可以使用 AllowOverride AuthConfig 即可!
     
    舉個例子來說,剛剛我們設定 /usr/local/apache2/htdocs/protect 為保護目錄,需要做的事情最重要的為設定 httpd.conf 這個檔案,並且需要設定有的沒的一大堆,好了,現在假如我想讓所有的 user 都能自行在自己的家目錄內進行?怎麼利用 .htaccess 這個風格檔案呢?這其中當然涉及了(1)root 對於 httpd.conf 的設定以及(2)一般身份使用者對於自己家目錄下的設定!好了,現在我們分別以兩種身份來設定自己家目錄下的咚咚,以 test 這個使用者為例好了,來看看怎麼使用認證網頁在一般使用者家目錄下!
     
        關於 root 的設定項目:

    0. 先確認底下這些資訊可以在您的 httpd.conf 裡面發現:
    [root@test root]# cd /usr/local/apache2/conf
    [root@test conf]# vi httpd.conf
    AccessFileName .htaccess  <==表示你的設定檔案的檔名!
    <Files ~ "^\.ht">
        Order allow,deny
        Deny from all
    </Files>
    # 上面這個資訊主要就是定義出你在某個目錄底下有個控制檔案,那個檔案的檔名啦!

    1. 建立讓每個使用者家目錄下都能自行設定 AuthConfig 的規則!
    [root@test root]# vi /usr/local/apache2/conf/httpd.conf
    # 在一個新的角落(可以在最後一行加入)加入底下的字眼
    <Directory "/home/*/public_html/">
        AllowOverride AuthConfig
        Order allow,deny
        Allow from all
    </Directory>
    # 上面的說明是:在每個使用者家目錄下,都可以使用 AuthConfig 的設定
    # 在 .htaccess 這個檔案中!設定完畢之後重新啟動 Apache
    3. 重新啟動 Apache 囉!
    [root@test root]# /usr/local/apache2/bin/apachectl stop
    [root@test root]# /usr/local/apache2/bin/apachectl start
     

        關於 一般身份使用者 (test 為例) 的設定項目:

    0. 以一般身份使用者登入,或者使用 su 轉換 test 的身份
    [root@test root]# su test

    1. 建立保護目錄與網頁內容
    [test@test test]$ mkdir public_html
    # 上面說明的是我要建立 test 底下的一個名為 public_html 的目錄!
    # 還記得上面提到的個人首頁的設定吧!對啦!這個 public_html 請依你的規定設定!
    # 此外,這個 test 必需已經存在你的 /etc/passwd 當中了!
    [test@test test]$ cd public_html
    [test@test public_html]$ mkdir protect2; cd protect2
    [test@test protect2]$ echo "protect2 web page" > testing.html
    # 上面可以建立目錄與網頁內容喔!

    2. 建立 test 自己的密碼檔
    [test@test test]$ htpasswd -c /home/test/apache.passwd test
    New password:
    Re-type new password:
    Adding password for user test
    # 在 /home/test 底下建立密碼記錄檔,檔名 apache.passwd ,
    # 並且建立起一個名為 test 的使用者!

    3. 建立 .htaccess 檔案的內容!
    [test @test protect2]$ vi .htaccess
    # 加入底下的字眼:
    # This file is used to test the .htacces function
    AuthName "Protect test by .htaccess"
    Authtype Basic
    AuthUserFile /home/test/apache.passwd
    require user test
    # 不論你信不信,這個時候當你要進入 http://your.host.name/~test/protect2/testing.html
    # 就需要有認證密碼才行了!很快樂吧!

     
    趕快去測試看看吧!這樣對於 Root 來說,是比較輕鬆一點,對於使用者來說,可以使用的規範也比較多樣化!但是,衍生出來的安全問題,可能就需要大家共同的維護了!當然啦,你也可以使用 AllowOverride 來設定更多 .htaccess 可以規範的項目呢!
     

    防火牆
     
    一句老話啦!就是『如果你的 Server 不能動,但是確定設定都沒有問題,那麼除了持續查詢 log file 之外,最大的可能就是防火牆擋住了!』這句話應該沒有什麼太大的疑問才對~所以呢,萬一你的 Apache 不能動,那麼請看看你的防火牆設定規則吧!因為防火牆我們已經提過了,請參考『簡易防火牆設定』一文,這裡不再贅述!

登錄檔分析與其重要性

    無論怎麼說,登錄檔永遠是相當重要的!尤其是在 /var/log/httpd 裡面的 error_log 這個檔案!因為:
     
    1. 他記錄了所有試圖進入你主機讀取 apache 的網頁資料,但是卻失敗的所有紀錄,
    2. 此外,如果你的 Apache 設定錯誤,那麼問題也是記錄在這個檔案中;
     
    而至於其他相關的檔案,嘿嘿!那個 /var/log/httpd/access_log 檔案也需要注意一下,因為他記錄了所有來自 Client 端的 IP 以及其他相關的讀取資料之訊息!這個檔案對於未來分析你的 Apache ( WWW )被讀取網頁的所有紀錄喔!相當的重要的啦!
     

    syslog 與 logrotate:
     
    首先針對 Apache 的設定檔當中,要注意的就是那個 syslog 與 logrotate 囉!詳細的資訊可以參考一下『鳥哥的 Linux 私房菜 -- 基礎學習篇』之認識登錄檔。好了,那麼你的 syslog 應該要怎麼設定呢?因為我們畢竟是使用 tarball 安裝的,所以根本就沒有所謂的 syslog 的設定,不過,這個不需要擔心,這是因為 Apache 裡面本來就有 syslog 的設定存在了!所以,這點我們不需要重新來設定啦!只要記得你的登錄檔目錄是在哪裡就可以啦!目前我的登錄檔與 pid file 是在:
     
    • /var/log/httpd/access_log
    • /var/log/httpd/error_log
    • /var/log/httpd/pid
     
    然後,我的 logrotate 的紀錄目錄在 /etc/logrotate.d 裡面,因此,我就在裡面新增一個檔案,稱做是 apache,你可以這樣做:
     
    [root@test root]# cd /etc/logrotate.d
    [root@test logrotate.d]# vi apache
    # 新加入這幾行
    /var/log/httpd/access_log /var/log/httpd/error_log {
        rotate 4
       missingok
        sharedscripts
        postrotate
            /bin/kill -HUP `cat /var/log/httpd/httpd.pid 2>/dev/null` 2> /dev/null || true
        endscript
        compress
    }
     
    如果不知道上面的每個資料代表的意義,還是請前往 認識登錄檔 一文喔!然後趕快試看看是否可以執行 logrotate 呢?
    logrotate -f /etc/logrotagte.conf
    呵呵!這樣就對啦!那麼為什麼要加入這個 logrotate 呢?這是因為,未來,如果你的 WWW 伺服器越來越大時,那麼應該 access_log 檔案會『很可怕的大!』例如目前本小站的流量每週可以造成我的登錄檔長大到 400MB 以上~如果不將他 rotate 的話,哈哈!不出幾個星期,我的硬碟就爆了~所以, logrotate 是很重要的喔!
     

    Web Analyser
     
    如果我想要知道最近有誰曾經來我的網頁上面逛過,以及該使用者使用的是什麼樣的作業系統呢?該怎麼看?!很簡單吶!直接跑到 /var/log/httpd/access_log 這個檔案裡頭去瞧一瞧就知道啦!裡面的紀錄有點像這樣:
      
    192.168.1.11 - - [27/Dec/2002:00:20:24 +0800] "GET /manual/ HTTP/1.1"  200 7340
     來源 IP       日期與時間          動作與網頁      動作代碼
     
    立刻可以知道在何時,那個 IP 對於本機的動作是什麼,以及是否有成功?很清楚對吧!所以我們可以藉由這個檔案知道我們的主機被利用的狀態!但是,如果像我的主機一樣,一下子就有 400 多 MB 的檔案,您要怎麼分析?看都看不完ㄋㄟ~呵呵這個時候,就需要使用 Shell scripts 的幫助啦!你可以自行寫一個適合您自己的分析工作,來進行解析的行為!不過,由於目前網路上已經有很多的好用的 Web 分析的工具啦!所以呢,我們只要進行他的安裝即可喔!很方便吧!底下我們介紹幾個好用的 Web 分析工具來給大家瞧一瞧!
     

      Webalizer 網頁分析工具
       
      • 官方網站:http://www.mrunix.net/webalizer/
      • 設定難度:簡單,極適合新手架設
      • 軟體特色:大致上,所有分析的內容他都有了!雖然圖表比較沒有那麼炫...
      • 授權模式:GPL
       
      這個是很不錯,也且功能也都很完備的一個網頁分析軟體!不論是在安裝與設定上面,都是粉簡單的ㄋㄟ~所以才說他是極適合新手來安裝的一個軟體吶!此外,由於他是 GPL 授權碼的軟體,所以呢,嘿嘿!很快樂的下載吧!請趕快到官方網站下載一下囉!
       
      整個安裝流程上面很簡單,最重要的地方只有在設定的一些小步驟需要留意而已,好了,廢話不多說,我們直接來安裝與測試一下,就知道他是怎麼回事啦!不過,在安裝與設定之前,你必須要先知道你系統裡面的 log file 在哪裡,以及未來要安裝在何處?!我的規劃是這樣的:
       
      • 我的 Apache 登錄檔案為 /var/log/httpd/access_log 這個檔案!
      • 預計直接將軟體安裝在 /usr/local 底下(Webalizer 提供了反安裝!)
      • 預計將輸出的內容傳導到 /usr/local/apache2/htdocs/webalizer
       
      好了,開始來下載、安裝與設定吧!你可以依照底下的網站來下載,不過不保證該檔案會繼續存在~你也可以到『http://linux.vbird.org/download/index.php#webalizer』來下載檔案!
       
      0. 確認一些必須要的繪圖相關 RPM 已經安裝!
      # 因為這個套件需要 gd, zlib 與 png 才行,所以,你需要安裝這三個咚咚!
      # 在 Mandrake 9.0 當中,你所需要的套件在光碟中的名稱為:
      libpng3-devel-1.2.4-3mdk
      libpng3-1.2.4-3mdk
      zlib1-1.1.4-3mdk
      zlib1-devel-1.1.4-3mdk
      libgd1-1.8.4-6mdk
      libgd1-devel-1.8.4-6mdk
      # 至於在 Red Hat 7.2 當中,你要的套件名稱為:
      zlib-1.1.3-25.7
      zlib-devel-1.1.3-25.7
      libpng-devel-1.0.14-0.7x.3
      libpng-1.0.14-0.7x.3
      gd-1.8.4-4
      gd-devel-1.8.4-4
      # 請一定要安裝喔!不然肯定無法安裝這套軟體的!

      1. 下載軟體:可以直接到官方網站,或者到我們網站上下載
        http://linux.vbird.org/download/index.php#webalizer
      [root@test root]# wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.01-10-src.tgz

      2. 安裝軟體,同樣的,到 /usr/local/src 下面解壓縮喔!
      [root@test root]# cd /usr/local/src
      [root@test src]# tar -zxvf /root/webalizer-2.01-10-src.tgz
      [root@test src]# cd webalizer-2.01-10
      [root@test webalizer-2.01-10]# ./configure --prefix=/usr/local  \
      > --with-language=chinese 
      [root@test webalizer-2.01-10]# make
      [root@test webalizer-2.01-10]# mkdir -p /usr/local/man/man1
      [root@test webalizer-2.01-10]# make install
      [root@test webalizer-2.01-10]# mkdir -p /usr/local/apache2/htdocs/webalizer
      # 這個時候系統就已經將軟體安裝在你的系統上囉!你看,很簡單吧! ^_^

      3. 設定檔編修:
      # 由於 webalizer 的基本設定檔在 /etc/ 底下,不過你需要更改名稱之後才行動作!
      [root@test root]# cd /etc
      [root@test etc]# cp webalizer.conf.sample webalizer.conf
      [root@test etc]# vi webalizer.conf
      # 只要修改底下這幾個重要的資訊即可:
      LogFile   /var/log/httpd/access_log  #這個就是你的 Apache 登錄檔完整路徑與檔名
      LogType   clf             #選擇 log file 的格式,就是 clf 這種啦!
      OutputDir  /usr/local/apache2/htdocs/webalizer #當資料處理完畢之後,輸出的目錄
      Incremental  yes             #當你的 logrotate 不是一個月一次時,必需設定!
      HostName     test.vbird.idv.tw      #輸出檔案的時候,顯示在最上方的主機名稱
      # 其他的則使用預設值就可以啦!很簡單的啦!

      4. 測試 Run 的結果
      [root@test etc]# webalizer
      Webalizer V2.01-10 (Linux 2.4.19) Chinese
      使用記錄檔 /var/log/httpd/access_log (clf)
      產生輸出於 /usr/local/apache2/htdocs/webalizer
      主機名稱是 'test.vbird.idv.tw'
      歷史記錄(history file)找不到…
      Previous run data not found...
      產生報表給 十二月 2002
      Saving current run data... [01/09/2003 16:57:18]
      產生報表給 一月 2003
      產生彙總報表
      儲存歷史記錄資訊
      2687 記錄 in 1.15 秒, 2336/sec
      # 瞧!這樣就是執行 OK 啦!然後規定一下,每天跑一次ㄋㄟ!

      [root@test etc]# vi /etc/crontab
      # 加入底下這一行:
      20 2 * * *  root /usr/local/bin/webalizer
      # 說的是每天的 2:20 執行一次 webalizer 喔!

       
      接下來要測試啦,直接給他 http://your.host.name/webalizer 這個目錄的最後面那個 webalizer 跟上面你設定的 Output 的目錄有關,請依照你的主機剛剛的設定去規定他吧!結果呢?呵呵!你可以到我們的流量統計單去觀察一下就知道啦!畫面也是很不錯的囉!
         
      如此一來,你就可以很輕鬆的觀察你的主機的任何資訊囉!包括來自於其他地方的 IP ,網頁瀏覽數等等的!很棒吧!
       

      awstats 網頁分析利器:
       
      • 官方網站:http://awstats.sourceforge.net/
      • 設定難度:較難,需要有點技巧!
      • 軟體特色:中文化的很完整,而且該有的都有了,相當炫的一個分析利器!
      • 授權模式:GPL
       
      這套軟體相當的不錯!很棒,他提供了 CGI 程式執行與指令列模式執行,不過,我個人不太喜歡使用 CGI 的模式,所以我是使用指令列模式來進行這個程式的圖形製作的!如果你是由官方網站下載新的版本來安裝的話,那麼底下的流程可能不是很適合你,目前我已經將一些需要修正的項目變更過,並且擺在我的網頁上面,如果有需要的話,可以到『http://linux.vbird.org/download/index.php#awsats』來下載喔!
       
      1. 下載軟體:可以直接到官方網站,或者到我們網站上下載
        http://linux.vbird.org/download/index.php#awsats
      # 使用瀏覽器將網站上面提供的資料拿回去!當然,你也可以直接到官方網站上面去下載最新的版本!
      # 假設你已經將資料捉回去,並且放置在 /root 這個目錄當中了,檔名為:
      awstats.tar.gz

      2. 安裝軟體:
      # 由於我已經將資料都丟在一起了,所以請到 /usr/local/apache2/htdocs 或者其他瀏覽器可以
      # 進入瀏覽的目錄下面,直接將上面捉到的檔案解壓縮即可!
      [root@test root]# cd /usr/local/apache2/htdocs
      [root@test htdocs]# tar -zxvf /root/awstats.tar.gz
      # 會產生一個名為 awstats-5.3 的目錄喔!

      3. 設定檔編修:
      # 這個設定檔比較奇怪一點,他一定是 awstats.{your.hostname}.conf 的格式,所以,以我為例,
      # 我的主機名稱為 test.vbird.idv.tw 好了,那麼就可以取名為 test ,所以,
      [root@test htdocs]# cd /usr/local/apache2/htdocs/awstats-5.3
      [root@test awstats-5.3]# cp awstats.HOSTNAME.conf awstats.test.conf
      [root@test awstats-5.3]# vi awstats.test.conf
      # 只要編輯前面幾行就夠了!
      LogFile="/var/log/httpd/access_log" # Apache 的登錄檔,請依你的設定寫入!
      SiteDomain="test.vbird.idv.tw" # 你的主機名稱,請修改吧!
      HostAliases="localhost 127.0.0.1 192.168.1.2"       # 主機還有別名的話,請將他加入!
      DirIcons="/awstats-5.3/icons" # The output's icons
      DirCgi="/awstats-5.3"
      DirData="/usr/local/apache2/htdocs/awstats-5.3/data"    # The output directory
      DNSStaticCacheFile="/usr/local/apache2/htdocs/awstats-5.3/cache/dnscache.txt"
      DNSLastUpdateCacheFile="/usr/local/apache2/htdocs/awstats-5.3/cache/dnscachelastupdate.txt"
      # 再改一個小地方
      [root@test awstats-5.3]# vi awstats.sh
      cd /usr/local/apache2/htdocs/awstats-5.3
      ./awstats.pl -config=test -update -output > awstats.html
      # 路徑名稱與 config 後面接的你剛剛 copy 的那個檔案的檔名(中間部分的名稱)

      4. 修改一下 httpd.conf 的設定內容:
      [root@test awstats-5.3]# vi /usr/local/apache2/conf/httpd.conf
      # 在最後一行給他加入底下的咚咚:
      <Directory "/usr/local/apache2/htdocs/awstats-5.3">
          AddHandler cgi-script .cgi .pl
          AllowOverride AuthConfig
          Options +ExecCGI
      </Directory>
      [root @test awstats-5.3]# /usr/local/apache2/bin/apachectl stop
      [root @test awstats-5.3]# /usr/local/apache2/bin/apachectl start

      5. 測試 Run 的結果
      [root@test awstats-5.3]# cd /usr/local/apache2/htdocs/awstats-5.3
      [root@test awstats-5.3]# ./awstats.sh
      [root@test awstats-5.3]# ls -l data
      -rw-rw-rw-    1 root     root         4776 Jan 10 14:46 awstats012003.test.txt
      # 如果有看到類似上面的檔案出現在 data 當中,哈哈!那就是成功啦!

      6. 設定每日執行!
      [root @test root]# vi /etc/crontab
      # 加入底下這一行:
      25 03 * * * root /usr/local/apache2/htdocs/awstats-5.3/awstats.sh

       
      這樣也就修改妥當囉!詳細的圖形示意圖可以參考: http://awstats.sourceforge.net/cgi-bin/awstats.pl 相當的不賴吧!趕快試看看!

虛擬主機架設

  • 什麼是虛擬主機 ( Virtual Host )?

  • 咦!虛擬主機是什麼東西吶!怎麼說的好像很神奇的樣子呢?他有什麼功能?為什麼大家都想要玩一下虛擬主機吶?呵呵!所謂的虛擬主機,基本上,就是『讓你的一部主機上面,有好多個"主網頁"存在,也就是說,硬體實際上只有一部主機,但是由網站網址上來看,則似乎有多部主機存在的樣子!』,舉個例子來說好了,你可以由我的網頁上面知道一件事情,那就是我的 WWW 主機其實只有一部,那就是 pc510.ev.ncku.edu.tw 。不過,我這部主機其實有很多個 Domain name 存在,例如 linux.vbird.idv.tw 與 phorum.vbird.idv.tw 這兩個網址。不過,上面這兩個網址其實也同時指到 pc510.ev.ncku.edu.tw 這部機器上面,亦即是 pc510.ev.ncku.edu.tw, linux.vbird.idv.tw, phorum.vbird.idv.tw 這三個不同的主機名稱,其實都是指向同一部電腦主機!你可以在你的 Linux 機器上面以 nslookup 的指令搜尋一下這三個主機名稱,你就曉得為什麼了!但是,當你在瀏覽器上面輸入:
       
    怪了!怎麼會顯示不同的網頁內容呢?好像是存在三部主機對吧!呵呵!這就是所謂的虛擬主機啦!讓你的一部機器上面,搞的好像好多部同的主機一樣的一個簡易的功能啦! ^_^
     
  • 架設的大前提:

  • 那麼要架設虛擬主機需要什麼咚咚呢?呵呵!以剛剛我的網站的結果為例,我要架設三個主網頁,也就是必須要有多個 domain name 囉!對啦!這就是虛擬主機的大前提啦!『你必須要有多個主機名稱,亦即是需要多個 domain name, FQDN 』,例如上面我就具有三個 domain name 囉!在需要多個 domain name 的情況下,你可以做的方式就是:
     
    • 申請多個 host name 在 ISP 的管理上面;
    • 自行設定經過合法授權的 DNS 主機來自行設定自己的 domain name !
     
    沒錯,就是這幾個方法,因此,請確定你的主機名稱已經搞定了!不然的話,怎麼架設虛擬主機呢?您說是吧! ^_^
     
  • 實際架設:

  • 好了!又要來搞設定啦!又是 httpd.conf 這個檔案啦!反正幾乎只要跟 Apache 有關的,就是動這個檔案就對啦!這裡先來說一下我的大前提設定囉!
     
    • 已經設定好了三個 domain name ,分別是 mdk90.vbird.org, www.mdk90.vbird.org, phorum.mdk90.vbird.org ,此外,這三個網域的主網頁個別放置在 /home/mdk90, /home/www.mdk90, /home/phorum.mdk90 ,亦即是:
      • mdk90.vbird.org --> /home/mdk90
      • www.mdk90.vbird.org --> /home/www.mdk90
      • phorum.mdk90.vbird.org --> /home/phorum.mdk90 
至於這個設定嘛!真的是很簡單耶!只要幾行就搞定了,設定完成之後還會讓你偷笑ㄋㄟ~呵呵!看看實例吧!
 
[root@test root]# cd /usr/local/apache2/conf
[root@test root]# vi httpd.conf
# 在這個檔案的最下方加入底下這些字眼!

NameVirtualHost *     # 設定你的虛擬主機判定的依據!這裡是 * 亦即是
             # 所有連上這部機器的名稱都會被使用來當作虛擬主機的設定之用!

<VirtualHost *>
    ServerName    mdk90.vbird.net
    DocumentRoot  /home/mdk90
</VirtualHost>

<VirtualHost *>
    ServerName    www.mdk90.vbird.net
    DocumentRoot  /home/www.mdk90
    CustomLog     /var/log/httpd/www.access_log combined # 特別將登錄檔額外分離出來
</VirtualHost>

<VirtualHost *>
    ServerName    phorum.mdk90.vbird.net
    DocumentRoot  /home/phorum.mdk90
</VirtualHost>

 
要注意的是:
  1. 在虛擬主機的設定上還有很多的可用的功能,不過,最低的限度是需要有 ServerName 及 DocumentRoot 這兩個即可!
  2. 雖然原來我就有 mdk90.vbird.net 這個網域,但是因為設定了虛擬主機之後,自己的原來名稱可能會不見去,所以,這裡必須將自己的名稱也寫入才行!
  3. 上面有發現一個 CustomLog 的設定喔!該設定會讓以 www.mkd90.vbird.net 這個網域登入的登錄檔不再寫入原來的 /var/log/httpd/access_log 檔案,而是自行寫入 /var/log/httpd/www.access_log 這個檔案!
馬上測試看看!呵呵!會發現,咦!我真的有三個主網頁了哩!很不錯吧!這個作法可以讓你的 WWW 網頁更有靈活度喔!舉個例子來說,前一陣子因為酷學園討論區(http://phorum.study-area.org) 常常掛點,所以鳥哥就自告奮勇的跟站長說,只要將 phorum.study-area.org 這個 domain name 指向我的主機 IP ,那麼也可以直接進入我的討論區,如此一來,只要修改一下 DNS 即可轉換到我的討論區啦!並且不需要再進行任何額外的設定!對於網頁維護的靈活度是真的很有幫助的喔!
 
  • 需要注意的事項:

  •  
    虛擬主機並沒有什麼值得特別注意的地方,只要設定正確,大致上就不會有太大的問題!不過,你可能需要特別注意剛剛我們建立起來的新的登錄檔喔!為什麼呢?我們上面不是提過說,登錄檔在大型的網站上面成長的幅度是很可觀的嗎?所以需要進行 logrotate ,但是你剛剛建立的檔案並不在原本的 logrotate 檔案之內呀!呵呵!這個時候請自行加入 logrotate 個手續喔!否則.....嘿嘿嘿嘿!硬碟空間被用光可不要怪鳥哥喔! ^_^

    客戶端的文字介面 Web 功能:

    什麼!?客戶端竟然也有文字介面的瀏覽器?!哈哈!當然是有啦!不然這裡幹嘛要介紹?!那就是鼎鼎大名的 lynx 以及 wget 囉!請注意的是,這兩個套件並不一定會在安裝的時候就已經安裝在你的系統中,所以請先使用 RPM 查詢一下他是否存在於你的系統當中,然後才能執行喔!他的用途是:
    • lynx:文字介面的瀏覽器,相當的輕巧與快速!
    • wget :文字介面下使用來擷取檔案的指令!
    這兩個指令之前已經介紹過了!請自行前往觀察一下囉!加油啦!

    增強 PHP 程式碼執行速度的模組:


      MM Cache 增強速度模組:
       
      我們上面的介紹都是在於安裝與架設 LAMP 伺服器(Linux + Apache + MySQL + PHP ),不過,如果您曾經瀏覽過 PHP 的網頁時,或許會發現:『咦!怎麼 PHP 的速度慢慢的.....』,這是怎麼一回事啊!?PHP 不是號稱速度上面的反應是很快速的嗎?怎麼會慢慢的呢? 雖然 PHP 的程式已經很快了,但是因為電腦僅認識 0 與 1 的 binary file 來執行, 而由於 PHP 程式不需要編譯即可透過 PHP 核心與其相關函式庫來執行, 不過,如此一來還是多了一道手續,導致執行效能還是不比傳統的經過編譯的程式語言來的快(例如C程式語言之類的!)。 那怎麼辦?有辦法加快 PHP 程式的速度嗎?嗯!讓我們先換個角度想,如果我們可以將 PHP 程式預先轉換成為可直接執行的 binary file ,那麼不就可以直接讀取,進而加快速度嗎? 沒錯!是這樣~這東西稱為預編器~ 其中, MM Cache 就是一個很不錯的 PHP 預編器。 MM Cache 可以將您的 PHP 程式與 PHP 核心及相關函式庫預先編譯後暫存下來,以提供未來使用時,可以直接執行, 加上他可以優化您的 PHP 程式,因此,可以讓您的 PHP 網頁速度增快不少喔! MM Cache 囉!他的官方網站在:http://turck-mmcache.sourceforge.net/index_old.html。目前 MM Cache 已經出到了2.3.9 ( 2003/04/10 釋出),不過,他僅在 PHP 4.1 以上版本以及 Apache 1.3 與 2.xx 版本測試過,如果你的 Apache 與 PHP 不是這些版本,那就抱歉啦!不一定可以使用的!不過,呵呵!我們上面提供的 Tarball 的安裝方法本來就是這樣的版本,所以您可以輕易的安裝好 MM Cache 喔!廢話不多說,趕緊來安裝吧!
       
      • 下載:

      • 你可以在官方網站下載最新的版本(http://turck-mmcache.sourceforge.net/index_old.html),也可以在我們網站下載鳥哥試過的版本:
        http://linux.vbird.org/download/index.php#www_mmcache
         
      • 安裝:

      • 安裝 MM Cache 真的是很簡單喔!趕緊來安裝吧!
        [root@test root]# cd /usr/local/src
        [root@test src]# tar -zxvf /完整路徑/turck-mmcache-2.3.9.tar.gz
        # 會產生一個名為 turck-mmcache-2.3.9 的目錄
         
        [root@test src]# cd turck-mmcache-2.3.9
        [root@test turck-mmcache-2.3.9]# phpize
        # 這個指令是 PHP 套件所提供的!可以建置好你的 mmcache 原始碼
         
        [root@test turck-mmcache-2.3.9]# ./configure --enable-mmcache=shared
        [root@test turck-mmcache-2.3.9]# make && make install
        # 這個動作會編譯一個名為 mmcache.so 的動態函式庫模組,
        # 並且會主動的將他安裝在 /usr/lib/php4 這個目錄當中!
        # 這樣就安裝完畢了!很簡單吧!
         
      • 設定:

      • 在 MM Cache 的設定方面需要更動兩個地方,第一個是動態函式庫載入的設定,第二個則是 PHP 的設定!
        1. 設定主動載入動態函式庫模組:
        [root@test root]# vi /etc/ld.so.conf
        # 在這個檔案內加入底下這一行:
        /usr/lib/php4
         
        [root@test root]# ldconfig
        # 上面這兩個步驟比較有趣一點,在 ldconfig 這個指令的功能是:
        # 『載入動態函式庫到記憶體當中做為快取』之用,至於載入的動態函式庫則是
        # 根據 /etc/ld.so.conf 這個檔案的設定為準!這的動作只要第一次設定時進行
        # 即可,未來在開機完成之後,系統會主動的載入動態函式庫的!
        # 另外請注意, ld.so.conf 裡面只要寫『目錄』即可!
         
        2. 修改 php.ini 
        # 請注意,由於每個人的 php.ini 都不相同,例如使用 RPM 安裝者,應該是
        # /etc/php.ini ,但是我上面的安裝設定卻是 /usr/local/php4/php.ini
        # 請依照您的主機來設定喔!
        [root@test root]# vi /完整路徑/php.ini
        # 在這個檔案的最後一行加入底下這幾行:
        ;;;;;;;;;;;;
        ; MM Cache ;
        ;;;;;;;;;;;;
        extension="mmcache.so"
        mmcache.shm_size="16"
        mmcache.cache_dir="/tmp/mmcache"
        mmcache.enable="1"
        mmcache.optimizer="1"
        mmcache.check_mtime="1"
        mmcache.debug="0"
        mmcache.filter=""
        ; end of mmcache
         
        3. 建立快取目錄:
        [root@test root]# mkdir /tmp/mmcache
        [root@test root]# chmod 0777 /tmp/mmcache
         
        4.重新啟動 Apache
        [root@test root]# /etc/rc.d/init.d/httpd restart
        # 或
        [root@test root]# /usr/local/apache2/bin/apachectl restart
        這樣一個簡單的小步驟,嘿嘿!您的 PHP 程式碼的反應性~啊~增快很多很多喔! ^_^
       

      Apache 的效能測試
       
      事實上,安裝 Apache 的時候,Apache 就已經提供了一個效能測試 ( benchmark ) 的軟體了!那就是 ab 這個程式!怎麼用呢?就直接用啊!
       
      [root@test root]# /usr/sbin/ab [-dSk] [-c number] [-n number] 網頁.php
      參數說明:
      -d :不要顯示 saved table 的百分比資料;通常不要那個資料,所以會加 -d
      -k :還記得上面的 KeepAlive 吧!加入 -k 才會以這樣的功能測試;
      -S :不顯示長訊息,僅顯示類似 min/avg/max 的簡短易懂訊息!
      -c :同時有多少個『同時連線』的設定(可想成同時連線的 IP )
      -n :同一個連線建立幾個要求通道!(可想成同一個 IP 要求的幾條連線)
      更多的訊息請自行 man ab 喔!
      範例:
      [root@test root]# /usr/sbin/ab -dSk -c100 -n100 \
      > http://linux.vbird.org/home.php
      This is ApacheBench, Version 1.3d <$Revision: 1.67 $> apache-1.3
      Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
      Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

      Benchmarking linux.vbird.org (be patient).....done
      Server Software:        Apache/1.3.27
      Server Hostname:        linux.vbird.org
      Server Port:            80

      Document Path:          /home.php
      Document Length:        51736 bytes

      Concurrency Level:      100
      Time taken for tests:   1.648 seconds
      Complete requests:      100
      Failed requests:        0
      Broken pipe errors:     0
      Keep-Alive requests:    0
      Total transferred:      5795454 bytes
      HTML transferred:       5775070 bytes
      Requests per second:    60.68 [#/sec] (mean)
      Time per request:   1648.00 [ms] (mean)
      Time per request:   16.48 [ms] (mean, across all concurrent requests)
      Transfer rate:      3516.66 [Kbytes/sec] received

      Connnection Times (ms)
                    min   avg   max
      Connect:       52   309   369
      Processing:   467   687  1079
      Total:        467   996  1405

       
      這樣就能夠瞭解您的 Apache 效能了!因為我是在本機上面測試的,所以速度上面當然是很快囉!建議可以到遠端同樣使用 ab 來測試一下你的 Apache 效能,尤其是加上了 mm cache 之後,看看能不能增快速度呢? ( 註:這個 ab 程式對於讀取 MySQL 之類的網頁似乎沒有辦法成功的完成測試的樣子,所以請不要使用 phpBB2 的網頁來測試喔!盡量直接以 PHP 的網頁來測試! ) 嘿嘿!

    砍站軟體與 Nimda 病毒的抵擋 scripts:

    幾個比較知名的網站管理員大概都有這樣的困擾,那就是網站常被砍站軟體所強力下載,結果造成主機的 CPU loading 過重,最後竟然會導致死掉~唉!真是的~人怕出名豬怕肥吶!先來解釋一下什麼是砍站吧!所謂的『砍站』,就是以類似多點連線下載的持續性訊息傳遞軟體進行網站資料的下載,而且,一啟用該軟體,該軟體就將『整個網站』的內容都給他 download 下來,很厲害吧!沒錯!是很厲害,但是卻也害死人了~怎麼說呢?因為這種軟體常常會為了加快 download 的速度,所以採用多點連線的方式,也就是會持續不斷的向 Server 發出要求封包,而由於這些封包並不見得能夠成功的讓 Server 把資料傳導給 Client 端,常常會無法投遞就是啦!這樣的結果就是.....造成 Server 要一直不斷的回應,又無法正確的回應出去,此外,要求太過頻繁,結果主機應接不暇,最後....就當機了...真的是林老師ㄌㄟ~我們這個小站的主機古早以前,就是因為這樣的原因,導致服務常常斷斷續續的,並且,由於 CPU loading 太高,結果讓正常連線進來看資料的網友沒有足夠的資源,因此網頁開啟的速度就變的很慢~唉~這些砍站的人,也太不道德啦!
     
    由於這種砍站軟體真的很麻煩,一不注意馬上就又會被砍站而當機,三天兩頭就要重新開機一次,完全讓 Linux 的穩定性無法發揮!真是氣死了~後來,我就自行寫了一個 scripts 來擋這樣的 IP !我的作法是這樣的:
    1. 由於砍站軟體要多點連續下載,因此,同一個 IP 在同一個時間內,會有相當多的連線發生;
    2. 由於他是重複不斷的要求連線,因此剛剛建立的連線在達成下載的目的後,會立刻死掉,而又多生出其他的連線出來,因此,這個時候他的連線情況就變的相當的不正常了!
    3. 由於某些較舊的砍站軟體並不會『欺騙』主機,所以,會在主機的登錄檔裡面記錄住 Teleport 的標記!
    4. 既然如此的話,那麼我就讓我的主機每分鐘去檢查兩個東西(1)先檢查 log file ,如果有發現到相關的 Teleport 字詞,就將該 IP 抵擋掉;(2)使用 netstat 來檢查同一個 IP 的同時連線,如果該連線超過一個值(例如同時有 12 個連線)的話,那麼就將該 IP 抵擋掉!
    5. 此外,由於上面的方案可能會將 Proxy 的 Client 端也同時抵擋掉,真是可憐啊!這個時候,這支程式就會主動的將(1)的情況的主機抵擋 3 天,至於(2)的情況則抵擋2小時!過了該抵擋的時限後,該 IP 即可又連上我們的主機了!
    大致上就是這樣吧!這樣的一程式需要與 iptables 相互配合,所以,請先查閱一下簡易防火牆設定那一篇文章,然後再來下載這支程式吧!這支程式您可以在底下的網址下載喔!
    http://linux.vbird.org/download/index.php#http-netstat.sh
    詳細的安裝步驟我已經以中文寫在該檔案裡面了,所以請先查看一下該檔案的前面說明部分吧!此外,Study Area 的 netman 大哥也已經開發了一套很棒的防砍站的程式了!在防堵砍站的原理上面是完全相同的,不過寫法可能不是很雷同就是了!如果有需要的話,也可以前往 Study-Area 搜尋一下囉!
    http://phorum.study-area.org/viewtopic.php?t=13643

    安裝 phpBB2 討論板:

    上面這樣一路走來,哈哈!終於我們的 LAMP 伺服器就已經大致上搞定啦!那麼接下來你可以利用這個 WWW 主機幫你做什麼事呢?嗄!能作的事情可多囉!目前很多支援 PHP 的架站軟體已經被很完整的開發了,例如 PHPNuke 以及鳥哥很喜歡的 phpBB 呢!這些架站軟體都是建構在 LAMP 上面的,而既然我們的 LAMP 已經搞定了,那麼其他的架站軟體的安裝就真的是相當的快速呢!底下介紹 phpBB 的安裝!你可以到底下的連結去看看喔: 上面最後一個是鳥哥前一陣子寫的,目前已經有出較新版本的 phpBB2 囉!所以,請記得到官方網站下載最新的 phpBB 來安裝喔!畢竟比較新的不但功能比較多,而且臭蟲(Bug)也清理的差不多了!另外,由竹貓星球的竹貓三兄弟也有出一本『phpBB 論壇架設寶典』,裡面也有提到相當多的有用的架站心得與技巧的說明!有興趣的可以先到竹貓星球看看其風格與內容,然後再考慮要不要架站吧! ^_^目前我對 phpBB 倒是蠻喜歡的!

    問題討論:

    • 怪了!怎麼我按照上面文章的設定,設定了底下的咚咚,但是卻還是無法顯示中文?為什麼?

    • AddDefaultCharset Big5
      LanguagePriority tw en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv
      答:
        一般而言,按照上面的設定來編寫 httpd.conf 這個檔案的內容之後,就可以正確無誤的顯示中文字碼才對~但是很多朋友還是來信說到,怪了!怎麼會還是無法顯示中文呢?研究了一下其中的原因,發現其實大家都有個錯誤的用法啦!就是因為,目前的瀏覽器上面都有所謂的快取 ( Cache ) 功能,這個功能主要會將瀏覽過的網頁及其相關資訊,例如圖片、與最重要的網頁的紀錄等,先以檔案的型態儲存在電腦的硬碟中,若下次您在短時間內拜訪該網站時,那麼瀏覽器將會直接由硬碟 ( Cache ) 將資料拿出來使用,所以就不會再次到遠方讀取資料!這可以節省相當多網路流量頻寬,以及縮短等待的時間喔!不過,也由於如此,所以,你上次看到顯示亂碼的那個網頁,也就會被儲存在硬碟當中,因此,在你修改完成 httpd.conf 並且重新啟動 Apache 之後,再次瀏覽該網頁,仍然可能無法顯示出正確的中文的啦!就是因為你曾經瀏覽過啦!那麼要如何解決呢?
        1. 最簡單的方法就是按下『Reload, 重新讀入』,不過,因為有的瀏覽器是藉由『比對網頁資料與自己儲存的 cache 資料是否相同』來做為 cache 更新的依據,而由於你僅修改了 httpd.conf 這個檔案,對於網頁並沒有關係,因此,可能還是會顯示出不正確的中文字喔!
        2. 再來的方法就是『改檔案名稱!』,既然名稱已經跟硬碟的紀錄不一樣了,因此,該筆資料就會被重新讀取,自然就會更新囉!
        3. 不過,最有效的方法,還是直接將你的瀏覽器內的快取記憶體 ( Cache ) 清除掉就可以啦!以 IE 為例:點選『工具』選擇『Internet 選項』,按下『刪除檔案』就可以啦!不過,如此一來,你曾經瀏覽過的網頁的快取資料同時也會被清除掉就是了!
    • 傷腦筋吶!怎麼完全按照上面文章的方法,結果 Apache 與 MySQL 是啟動了,但是 PHP 就是無法啟動?害得我的 PHP 老是直接顯示出原始的檔案內容,而不是執行呢?

    • 答:
        這個問題並不會存在於舊版的 PHP 當中,只有新版的 PHP 才有此一問題!這與 php.ini 的設定有關啦其實,與 Apache 的設定可就沒有關係啦!解決的方法可以有兩種方式:
        1. 直接在你的 php 檔案中,在 <? 的地方,都改寫成 <?php 就可以啦!例如
        2. <? 
          phpinfo( ); 
          ?> 
          改成
          <?php
          phpinfo( ); 
          ?> 
          就可以啦!
        3. 如果不想要這麼麻煩的話,可以直接修改 PHP 的設定檔,亦即是 php.ini 這個檔案,在我們上面文章的例子中,使用的是 /usr/local/php4/php.ini 這個目錄下的檔案,但如果是一般 distribution 提供的 PHP 的話,例如 Red Hat 8.0 ,那麼該檔案將會放置在 /etc/php.ini ,總之,請以搜尋的指令找出該檔案就對了!然後,以 vi 編輯該檔案,找到 short_open_tag 那一段,將該設定改成:
          1. short_open_tag = On
          這樣就可以不需要在 <? 右邊加上 php 而可以執行 PHP 囉!
       
    • 如何解決出現 MySQL 的這個問題:

    • ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
      答:
        這個問題多半出現在找不到 mysql.sock 這個檔案,所以:
        1. 請先確認 MySQL 已經正確的啟動當中(netstat -tl 找尋看看);
        2. 再確定 /tmp/mysql.sock 是否真的存在,若不存在,請使用 find / -name mysql.sock 找到這個檔案,假設這個檔案完整路徑在 /var/lib/mysql/mysql.sock 好了;
        3. 再使用 mysqladmin -S /var/lib/mysql/mysql.sock -u root {其他參數} ...
        4. 測試結果應該都可以正確的啟動了才對!
       
    • 當我在啟動 /etc/rc.d/init.d/httpd restart 時,總是會出現如下的問題:
    • [root@test root]# /etc/rc.d/init.d/httpd restart
      Stopping httpd:                                            [  OK  ]
      Starting httpd: perl: warning: Setting locale failed.
      perl: warning: Please check that your locale settings:
              LANGUAGE = "en",
              LC_ALL = "en",
              LANG = "en"
          are supported and installed on your system.
      perl: warning: Falling back to the standard locale ("C").
      雖然對於我的 Apache 不會產生什麼不良的影響,但是總覺得不太舒服,要如何克服呢?
      答:
        因為您的 apache 有使用 perl 的模組,偏偏 perl 模組會讀取 locale 這個咚咚的變數,這個 locale 應該就是跟語言有關的一些環境變數咯!而我們語言的環境變數與 i18n 有關,也就是在 /etc/sysconfig/i18n 裡面的設定咯!如果是在 Red Hat 9 的系統中,與 i18n 有關的設定值在:『/usr/share/i18n/locale』當中,這裡面有一些我們慣用的語言存在!一般來說,我們的語言通常預設為中文(zh_TW)或者是英文(en),但是在 /usr/share/i18n/locale 當中並沒有 en 存在(我的 red hat 9 沒有...),所以這個時候要以 en_US (因為是美語啊!)來設定即可!如何設定呢?
         
        [root@test root]# vi /etc/sysconfig/i18n
        LANG="en_US"
        LANGUAGE="en_US" 
        LC_ALL="en_US"; export LC_ALL 
        SUPPORTED="zh_TW.Big5:zh_TW:zh:en_US.UTF-8:en_US:en" 
        SYSFONT="latarcyrheb-sun16"
        這樣應該就不會出現問題了吧?!

    課後練習

    • 請問 LAMP 這個伺服器代表什麼意思?
    • Apache 的設定檔檔名一般為何?
    • 在 Apache 的設定檔當中,哪一個參數是用來設定『主網頁』的?
    • 哪一個指令用來重新啟動與關閉 Apache ?(請以 Tarball 安裝的方法來說明)
    • 當我使用 ps -aux 的時候,發現好多的 httpd... 的程序,這是正常的嗎?!最多可以有幾個程序是在那個檔案的那個參數所設定的?!
    • 又,呈上題,這些程序 (process) 的 owner 與 group 是誰?該察看那個設定檔的那個參數?
    • 如果今天我以 http://your.ip 結果卻發現瀏覽器出現類似 FTP 的畫面(會列出該目錄下的所有檔案),這是什麼原因造成的?該如何避免?
    • 在 Apache 裡面, .htaccess 這個檔案的功能為何?

    • 前往參考用解答
    修改歷史:
    2003/01/14:第一次完成
    2003/01/18:新增問題討論:關於中文的說明
    2003/01/21:新增問題討論:關於 PHP 無法使用的問題說明
    2003/04/28:加入砍站軟體的程式說明
    2003/04/29:加入 PHP 原始碼程式優化模組 MM Cache 說明。
    2003/05/07:加入 ab 這個效能測試的說明!
    2003/05/30:使用 Tarball 安裝時常常發生一些困擾,加入 User/Group
    2003/09/10:將原本在 2002/12 安裝 Tarball 的套件更新為目前 2003/09 最新的版本來安裝喔!
    2003/10/02:加入一些問題的克服之道喔!
    2004/03/25:修訂 MySQL 安裝的流程!第四步驟加入權限的修訂!
    2004/09/03:修改了 MMCache 的主網頁。
    其他連結
    環境工程模式篇
    鳥園討論區
    鳥哥舊站

    今日 人數統計
    昨日 人數統計
    本月 人數統計
    上月 人數統計