Transcript WWW 伺服器
第 四 篇 我們最常講的『架站』其實就是架設一個 Web 網站啦!那麼什麼是 Web 呢?那就是全球資訊廣播的意思 (World Wide Web),或者也可以稱之為互 連網吧!這個是我們目前的人類最常使用的 Internet 的協定之一啦!通常 說的上網就是使用 WWW 來查詢使用者所需要的資訊囉!目前在 Unix-Like 系統中的 WWW 伺服器主要就是透過 Apache 這個伺服器軟體來達成的, 而為了動態網站,於是 LAMP (Linux + Apache + MySQL + PHP) 就這麼 產生啦!讓我們趕緊來進入 LAMP 的世界吧! 常 見 網 際 網 路 伺 服 器 架 設 WWW 的簡史、HTML 與標準制訂 (W3C) 網際網路 (TCP/IP) 會這麼熱門,主要是 80 年代的 email 以及 90 年代之後的 WWW 服務所造成的!尤其是 WWW 這個玩意兒。 WWW 是 World Wide Web 的縮寫,其中 Web 有廣播網的意思 存在,所以簡稱為全球資訊網的就是了。WWW 可以結合文字、 圖形、影像以及聲音等多媒體,並透過可以讓滑鼠點擊的超連結 (Hyperlink) 的方式將資訊以 Internet 傳遞到世界各處去。 P.20-2 請參閱書籍 與其他的伺服器類似的,你要連結上 WWW 網站時,該網站必需 要提供一些資料,而你的用戶端則必需要使用可以解析這些資料 的軟體來處理,那就是瀏覽器啦!簡單的來說,你可以這樣瞧一 瞧 WWW server/client 的相關性: P.20-2 請參閱書籍 WWW 伺服器不但需要一個可讓用戶端瀏覽的平台,還需 要提供用戶端一些資料才行! „ 伺服器所提供的最主要資料是超文件標籤語言 (Hyper Text Markup Language, HTML)、多媒體檔案 (圖片、影像、聲 音、文字等,都屬於多媒體或稱為超媒體)。 „ HTML 只是一些純文字資料,透過所謂的標籤 (<tag>) 來規 範所要顯示的資料格式; „ 在用戶端,透過瀏覽器的對 HTML 以及多媒體的解析,最後 呈現在使用者的螢幕上。 P.20-3 請參閱書籍 HTML 的格式 如上所提到的相關資訊,我們知道伺服器端需要提供用戶端一 些資料,而這些資料其實主要都以 HTML 的格式來呈現的。那 麼什麼是 HTML 呢?我們拿鳥哥的網站來看一下好了。你可以 使用任何一個瀏覽器連結到 http://linux.vbird.org,然後在其 上的頁面上按下滑鼠右鍵,選擇察看原始碼,你就能發現該網 頁是如何寫成的了。 P.20-3 請參閱書籍 HTML主要是由 <html> </html> 所包含起來,而在其中又分 為兩大區塊,一個是與標頭有關的 <head> </head> 區塊, 包括該網頁所使用的編碼格式與抬頭等等。另一部份則是 <body> </body> 所含有的實際網頁內容資料啦。 P.20-3 請參閱書籍 WWW 所用的協定及 WWW 伺服器簡史--就是講古時間 伯納斯-李 (Tim Berners-Lee) 在 1980 年代為了更有效率的讓歐洲核子 物理實驗室的科學家可以分享及更新他們的研究成果,於是他發展出一 個超文件傳輸協定 (Hyper Text Transport Protocol, HTTP)。如同前面 提到的,在這個協定上面的伺服器需要軟體,而用戶端則需要瀏覽器來 解析伺服器所提供的資料。 為了讓 HTTP 這個協定得以順利的應用,大約在 90 年代初期由伊利諾大 學的國家超級電腦應用中心 (NCSA, http://www.ncsa.illinois.edu/) 開 發出伺服器 HTTPd (HTTP daemon 之意)。HTTPd 為自由軟體,所以 很快的領導了 WWW 伺服器市場。 後來由於 HTTPd 這個伺服器一直沒有妥善的發展,於是一群社群朋友便 發起一個計畫,這個計畫主要在改善原本的 HTTPd 伺服器軟體,他們稱 這個改良過的軟體為 Apache,取其『一個修修改改的伺服器 (A patch server)』的雙關語!^_^!這個 Apache 在 1996 年以後便成為 WWW 伺服器上市佔率最高的軟體了 (http://httpd.apache.org/)。 P.20-3~4 請參閱書籍 WWW 是依據 HTTP 這個協定而來的,分為伺服器端與用戶 端; „ Apache 是一個伺服器端的軟體,主要依據 NCSA 的 HTTPd 伺服器發展而來,為自由軟體; „ Mozilla 是一個自由軟體的開發計畫,其中 firefox 瀏覽器是 相當成功的作品。 „ 在撰寫自己的網頁資料時,盡量使用 W3C 所發佈的標準, 這樣在所有的瀏覽器上面才能夠順利的顯示出你想要的樣子。 P.20-5 請參閱書籍 WWW 伺服器與瀏覽器所提供的資源設定 (URL) <協定>://<主機位址或主機名稱>[:port]/<目錄資源> P.20-5 請參閱書籍 WWW server/client 間資料傳輸的方式 GET 就是瀏覽器直接向 WWW 伺服器要求網址列上面的資源,這也是最 常見的。此外,使用 GET 的方式可以直接在網址列輸入變數喔。舉例 來說,鳥哥的討論區有一篇提問的智慧,他的網址是: 『http://phorum.vbird.org/viewtopic.php?t=96』,發現那 個 ?t=96 了嗎?t 就是變數,96 就是這個變數的內容。如果你將問號 後面的資料拿掉時,瞧瞧會出現什麼後果?這麼說,你可以明白 GET 的處理了吧? „ POST 這也是用戶端向伺服器端提出的要求,只是這個要求裡面含有比較多 的資料就是了。舉例來說,討論區裡面不是常常有留言的選項嗎,如 果你選擇留言的話不是會在瀏覽器冒出一個框框讓你填入資料嗎!當 按下傳送後,那些框框內的資料就會被瀏覽器包起來傳送至 WWW 伺服器了。POST 與 GET 不相同喔,GET 可以在網址列取得用戶端所 要求的變數,不過 POST 就不是使用網址列的功能了。 P.20-6 請參閱書籍 WWW 伺服器的類型: 系統、平台、資料庫 與程式 (LAMP) 僅提供使用者瀏覽的單向靜態網頁 提供使用者互動介面的動態網站 P.20-7 請參閱書籍 支援的作業系統:讓所需要的軟體都能夠安裝執行啊; „ 可運作的 WWW 伺服器:例如 Apache 與 IIS 等 WWW 伺 服器平台軟體; „ 網頁程式語言:包括 perl, PHP, JSP, CGI, ASP 等等都算是啦! „ 資料儲存之資料庫系統:包括 MySQL, MSSQL, PostgreSQL 以及甲骨文 (Oracle) 等等。 P.20-8 請參閱書籍 LAMP 平台的說明 在整個平台設計上面,目前常見的有兩大系統,一個是 Linux 作業系統上面,搭配 Apache + MySQL + PHP 等而達成,這 個系統被稱為 LAMP。 P.20-8 請參閱書籍 https: 加密的網頁資料 (SSL) 及第三方公正單位 關於 HTTP 這個傳輸協定當中,你必需要知道的是:『這個傳輸 協定傳輸資料是以明碼傳送的』,所以你的任何資料封包只要被 監聽竊取的話,那麼該資料就等於是別人的啦!那想一想,你有 過上線刷卡的經驗嗎?上線刷卡只要輸入你信用卡的卡號與相關 的截止日期後,就能夠進行交易了。如果你的資料在 Internet 上 面跑時是明碼的情況下,真要命!那你的信用卡不就隨時可能會 被盜用? 雖然大多數 Internet 上面的 WWW 網站所提供的資料是可以隨意 瀏覽的,不過如同上面提到的,一些物流交易網站的資料以及關 於你個人的重要機密資料當然就不能這樣隨意傳送啦!這個時候 就有需要用到 https://hostname 這種連線的方式啦!這種方式是 透過 SSL 加密的機制喔! P.20-10 請參閱書籍 Secure Socket Layer (SSL) Certificate Authorities (CA) 想一想 SSL 這個機制有什麼問題?他的問題就是:『那把 Public key 是伺服器產生且任何人都能取得的』!這是什麼問題?因為 public key 可讓任何人取得,若被釣魚網站取得並且製作一個很類似你網路 銀行的網站,並且騙你輸入帳密,要命了!因為你不知道該網站是詐 騙集團製作的,以為 https 就是安全的,如此一來,即使你的資料有 加密,但結果,在釣魚網站伺服器端還是能夠取得你輸入的帳密啊! 這個時候就需要第三方公正單位來幫忙啦! 所謂的 CA 就是一個公認的公正單位,你可以自行產生一把金鑰且製 作出必要的憑證資料並向 CA 單位註冊 (講到註冊你就要知道...這東西 是要錢的意思!),那麼當用戶端的瀏覽器在瀏覽時,該瀏覽器會主動 的向 CA 單位確認該憑證是否為合法註冊過的,如果是的話,那麼該 次連線才會建立,如果不是呢?那麼瀏覽器就會發出警告訊息,告知 使用者應避免建立連線啊。所以說,如此一來 WWW 伺服器不但有 公正單位的背書,使用者在建立連線時也比較有保障! P.20-10~11 請參閱書籍 WWW (LAMP) 伺服器基本設定 LAMP 所需軟體與其結構 那麼我們的 LAMP 需要哪些東西呢?你必需要知道的是,PHP 是 掛在 Apache 底下執行的一個模組,而我們要用網頁的 PHP 程式 控制 MySQL 時,你的 PHP 就得要支援 MySQL 的模組才行!所 以你至少需要底下幾個軟體: „httpd (提供 Apache 主程式) „mysql (MySQL 客戶端程式) „mysql-server (MySQL 伺服器程式) „php (PHP 主程式含給 apache 使用的模組) „php-devel (PHP 的發展工具,這個與 PHP 外掛的加速軟體有關) „php-mysql (提供給 PHP 程式讀取 MySQL 資料庫的模組) P.20-11~12 請參閱書籍 /etc/httpd/conf/httpd.conf (主要設定檔) /etc/httpd/conf.d/*.conf (很多的額外參數檔,副檔名是 .conf) /var/www/html/ 這就是我們 CentOS 預設的 apache 『首頁』所在目錄啦!當你輸 入『http://localhost』時所顯示的資料,就是放在這個目錄當中 的首頁檔 (預設為 index.html)。 /var/log/httpd/ 預設的Apache 登錄檔都放在這裡,對於流量比較大的網站來說, 這個目錄要很小心,因為以鳥哥網站的流量來說,一個星期的登錄 檔資料可以大到 700MBytes 至 1GBytes 左右,所以你務必要修 改一下你的 logrotate 讓登錄檔被壓縮,否則... P.20-12~13 請參閱書籍 終於要來談一談如何設定 Apache 這個 httpd.conf 設定檔了! 舉例來說,如果你想要針對我們的首頁 /var/www/html/ 這個目錄提供 一些額外的功能,那麼: P.20-15 請參閱書籍 針對伺服器環境的設定項目 P.20-16 請參閱書籍 P.20-17 請參閱書籍 上面的 prefork 及 worker 其實是兩個與伺服器連線資源有關的設 定項目。預設的項目對於一般小型網站來說已經很夠用了,不過 如果你的網站流量比較大時,或許可以修訂一下裡面的數值呢! 這兩個模組都是用在提供使用者連線的資源 (process),設定的數 量越大代表系統會啟動比較多的程序來提供 Apache 的服務,反 應速度就比較快。簡單的說,這兩個模組的功能分類為: 針對模組的功能分類來說: worker 模組佔用的記憶體較小,對於流量較大的網站來說, 是一個比較好的選擇。prefork 雖然佔用較大的記憶體,不過速 度與 worker 差異不大,並且 prefork 記憶體使用設計較為優秀, 可以在很多無法提供 debug 的平台上面進行自我除錯,所以, 預設的模組就是 prefork 這一個呢! P.20-17 請參閱書籍 針對中文 big5 語系編碼的設定參數修改 P.20-19 請參閱書籍 網頁首頁及目錄相關之權限設定 (DocumentRoot 與 Directory) P.20-20 請參閱書籍 Options (目錄參數): Indexes FollowSymLinks ExecCGI Includes MultiViews AllowOverride (允許的覆寫參數功能) ALL:全部的權限均可被覆寫; „AuthConfig:僅有網頁認證 (帳號密碼) 可覆寫; „Indexes:僅允許 Indexes 方面的覆寫; „Limits:允許使用者利用 Allow, Deny 與 Order 管理可瀏覽的權 限; „None:不可覆寫,亦即讓 .htaccess 檔案失效! P.20-20~21 請參閱書籍 Order, Allow, Deny (能否登入瀏覽的權限) 決定此目錄是否可被 apache 的 PID 所瀏覽的權限設定啦! 能否被瀏覽主要有兩種判定的方式: „deny,allow:以 deny 優先處理,但沒有寫入規則的則預設為 allow 喔。 „allow,deny:以 allow 為優先處理,但沒有寫入規則的則預設為 deny 喔。 P.20-21 請參閱書籍 除了這些資料之外,跟網站資料相關性高的還有底下的幾個咚咚: P.20-22 請參閱書籍 MySQL 的基本設定 : 啟動 MySQL (設定 MySQL root 密碼與新增 MysQL 用戶帳號) P.20-28 請參閱書籍 那麼如何針對 MySQL 這個軟體內 的 root 這個管理者 設定他的密碼呢? 你可以這樣做: P.20-29 請參閱書籍 防火牆設定與 SELinux 的規則放行 設定好了 LAMP 之後,開始要讓用戶端來連線啊!那麼如何放行 呢?要放行哪些埠口?剛剛的 port 3306 要不要放行?這裡請注 意,如果是小型的 WWW 網站,事實上,Apache 是連接本機的 MySQL,並沒有開放給外部的用戶來連接資料庫!因此,請不要 將 3306 放行給網際網路連接,除非你真的知道你要給其他的伺服 器讀取你的 MySQL 喔!既然如此,當然只要開放 port 80 即可。 P.20-31 請參閱書籍 P.20-32 請參閱書籍 Apache 伺服器的進階設定 啟動用戶的個人網站 (權限是重點) P.20-34 請參閱書籍 個人首頁的 URL 以及目錄的權限、SELinux 設定 現在假設我們要讓已經存在系統中的 student 這個帳號具有個人 首頁,那就得要手動去建置所需要的目錄與檔案才行。現在請登 入 student,並用該帳號建置底下的相關資訊: 由於 CentOS 預設的使用者家目錄權限是 drwx------ ,這個權限 將無法讓 Apache 的程序瀏覽啊!所以你至少要讓你的家目錄權 限成為 drwx--x--x 才行!這個很重要啊! P.20-35 請參閱書籍 『理論上』就能夠看到你的個人首頁了。不過,可惜的是,我們 的 SELinux 並沒有放行個人首頁!所以,此時你會發現瀏覽器出 現 『You don't have permission』的訊息!趕緊看一下你的 /var/log/messages,裡面應該會教你進行這項工作: P.20-35 請參閱書籍 找不到網頁時的顯示訊息通知 如果你的 /var/www/html/cgi 目錄底下沒有任何首頁檔案 (index.???) 時,那當使用者在網址列輸入 『 http://your.hostname/cgi 』,請問結果會顯示出什麼呢?可 能有兩個: 如果你的 Options 裡面有設定 Indexes 的話,那麼該目錄下 的所有檔案都會被列出來,提供類似 FTP 的連結頁面。 如果沒有指定 Indexes 的話,那麼錯誤訊息通知就會被顯示 出來。 P.20-37 請參閱書籍 P.20-38 請參閱書籍 100-199:一些基本的訊息 „ 200-299:用戶端的要求已成功的達成 „ 300-399:Client 的需求需要其他額外的動作,例如 redirected 等等 „ 400-499:Client 的要求沒有辦法完成(例如找不到網頁) „ 500-599:主機的設定錯誤問題 P.20-38 請參閱書籍 P.20-39 請參閱書籍 瀏覽權限的設定動作 (order, limit) Order deny,allow:以 deny 優先處理,但沒有寫入規則的 則預設為 allow。常用於:拒絕所有,開放特定的條件; Order allow,deny:以 allow 為優先處理,但沒有寫入規則 的則預設為 deny。常用於:開放所有,拒絕特定的條件。 如果 allow 與 deny 的規則當中有重複的,則以預設的情況 (Order 的規範) 為主。 P.20-39~40 請參閱書籍 .htaccess 與認證網頁設定 此時如果能夠使用密碼保護的方式,讓使用者可以輸入帳號/密碼 即可取得瀏覽的權限的話,那用戶端就不用受到那個 order 的 Allow, deny 的限制啦!真好~呵呵!Apache 確實剛好有提供一 個簡單的認證功能,讓我們可以輕鬆愉快的就設定好密碼保護的 網頁呢! P.20-43 請參閱書籍 1. 建立受保護的目錄:既然我們是『按了某個連結進入某個目錄 之後,才會出現對話視窗』,那麼首先當然就是要有那個設定 為認證網頁的『目錄』囉!請注意,是要目錄才行喔! 2. 設定 Apache 所需參數:然後,在對話視窗中,既然我們需要 輸入帳號與密碼,那麼自然就需要密碼檔囉!另外,雖然 Apache 有支援 LDAP 及 MySQL 等等的認證機制,不過我們 這裡並不討論其他的認證機制,完全使用 Apache 的預設功能 而已,所以,底下我們會使用基本 (Basic) 的認證模式喔! 3. 建立密碼檔案:處理完基本的設定後,再來則是建立登入時所 需要的帳號與密碼! 4. 最後,重新啟動 Apache 就 OK 啦! P.20-44 請參閱書籍 P.20-45 請參閱書籍 主設定檔 httpd.conf 的修訂:你必需要在 httpd.conf 這 個主設定檔當中先以 AllowOverride 指定某個目錄下 的 .htaccess 能夠進行取代的參數為何?一般有 AuthConfig, Options 等等,考慮到系統資料的安全,建議 提供 AuthConfig 的項目就好了。設定完畢後請重新啟動 Apache。 „ .htaccess 放置的目錄:在受保護的目錄底下務必要存 在 .htaccess 這個檔案,透過這個檔案即可修改 httpd.conf 內的設定啊! „ .htaccess 的修改:.htaccess 設定完『立刻生效』,不需要 重新啟動 Apache,因為該檔案的內容是『當有用戶端瀏覽 到該目錄時,該檔案才會被使用來取代原有的設定。 P.20-45 請參閱書籍 1. 建立保護目錄的資料 P.20-45 請參閱書籍 2.1 以 root 的身份處理 httpd.conf 的設定資料 P.20-46 請參閱書籍 2.2 建立保護目錄下的 .htaccess 檔案:只要有權限建立者即可 進行 require:後面接可以使用的帳號。假如 /var/www/apache.passwd 內有三個帳號,分別是 test, test1, test2 ,那我這裡只寫了 test ,因此 test1, test2 將無 法登入此目錄。如果要讓該密碼檔內的使用者都能夠登入, 就改成『require valid-user』即可啊! P.20-46~47 請參閱書籍 3. 建立密碼檔案 htpasswd (只要有權限即可執行) P.20-47 請參閱書籍 虛擬主機的設定 什麼是虛擬主機 (Virtual Host) 所謂的虛擬主機,基本上就是『讓你的一部伺服器上面,有好 多個 "主網頁" 存在,也就是說,硬體實際上只有一部主機,但 是由網站網址上來看,則似乎有多部主機存在的樣子!』。舉 個例子來說好了,鳥哥提供的網站主要有主要學習網站以及新 手討論區,分別在底下的連結: „主網站:http://linux.vbird.org „討論區:http://phorum.vbird.org P.20-48 請參閱書籍 架設的大前提:同一個 IP 有多個主機名稱啦! 那麼要架設虛擬主機需要什麼咚咚呢?以剛剛鳥哥的網站的結 果為例,我必需要有多個主機名稱對應到同一個 IP 去,所以說, 你必需先擁有多個主機名稱才行。要如何擁有多個主機名稱? 那就是: 向 ISP 申請多個合法的主機名稱,而不自己架設 DNS; „ 自行設定經過合法授權的 DNS 主機來設定自己所需要的主 機名稱。 相關的 DNS 申請與設定技巧我們在前幾章都談過了,你可得自 行去瞧瞧先! P.20-49 請參閱書籍 一個架設範例練習: P.20-49 請參閱書籍 P.20-50 請參閱書籍 1. 在虛擬主機的設定上還有很多的可用的功能,不過,最低的限 度是需要有 ServerName 及 DocumentRoot 這兩個即可! 2. 使用了虛擬主機後,原本的主機名稱 (linux.centos.vbird) 也要 同時寫入虛擬主機的對應中,否則這個主機名稱可能會不知道 被丟到哪裡去喔! 3. 在www.centos.vbird 這 個 主 機 當 中 多 了 個 CustomLog , 表 示 任 何 向 www.centos.vbird 要求資料的記錄都會改寫入 /var/log/httpd/www.access_log 而不是預設的 /var/log/httpd/access_log。但這個新增的登錄檔必需要加入 logrotate 的管理當中才行喔!否則登錄檔會大到『爆表』 P.20-50~51 請參閱書籍 建立連線加密網站 (https) SSL 所需軟體與憑證檔案及預設的 https 要達成讓 apache 支援 https 協定的話,你必須要有 mod_ssl 這 個軟體才行!請先自行使用 yum 去裝好這個軟體吧!並且重新啟 動 httpd 喔!同時,我們的 CentOS 6.x 也已經預設提供了 SSL 機 制所需要的私鑰與憑證檔案囉!相關軟體提供的檔案如下: „/etc/httpd/conf.d/ssl.conf:mode_ssl 提供的 Apache 設 定檔; „/etc/pki/tls/private/localhost.key:系統私鑰檔,可以用 來製作憑證的! „/etc/pki/tls/certs/localhost.crt:就是加密過的憑證檔! (signed certificate) P.20-61 請參閱書籍 P.20-61~63 請參閱書籍 擁有自製憑證的 https 建立憑證檔 1. 先建立一把 private key 預備提供給 SSL 憑證簽章要求所用; 2. 最後建立 SSL 憑證 (test certificates)。 P.20-63~64 請參閱書籍 P.20-64 請參閱書籍 P.20-64 請參閱書籍 修改 ssl.conf 的內容,使用自製憑證 修改 ssl.conf 的內容也是很簡單!只要修改兩個地方,亦即是 檔案檔名的地方即可! P.20-65 請參閱書籍