Web學習之——03Apache服務器的高級配置(虛擬主機、status)

Apache服務的配置分爲三個階段:

1、  全局配置(theglobal environment):對主服務器或虛擬機都有效,且有些功能是服務器自身屬性;

2、  主服務器(mainserver):主站屬性;

3、  虛擬主機(VirtualHosts):虛擬主機及屬性定義;

 

本次實驗討論第三階段:虛擬主機;

         httpd的虛擬主機;

         httpdstatues

         curl命令的使用

         httpd的壓縮功能

=======================================================

一、httpd的虛擬主機:

1、  什麼是虛擬主機:

虛擬主機是在同一臺主機中搭建基於不同主機名、端口號及基於不同IP的多個網站服務的技術,可以爲運行在同一物理機器上的各個網站指配不同的IP和端口,也可讓多個網站擁有不同的主機名;

虛擬主機的類型:

一共有三種類型的虛擬主機:

         基於端口虛擬主機:一個IP、一個主機名對應多個端口;

         基於IP虛擬主機:一個主機名、同一個端口對應多個IP地址;

         基於主機名(FQDN)的虛擬主機:一個IP地址、一個端口對應多個主機名;

【實驗環境】

        一臺CentOS6.6虛擬機作爲web服務器兼DNS服務器,一臺windows 8.1的物理機做客戶端,規劃如下:

域名:webtest.com                 172.16.21.9                                                                       CentOS6.6

DNS: ns1.webtest.com                  172.16.21.9                                                                       CentOS6.6

Web: httpd.webtest.com(別名:apache.webtest.com)    172.16.21.9               CentOS6.6

Win8.1客戶端:172.16.21.1                   DNS指向 172.16.21.9

2、  DNSApache2.2的基本配置:

1) 在172.16.21.9CentOS虛擬機上安裝並配置好DNS服務,配置文件的內容如下圖所示:

[root@centos ~]# yum install -y bindbind-chroot bind-utils
[root@centos ~]# vim /etc/named.conf

wKiom1YL1x-z-b_KAABZCsyW1G8573.jpg

區域解析文件webtest.com.zone的配置內容如下圖所示:

wKioL1YL11qxxD_jAACIKNtUm28992.jpg

關於DNS的配置,請參考前面有關DNS的配置文章;

2) 在172.16.21.9CentOS虛擬機上通過yum安裝好httpd2.2,做好基本配置並在DocumentRoot目錄下創建好默認的index.html文件。

[root@centos ~]# yum install httpd –y
DocumentRoot "/var/www/html"
[root@centos ~]# cat/var/www/html/index.html
<html>
<head>
         <metacharset="UTF-8">
         <title>kalaguiyin測試</title>
</head>
<body>
         <h2>歡迎訪問,這是測試主頁</h2>
         <marquee>http://kalaguiyin.51cto.com<marquee>
</body>
</html>


3) 在Win8.1主機上配置好網絡,特別注意將DNS指向我們配置好的DNS服務器(172.16.21.9);

wKioL1YL187zmwLLAAE9_PjrFH0469.jpg

4) 在Win8.1客戶端的瀏覽器中輸入相應網址測試兩臺web服務器及DNS配置結果;直接輸入Apache服務器的IP地址的訪問結果;

wKioL1YL1_-Ch1YBAADJpkE9Jzc023.jpg

輸入域名的訪問結果:

wKiom1YL2Bfz7ylbAACxfPftmpc843.jpg

上面的網址即爲我們DNS裏設置的web服務器的主機A記錄,因此可以看到DNSWeb都已經工作正常了哈。

3、  配置虛擬主機:

  1. 配置虛擬主機的前提條件:

虛擬主機與主服務器不能並存,因此需要先關閉主服務器,即找到主服務器端的DocumentRoot,將其註釋掉:

wKiom1YL2FKS7_VOAAAcv6hd48A562.jpg

然後用一個容器類指令來定義虛擬主機:
<VirtualHost IP:PORT>
    ServerName
    DocumentRoot ""
</VirutalHost>
#說明:ServerName和DocumentRoot就是一個虛擬主機最基本的兩個配置,但可以爲每個虛擬主機定義更多的屬性:日誌、用戶訪問控制等等

  1. 配置基於虛擬端口的虛擬主機:

(1)    Apache2.2上面配置如下所示:

#(1)找到httpd.conf文件中虛擬主機段,做如下配置:
<VirtualHost *:80>
     ServerName  www.80.com      #不是根據主機名來定義,因此此處可任意寫
     DocumentRoot "/website/host1"   #80端口的虛擬主機網站根目錄設置爲此處   
</VirtualHost>
 
<VirtualHost *:8080>
     ServerName  www.8080.com
     DocumentRoot "/website/host2"   #8080端口的虛擬主機網站根目錄設置爲此處 
