WWW 伺服器

Download Report

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
請參閱書籍