Web服務器概述
Web服務器也稱WWW服務器,主要功能是提供網上信息瀏覽服務。WWW採用的是客戶端/服務器端結構,其作用是整理和儲存各種WWW資源,並響應客戶端軟件的請求,把客戶所需的資源傳送到客戶端的機器上並顯示出來。
首先介紹下Apache的主要特徵都是有哪些吶?
1、可以運行上所有計算機平臺;2、支持最新的HTTP1.1協議;3、簡單而強有力的基於文件的配置;4、支持通用網關接口CGI;5、支持虛擬主機;6、支持HTTP認證;7.、集成Perl腳本的編程語言;8、集成的、具有可定製的服務器日誌;9、支持安全Socket層(即ssl)【我在下一篇將要介紹】10、用戶會話過程的跟蹤能力;11、支持FastCGI、Java Servlets。
那麼從這麼多突出的特點來看,我們還有神魔理由放棄這個強大而且前途光明的WWW服務器軟件吶?
下面我們先來安裝Apache
下面我們就開始漫漫征服Apache之旅,我會通過循序漸進的需求實例,一步步的學習使用Apache,我想我們會從入門到精通,當然這是需要有一個緩慢積澱的過程的。
Apache運行環境要求不高,它在有6-10MB硬盤空間和8MB RAM的linux操作系統上完美運行。
HTTP協議簡介
HTTP(HyperText Transfer Prototcol,超文本傳輸協議)是Internet上應用最爲廣泛的一種網絡協議,所有的www文件都必須遵循這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。
HTTP事務:一個HTTP事務即客戶端發出一個“HTTP請求”命令和服務器回覆“HTTP響應”結果的過程。“HTTP請求”和“HTTP響應”均爲格式化的數據塊,它們被稱作HTTP報文。
HTTP方法:HTTP協議支持多個不同的請求命令,這些請求命令稱作HTTP方法。每個HTTP請求報文都必須指定其請求方法,用於通知服務器進行什麼樣的響應動作。常見的HTTP方法有GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE等。
(1)OPTIONS:返回服務器針對特定資源所支持的HTTP請求方法,也可利用向web服務器發送“*”的請求來測試服務器的功能性。
(2)HEAD:這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應消息頭中的元信息。
(3)GET:向特定的資源發送請求。
(4)POST:向指定的資源提交數據進行處理請求(比如提交表單等)。數據被包含在請求體中。這種請求可能會導致新的資源的建立或已有資源的修改。
(5)PUT:向指定資源位置上傳其最新內容。
(6)DELETE:刪除指定資源
(7)TRACE:回顯服務器收到的請求。
HTTP的響應碼:HTTP服務器迴應客戶端狀態碼主要有一下幾個:
1xx: 信息性狀態碼,這一類狀態碼代表請求已被接受,需要繼續處理。
100:客戶端應當繼續發送請求。這個臨時響應用來通知客戶端部分請求已被接受請繼續發送請求信息。
101:服務器已經理解了客戶端的請求,並將通知客戶端採用不同的協議來完成這個請求。
2xx: 成功狀態碼
200:OK:請求已成功,請求所希望的響應頭或數據體將隨此響應返回。
3xx: 重定向狀態碼
301:永久重定向,也就是說被請求的資源已永久移動到新位置; Location響應首部的值仍爲當前URL,因此爲隱藏重定向;
302:臨時重定向,也就是說請求的資源現在臨時從不同的URL響應請求;又稱顯式重定向, Location響應首部的值爲新的URL喔。
304:Not Modified如果客戶端發送了一個帶條件的GET請求且該請求已被允許,而文檔中的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則服務器應當返回這個狀態嗎。
4xx: 客戶端錯誤狀態碼
404:Not Found請求失敗,請求所希望得到的資源未被在服務器上發現,一般這個狀態碼被廣泛應用於當前服務器不想揭示到底爲何請求被拒絕或者沒有其他適合的響應可用的情況下。
5xx: 服務器端錯誤狀態碼
500:Internal Server Error服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在服務器的程序碼出錯時出現。
502:Bad Gateway作爲網關或者代理工作服務器嘗試執行請求時從上游服務器接收到的無效響應。
504:GatewayTimeout:作爲網關或者代理服務器嘗試執行請求時未能及時從上游服務器或者輔助服務器(比如DNS)收到響應。
一次HTTP事務完成的過程:也就是一次web服務器的工作過程
建立連接——接受或拒絕客戶端連接請求;
接收請求——通過網絡讀取HTTP請求報文;
處理請求——解析請求報文並做出相應的動作;
訪問資源——訪問請求報文中相關的資源;
構建響應——使用正確的首部生成HTTP響應報文;
發送響應——向客戶端發送生成的響應報文;
記錄日誌——當已經完成的HTTP事務記錄進日誌文件;
目前的web服務器軟件非常多,最流行的web服務器包含以下幾種:
Apache HTTP Server、nginx(輕量級,更多新技術)、lighttpd(輕量級)等等。
在接收和解釋請求消息後,服務器返回一個HTTP響應消息。
下面是在error_log、access_log ,日誌消息裏常見的一些代碼所表達的意思。
HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文
1、狀態行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態代碼、狀態描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
eg:HTTP/1.1 200 OK (CRLF)
apache 的日誌
Apache的通用日誌格式有兩種,common和combined LogFormat
"%h %l %u %t \"%r\" %>s %b" commonLog Format
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
%h 客戶端IP
%l 使用identd時纔會有信息,一般情況下都是-
%u 遠程用戶(從驗證獲取到的)
%t 收到請求時的時間
%r 請求的首行
%s 服務器端返回的狀態碼
%b 除HTTP頭以外的返回的字節數
%{Referer}i 從那個頁面鏈接跳轉到的此頁面
%{User-agent}i 用戶的User-Agent
522 # Set to one of: On | Off | EMail
523 #
524 ServerSignature On #網頁出錯時出現管理員郵箱,這裏可以填上自己的郵箱#
633 DefaultIcon /icons/unknown.gif #如果前面沒有指名,在這裏可以定義圖標圖片#
748 AddDefaultCharset UTF-8 #一般在中文頁面易出現亂碼,一般我們都註釋掉#
怎樣實現虛擬主機/虛擬站點這種效果類?
共有5類實現方式:
1、物理目錄:自己申請的站點空間用不完,可以租出,建立物理目錄,用物理目錄名訪問。
案例:[root@Blue httpd]# cd /var/www/html
[root@Blue html]# mkdir blue
[root@Blue html]# cd blue
[root@Blue blue]# echo "big bang" >index.html
[root@Blue blue]# ll
total 8
-rw-r--r-- 1 root root 9 Aug 25 18:50 index.html
這時訪問一下該目錄:
2、虛擬目錄
這個比物理目錄實現起來比較靈活,做一個例子來說明:主目錄在哪都行,訪問可用別 名
[root@Blue blue]# mkdir tomorrow
[root@Blue blue]# cd tomorrow
[root@Blue tomorrow]# echo "TomorrowS welcome ++" >index.html
在httpd.conf配置文件最後說明虛擬目錄。
992 #</VirtualHost>
993 Alias /tomorrow "/blue"
重啓服務,瀏覽查看效果。
2、虛擬目錄
這個比物理目錄實現起來比較靈活,做一個例子來說明:主目錄在哪都行,訪問可用別 名
[root@Blue blue]# mkdir tomorrow
[root@Blue blue]# cd tomorrow
[root@Blue tomorrow]# echo "TomorrowS welcome ++" >index.html
在httpd.conf配置文件最後說明虛擬目錄。
992 #</VirtualHost>
993 Alias /tomorrow "/blue"
重啓服務,瀏覽查看效果。
現在我們想用虛擬目錄實現http站點下載,並且使用ip/別名可訪問。
[root@Blue tomorrow]# cp /etc/inittab ./ #複製幾個目錄供下載#
[root@Blue tomorrow]# cp /etc/passwd ./
[root@Blue tomorrow]# rm index.html
rm: remove regular file `index.html'? Y
root@Blue ~]# vim /etc/httpd/conf/httpd.conf
[root@Blue tomorrow]# service httpd restart
訪問下載:
2、基於ip地址的虛擬主機
特點: 多個ip地址 、多個fqdn 端口80、多個站點
192.168.1.120 www.blue.com /var/www/html
192.168.1.121 tec.blue.com /var/www/tec
192.168.1.122 mkt.blue.com /var/www/mkt
...........
[root@Blue logs]# mkdir tec mkt
[root@Blue www]# echo "welcome to chian" >mkt/index.html
[root@Blue www]# echo "welcome to mkt " >mkt/index.html
然後在充當客戶機的主機上的C:\Windows\System32\drivers\etc\hosts 文件中添加
192.168.1.120 www.blue.com
192.168.1.121 tec.blue.com
然後配置httpd文件。
重啓服務,嘗試訪問。
現在查看一下日誌:
我們用命令選擇性查看,查看訪問用戶、目錄等
[root@Blue logs]# awk '$9=121{print $1 $2 $3 $4 }' tec_access_log #訪問主機、時間#
2、192.168.1.1--[27/Aug/2013:00:24:04
3、192.168.1.1--[27/Aug/2013:00:24:16
4、192.168.1.1--[27/Aug/2013:00:28:19
5、192.168.1.1--[27/Aug/2013:00:34:16
6、192.168.1.1--[27/Aug/2013:00:38:53
當然我們還可以查看更多。
4、基於端口的虛擬主機或虛擬站點
它基於少量ip、少量名稱、少量端口、多個站點、
例如:192.168.1.120 www.blue.com 80 /90/100等端口訪問到相應站點。
80 /var/www/tec 90 /var/www/tec 100 /var/www/mkt
但是我們等高速客戶機這些部門對應的端口地址或添加鏈接在主站點:
我們先來修改httpd的配置文件內容:
添加監聽端口80、90、100。(一般換取大一些的,這些端口可能會被使用在其他的應用上)
就可以訪問到了:(這裏我沒做成功)
5、基於主機頭
少量ip、 多個名字、 端口只有80 ,也能實現多個站點的訪問。(比較流行)
192.168.1,120 www.blue.com /var/www/html
tec.blue,com /var/www/tec
mkt.blue.com /var/www/mkt
修改配置文件:
974 NameVirtualHost 192.168.1.120:80 #必須打開修改ip地址#
還有:
現在重啓服務,嘗試訪問:
訪問一下mkt市場部的虛擬站點:
那麼我們的虛擬站點就做完了。