WEB應用之httpd基礎入門(三)

  前文咱們聊到了httpd的路徑別名、訪問日誌定義、basic認證配置,回顧請參考http://www.javashuo.com/article/p-eqqppcqs-hz.html;今天咱們來聊一聊httpd的虛擬主機和狀態頁的配置,前邊咱們也提到了虛擬主機,所謂虛擬主機不外乎就是一個物理主機上存在多個虛擬站點;一般httpd的虛擬主機有三類,分別是基於ip的虛擬主機、基於端口的虛擬主機以及基於FQDN的虛擬主機;不難理解基於ip的虛擬主機就是以不一樣IP來區分不一樣的虛擬主機;基於端口的虛擬主機就是以不一樣端口區分不一樣的虛擬主機,基於fqdn的虛擬主機就是以不一樣用戶請求報文中的host首部來區分的虛擬主機;接下來咱們來看看httpd裏怎麼配置虛擬主機;html

  一、虛擬主機node

  httpd裏虛擬主機的配置方法是由<virtualhost IP:PORT>  ……</virtualhost>配置塊來配置;其中httpd2.2在啓用虛擬主機配置前須要將其中心主機禁用,禁用方法很簡單,就是把中心主機裏的documentroot指令註釋便可;在httpd2.4中,咱們就不須要去關閉中心主機,在配置了虛擬主機之後,中心主機天然失效,不須要人爲手動註釋;對於在中心主機裏可配置的指令大多數均可以用於虛擬主機配置塊中;用法和中心主機裏配置幾乎沒有啥差異;windows

  示例:基於IP的虛擬主機實現centos

   提示:以上配置主要就是提供兩個基於IP的虛擬主機,一個是192.168.0.98:80,一個是192.168.0.99:80的主機;咱們在對應目錄下建立好主頁文件,重載配置文件,這兩個虛擬主機就能夠生效了;瀏覽器