</VirtualHost>

#(2)配置監聽端口(同時監聽80、8080端口):
Listen 80
Listen 8080

#(3)保存退出並檢查語法:
[root@Centos ~]# httpd -t
Warning: DocumentRoot [/website/host1] does not exist   #網站根目錄不存在啊,創建即可
Warning: DocumentRoot [/website/host2] does not exist
Syntax OK
#(4)創建網站根目錄:
[root@centos named]# mkdir -pv/website/host{1,2}
mkdir: created directory `/website'
mkdir: created directory `/website/host1'
mkdir: created directory `/website/host2'
[root@centos named]# httpd -t
Syntax OK
#(5)在上面創建的host1、host2目錄下創建默認主頁面:[root@Centos ~]# vim /website/host1/index.html
<h1>www.80.com</h1>
[root@Centos ~]# vim /website/host2/index.html
<h3>www.8080.com</h3>

#(6)重新啓動httpd服務(因爲改動了端口號)
[root@Centos ~]# service httpd restart

在客戶端瀏覽器中驗證配置:

wKioL1YL2PvB1LKqAABwG8hunkQ588.jpg

wKioL1YL2TzDTDFYAADcV01CW9Q368.jpg

wKioL1YL2Xqy83I-AABomgtQ-Y4546.jpg

wKiom1YL2W7ShQuvAADcdmI7iK0159.jpg


說明:基於端口號的虛擬主機配置在生產環境中用的不多,因爲客戶端訪問web服務器默認用的都是80端口,客戶端並不知道服務器所配置的端口是什麼。

C、配置基於IP的虛擬主機:

1、  Apache2.2上的配置如下:

(1)    爲當前虛擬機添加一個地址,IP的配置結果如下:

[root@centos named]# ifconfig eth1:1172.16.21.15 netmask 255.255.255.0 up
[root@centos named]# ifconfig
eth1     Link encap:Ethernet  HWaddr00:0C:29:6B:87:DD 
         inet addr:172.16.21.9 Bcast:172.16.21.255 Mask:255.255.255.0
         inet6 addr: fe80::20c:29ff:fe6b:87dd/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1
         RX packets:20878 errors:0 dropped:0 overruns:0 frame:0
         TX packets:11524 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:1798478 (1.7 MiB)  TXbytes:1346141 (1.2 MiB)
eth1:1   Link encap:Ethernet  HWaddr00:0C:29:6B:87:DD 
         inet addr:172.16.21.15 Bcast:172.16.21.255 Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1

(2)    /var/named/webtest.com.zone區域解析文件中添加一條主機A記錄:

wKioL1YL2fbjry__AACaLTb7j0U642.jpg

保存退出,並重新加載DNS的配置文件和區域解析文件;

(3)    編輯httpd.conf,找到虛擬主機配置段做如下配置:

<VirtualHost172.16.21.9:80>
        ServerName www.a.com
        DocumentRoot "/website/host1"
</VirtualHost>
 
<VirtualHost172.16.21.15:80>
        ServerName www.b.org
        DocumentRoot "/website/host2"
</VirtualHost>

(4)    修改/website/host1/index.html/website/host2/index.html,內容如下:

[root@centos named]# cat/website/host1/index.html
<h1>www.a.com</h1>
[root@centos named]# cat/website/host2/index.html
<h3>www.b.org</h3>

(5)    重啓httpd服務並在windows客戶端的瀏覽器中進行訪問測試:

wKiom1YL2lnBvia8AAB0FB8xaXQ095.jpg

wKioL1YL2oSSWxlzAANkHJvLSPY916.jpg

可以看到,因爲DNS輪巡的結果,我們事先了基於IP的虛擬主機;

說明:

         基於IP的虛擬主機配置在生產環境中用的也不多,因爲公網IP日益短缺並且每分配一個公網IP接意味着多支付一筆昂貴的費用哈。

         基於IP的虛擬主機是通過DNS的輪巡機制來實現的。

D.       配置基於主機名(FQDN)的虛擬主機:

正是因爲上面2中虛擬主機不常用,因此有了第三種虛擬主機;基於主機名的虛擬主機;

1、原理:

思考一個問題:我們在瀏覽器中輸入域名訪問網站,最終結果是域名被DNS解析成了IP地址,主機和主機之間只能通過IP來通信。如此不同的主機名對應同一個IP如何實現?

【答】:基於主機名(多個主機名對應一個IP)的虛擬主機,是通過HTTP協議中請求報文首部的Host屬性來實現的哈,因此也被稱作基於主機頭的虛擬主機。如圖所示:

wKiom1YL2sPjLpUSAAI9t-6a-wA621.jpg

2、  配置步驟:

(1)      編輯httpd.conf,找到虛擬主機配置段做如下配置:

wKioL1YL2wOBKwEsAAEPnD-JkLc377.jpg

說明:NameVirtualHost指令只用在Apache2.2及其以前的版本中,Apache2.4以後的版本就不需要該指令了。

(2)      創建網站目錄並提供默認主頁面文件:

wKiom1YL2zyA35ZuAAEQbA6JXMM233.jpg

(3)      DNS的區域解析庫文件/var/named/webtest.com.zone中修改主機記錄文件,如下圖所示:

wKioL1YL23WA4h_nAAEHUzPjo8A481.jpg

(4)      重啓DNS服務和httpd服務:

wKioL1YL257xN-WOAADsxQu2QLk355.jpg

(5)      windows客戶端的瀏覽器中測試結果:

查看訪問httpd.webtest.com的結果(用開發者工具(F12)查看消息頭信息):

wKioL1YL28qyWRm1AANPsYhaVNc772.jpg

wKiom1YL2-aQm7mZAANrItBzqq0725.jpg

說明:

1、基於主機名(FQDN)的虛擬主機是用的最多的一種虛擬主機。

2、對於Apache2.2及其以前的版本,基於主機名的虛擬主機的定義需要通過NameVirtualHost指令來定義,Apache2.4以後的版本則不需要。

3、基於主機名的虛擬主機是通過HTTP協議請求報文首部的Host屬性來實現的,故而也稱爲基於主機頭的虛擬主機

E.       配置混合類型的虛擬主機:

以上三種虛擬主機可以混合使用,具體過程如下:

(1)    定義監聽端口:

wKiom1YL3C2jSNb_AAAjhOrmclM023.jpg

(2)    定義虛擬主機:

wKioL1YL3GGiC-GkAAJIwvTsrXI671.jpg

(3)    創建不同虛擬主機的完整根目錄及默認頁面:

wKiom1YL3Iyhuu6PAAB5sNuB9JE162.jpg

(4)    修改DNS的區域解析文件/var/named/webtest.com.zone:

wKiom1YL3LnwRWByAAB4Kl9xiIk404.jpg

(5)    重啓DNS服務和httpd服務:

wKioL1YL3POymyd6AACfPFMaFMM738.jpg

(6)    windows客戶端的瀏覽器中測試結果:

基於主機名的虛擬機:

wKiom1YL3RGD6j_RAAI2J7oWMek792.jpg

wKioL1YL3T-iQ5fpAAHoOcLBtyk543.jpg

基於IP的虛擬主機:

wKioL1YL3WqTIWzeAAHdPVUiPLI527.jpg

基於端口號的虛擬主機:

wKiom1YL3ZvjgpfYAAHF2UXkvJA551.jpg

F.爲基於端口號的虛擬主機配置基於組的訪問控制:

每個虛擬準基的配置互不影響,可以單獨爲指定的虛擬主機配置諸如日誌、用戶訪問控制等屬性。下面就以基於端口號的虛擬主機爲例,爲其配置基於組的訪問控制:

(1)    修改httpd.conf配置文件:

wKioL1YL3eCw847YAAED2pQU3TM759.jpg

(2)     創建用戶認證文件:

[root@localhost /]# htpasswd -cm/etc/httpd/conf/.htpass Tom
New password:
Re-type new password:
Adding password for user Tom
 [root@localhost /]# htpasswd -m/etc/httpd/conf/.htpass Johnson
New password:
Re-type new password:
Adding password for user Johnson

(3) 創建組文件/website/vhost_PORT/.htgroup:

[root@localhost /]# vim/website/vhost_PORT/.htgroup
[root@localhost /]# cat/website/vhost_PORT/.htgroup
Employees:Tom Johnson

(4)    重讀httpd配置文件:service httpd reload

(5)    windows客戶端主機上通過瀏覽器測試結果:

WinXP

wKioL1YL3lvwEDOhAAEST8Fyhsg103.jpg

提供用戶名和密碼後就可以訪問了:

wKioL1YL3pWwsmCKAABYDwI4bN8626.jpg

wKiom1YL3qyQ3EykAAD2K9ZwXcU575.jpg

wKioL1YL3t7gDiJXAACBAsOK1h8519.jpg

二、httpdstatus(服務器狀態信息)

開啓原則:status在需要時纔開啓,就算需要開啓,也儘量以最少的信息輸出爲原則(因爲開啓status會影響服務器性能;)

開啓方法:通過status_module模塊允許Apache服務器生成狀態報告;

1、  查看當前Apache服務器是否啓用了mod_status模塊;

wKiom1YL3xni2M6dAABWWZU9FlY559.jpg

2、  status是通過容器類指令<Location /server-status></Location>來定義的,具體如下所示:

<Location /server-status>  #Locaton容器類指令表示:我們要通過哪個URL路徑訪問下面定義的status(URL可以自定義)
    SetHandler server-status    #server-status是處理器名稱,SetHandler指令用於設置處理器
    AuthName "Status"    #定義用戶訪問控制(服務器狀態信息不能讓所有人查看)
    AuthType Basic
    AuthUserFile /etc/httpd/conf/.statuspass
    Require valid-user
</Location>

通過ExtendedStatus指令可以查看更爲詳細的status信息:

ExtendedStatus On|Off    
#開啓或關閉擴展的status信息(默認是關閉的)

3、  舉例說明:

(1)    編輯httpd.conf文件,啓用status_module模塊(默認就是啓用的,但最好確認一下)

wKioL1YL35yzJT6JAABqcMEzdM0938.jpg

(2)    找到<Loacation /server-status>,取消註釋:

wKiom1YL37mDdiiSAACQny047bg408.jpg

(3)    保存退出後重讀配置文件:service httpd reload

(4)    windows客戶端的瀏覽器中訪問/server-status:

wKiom1YL3-bhjrN6AAKiIStOtJc866.jpg

(5)    開啓ExtendedStatus以查看更爲詳細的status信息:

wKioL1YL4CSxFy-bAAATfcwNF3s259.jpg

(6) 保存退出並重讀httpd配置文件,然後在windows客戶端瀏覽器再次訪問server-status頁面:

wKioL1YL4Fvw60AWAAMe1YcPqIw725.jpg

說明:

1、服務器的status會影響服務器的性能,如果沒有必要建議關閉。就算需要開啓,也儘量讓其輸出最基本的信息;

2、服務器的status信息一般不允許所有用戶查看,因此建議設置用戶訪問控制;

三、Curl命令的使用:

curl是基於URL語法在命令行模式下工作的文件傳輸工具,它支持FTPFTPSHTTPHTTPSGOPHERTELNETDICTFILELDAP等協議。curl支持HTTPS認證,並且支持HTTPPOSTPUT等方法,FTP上傳,kerberos認證,HTTP上傳,代理服務器,cookies,用戶名/密碼認證,下載文件斷點續傳,上載文件斷點續傳,http代理服務器管道(proxy tunneling),甚至還支持IPv6socks5代理服務器,通過http代理服務器上傳文件到FTP服務器等等,功能十分強大(類似於迅雷,但curl還是一個基於命令行的瀏覽器)。

curl的常用選項:
    -A/--user-agent <string> 設置用戶代理髮送給服務器
    -basic 使用HTTP基本驗證
    --tcp-nodelay 使用TCP_NODELAY選項
    -e/--referer <URL> 來源網址
    --cacert <file> CA證書 (SSL)
    --compressed 要求返回是壓縮的形勢
    -H/--header <line>自定義頭信息傳遞給服務器
    -I/--head 只顯示響應報文首部信息
    --limit-rate <rate> 設置傳輸速度
    -u/--user <user[:password]>設置服務器的用戶和密碼
    -0/--http1.0 使用HTTP 1.0

Example

1、只顯示響應報文首部信息:

wKiom1YL4LHQiSTbAAEUYkHneJ0858.jpg

2、模擬Referer(從某個頁面跳轉過來)

wKiom1YL4NzySD4kAAGgxMc7Riw572.jpg

四、httpd支持壓縮功能:

使用deflate_module模塊可以壓縮頁面以優化網絡傳輸速度:

<IfModule mod_deflate.c> 
    # Restrict compression to these MIME types
    # 指定對某些MIME的格式文件進行壓縮
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
    # Level of compression (Highest 9 - Lowest 1)
    # 配置壓縮等級(1-9),9爲最高等級,壓縮比例最大,但消耗CPU資源也越多
    DeflateCompressionLevel 9
    # 對某些不支持壓縮的瀏覽器進行部分壓縮或不壓縮
    # Netscape 4.x has some problems.
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 
</IfModule>

小結:

         httpd配置的注意點】;

1、  指令的分類:指令與容器類指令:

首字母大寫,形如ServerRoot “ ”被稱爲指令;

用一對尖括號括起來,形如:<Directory “FS_PATH”></Directory>被稱爲容器類指令

2、  指令的繼承性:

httpd的指令是由繼承性的,例如我們先定義了一個<Directory>容器類指令,如下所示:

<Directory   "/website/htdocs">
        Options  Indexes  FollowSymLinks
#隨後,我們又定義了一個<Directory>容器類指令:
<Directory   "/website/htdocs/dowloads">
        Options   Indexes    #這裏沒有顯式定義FollowSymLinks,會繼承上面的定義!
# [+-] 指令:  +FollowSymLinks明確添加該屬性   -FollowSymLinks明確說不使用該屬性


==========================================================

今天就學習到這裏吧,上面所寫只是我學習過程當中的一些,一些,筆記吧,難免出現錯誤,或者表述不正確的地方,請見諒!

============================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章