[root@test_node1-centos7 conf.d]# echo "this is a_com page ip is 192.168.0.98" > /vhost/www/html/a_com/index.html
[root@test_node1-centos7 conf.d]# echo "this is b_com page ip is 192.168.0.99" > /vhost/www/html/b_com/index.html
[root@test_node1-centos7 conf.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4a:bd:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.99/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe4a:bd74/64 scope link 
       valid_lft forever preferred_lft forever
[root@test_node1-centos7 conf.d]# ip addr add 192.168.0.98/24 dev ens33
[root@test_node1-centos7 conf.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4a:bd:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.99/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.0.98/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe4a:bd74/64 scope link 
       valid_lft forever preferred_lft forever
[root@test_node1-centos7 conf.d]# httpd -t
Syntax OK
[root@test_node1-centos7 conf.d]# systemctl reload httpd
[root@test_node1-centos7 conf.d]# 

  提示:以上配置主要是給兩個虛擬站點提供對應的主頁文件,而後在原有的網卡上面加了一個新的ip192.168.0.98,這樣配置後,咱們配置的虛擬主機就能夠在瀏覽器上經過不一樣的ip地址訪問,獲得不一樣的主頁響應;bash

 

   提示:能夠看到咱們以不一樣IP訪問站點,獲得的是不一樣虛擬主機給咱們提供的主頁文件,說明咱們配置的基於IP地址的虛擬主機沒有什麼問題;同時咱們也能夠看這兩個虛擬主機各自的訪問日誌文件;oop

   提示:不一樣的站點,各自以不一樣的訪問日誌和錯誤日誌分別記錄着各自站點訪問日誌和錯誤日誌信息;ui

  示例:基於端口的虛擬主機實現this

   提示:以上配置在基於IP的虛擬主機配置上修改了下,兩個虛擬主機都是基於192.168.0.99這個ip地址,分別監聽在80和81兩個端口上,咱們訪問192.168.0.99:80就會匹配到a主機,拿到a主機的主頁響應,訪問192.168.0.99:81就會拿到b主機的主頁響應;centos7

   提示:能夠看到同一IP地址,訪問不一樣的端口,就以不一樣的虛擬站點提供服務;

  示例:基於不一樣FQDN的虛擬主機實現

   提示:以上配置兩個虛擬主機都監聽在192.168.0.99:80用戶訪問主要經過不一樣的host請求首部來區分;以下

  在重載配置前,咱們先在windows上坐下host解析,模擬DNS解析,分別把www.a.com 和www.b.com 都解析成192.168.0.99

 

   提示:windows hosts解析文件在C:\Windows\system32\drivers\etc\ 名字爲hosts文件,此文件語法同Linuxhosts文件語法相同,前邊是ip地址 後面是主機名稱或別名;以下

   提示:到此咱們就能夠經過不一樣的解析名稱來訪問不一樣的虛擬站點

   提示:能夠看到咱們以不一樣解析名稱來訪問,獲得不一樣的虛擬主機響應,其實這中間就是用戶鍵入不一樣的host首部來區分不一樣的虛擬站點;以下

 

   提示:用戶的host請求首部是能夠是其餘字串,它這個host首部是不會被解析的,一般狀況下是咱們在瀏覽器上鍵入什麼字串,對應的host首部的值就是什麼,只不過瀏覽器要把咱們鍵入的字串去解析成IP而後把對應的請求發送到去對應ip地址的主機上;爲了更好的理解這一過程請看下面;

   提示:咱們在構造請求報文時,隨便給了一個字串給Host請求首部,也是能夠正常請求到主頁的,這就說明host請求首部實質上只是用來區分不一樣虛擬主機,它不用來解析;之因此在host首部沒有被匹配成功的狀況下,它響應a主機的頁面,這是由於a主機的配置在最上面,默認狀況下host首部沒有被任何虛擬主機匹配就會以最上面的虛擬主機響應;這裏還須要注意一點的是,httpd2.2在使用FQDN虛擬主機時,須要使用到listen指令和namevirtualhost ip:port 指令來指定虛擬主機監聽的ip和端口信息;httpd2.4則能夠不用使用namevirtualhost這個指令來指定;以下

   提示:以上是httpd2.2基於FQDN的虛擬主機配置示例;

   二、status頁面配置說明

  httpd的狀態頁面上由httpd的status_module模塊實現,在配置使用狀態頁面信息,首先須要確認該模塊是否裝載,確認方法以下:

   提示:httpd2.2和2.4的確認方法同樣,若是可以列出status_module,說明該模塊已經裝載,若是沒有被裝載須要使用LoadModule  status_module  modules/mod_status.so 來裝載便可;以上是httpd2.4確認結果,2.2的確認結果以下

 

   確認了模塊裝載了,接下來就是配置使用

  示例:httpd2.4配置status頁面

   提示:狀態頁的配置主要是用location 來指定一個URI,而後在其下面配置sethandler 指令來指定匹配到的URI怎麼處理,以上表示用server-status來處理,這裏須要注意一點httpd的狀態頁面上status_module實現的,咱們在配置使用必須是server-status來處理,不能上其餘名稱;還須要說明的是該location能夠配置在任何虛擬主機以及中心主機均可以,他都表示用server-status來處理,說白了就是顯示狀態頁;

   提示:以上就是咱們剛纔配置的location 對應uri 響應的內容;固然以上信息是比較私密的信息,一般狀況下咱們只容許部分IP地址的主機查看,在httpd2.4上若是不是容許全部主機查看,只是部分主機查看,基於IP地址作訪問控制的話,咱們須要將其訪問控制的權限指令寫到<requireall> ……</requireall>配置段中;

   示例:httpd2.2狀態頁面配置

   提示:httpd2.2和httpd2.4狀態頁的配置沒有本質的不一樣;

   提示:在httpd2.2的狀態頁上,要比httpd2.4信息少不少,從上面的提示看,它告訴咱們若是要顯示全面的狀態信息,咱們須要使用extendedstatus on指令,若是咱們須要更加全面的信息,能夠選擇把該指定配置server配置段中;

相關文章
相關標籤/搜索