Linux下的Apache,軟體包是httpd。Httpd的主配檔案是/etc/httpd/conf/httpd.conf,其配置指令主要分三部分:控制整個Apache伺服器行為的部分(即全局環境變量);定義主要或預設服務參數的指令;虛拟主機的設定參數。Httpd的相關資料多如牛毛,這裡就不細說了,本文實驗是結合dns和apache實作虛拟主機網站的釋出。
實驗平台為Centos 6.2,環境為:
DNS伺服器暨Apache伺服器
主機名:itpro IP位址:192.168.56.53
用戶端測試機
主機名:station IP位址:192.168.56.123
準備工作:
先安裝DNS和Apache相應的軟體,直接使用yum 安裝即可,并設定開機啟動
[root@itpro ~]# yum install httpd bind bind-chroot
[root@itpro ~]# chkconfig httpd on
[root@itpro ~]# chkconfig named on
[root@itpro ~]# service httpd start
[root@itpro ~]# service named start
一、先配置DNS伺服器
1.配置主配檔案/etc/named.conf
在options {}中,找出并修改以下三句内容:
1
2
3
<code>listen-on port 53 { any; };</code><code>#括号内容改為any</code>
<code>listen-on-v6 port 53 { any; };</code><code>#改為any</code>
<code>allow-query { any; };</code><code>#改為any</code>
2.配置區域配置檔案,在末尾自定義區域(這裡隻定義正向解析,反向解析不定義)
修改後内容如下:
[root@itpro ~]# cat /etc/named.rfc1912.zones
4
5
6
7
8
9
10
11
<code>……省略部分内容……</code>
<code>zone </code><code>"sq.com"</code> <code>IN {</code>
<code> </code><code>type</code> <code>master;</code>
<code> </code><code>file</code> <code>"sq.com.zone"</code><code>;</code>
<code> </code><code>allow-update { none; };</code>
<code>};</code>
<code>zone </code><code>"op.com"</code> <code>IN {</code>
<code> </code><code>file</code> <code>"op.com.zone"</code><code>;</code>
3.在/var/named下建立資料檔案op.com.zone和sq.com.zone
[root@itpro ~]# cd /var/named/
[root@itpro ~]# cp -p named.localhost op.com.zone
[root@itpro ~]# cp -p named.localhost sq.com.zone
兩檔案的最終内容如下(其實是一樣的):
[root@itpro named]# cat op.com.zone
<code>$TTL 1D</code>
<code>@ IN SOA ns.sq.com. root (</code>
<code> </code><code>0 ; serial</code>
<code> </code><code>1D ; refresh</code>
<code> </code><code>1H ; retry</code>
<code> </code><code>1W ; expire</code>
<code> </code><code>3H ) ; minimum</code>
<code> </code><code>NS ns</code>
<code>ns A 192.168.56.53</code>
<code>www A 192.168.56.53</code>
[root@itpro named]# cat sq.com.zone
[root@itpro named]# cd
[root@itpro ~]#
4.重新開機named服務
[root@zoro ~]# service named restart
Stopping named: . [ OK ]
Starting named: [ OK ]
二、Apache伺服器配置
1.首先建立測試需要用到的主面檔案,如下:
[root@luffy ~]# cd /var/www/html/
[root@itpro html]# ls
index.html op sq
[root@itpro html]# cat index.html
this is home page
server: 192.168.56.53
[root@itpro html]# cat op/index.html
this is op page
[root@itpro html]# cat sq/index.html
this is sq page
2.修改主配檔案/etc/httpd/conf/httpd.conf
首先啟用NameVirtualHost字段,該字段為一個基于域名的虛拟主機指定一個IP位址,*表示本機目前使用的IP位址。
<code>NameVirtualHost *:80 </code><code>#這一行預設是注釋掉了的,要将其前面的#去掉</code>
然後在檔案末尾增加以下内容:
12
13
14
15
<code><VirtualHost *:80></code>
<code># ServerAdmin [email protected]</code>
<code> </code><code>DocumentRoot </code><code>/var/www/html</code> <code>#文檔的根目錄。預設情況下,所有的請求從這個目錄進行應答</code>
<code> </code><code>ServerName 192.168.56.53 </code><code>#機子的名稱,用IP位址或域名表示</code>
<code># ErrorLog logs/dummy-host.example.com-error_log #可以指定錯誤日志存放目錄,若不指定,預設是在/etc/httpd/logs/access_log裡</code>
<code># CustomLog logs/dummy-host.example.com-access_log common</code>
<code><</code><code>/VirtualHost</code><code>></code>
<code> </code><code>DocumentRoot </code><code>/var/www/html/op</code>
<code> </code><code>ServerName www.</code><code>op</code><code>.com</code>
<code> </code><code>DocumentRoot </code><code>/var/www/html/sq</code>
<code> </code><code>ServerName www.sq.com</code>
3.重新開機httpd服務
[root@itpro ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: apr_sockaddr_info_get() failed for zoro
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
三、客戶機測試
首先要将客戶機的DNS指向DNS伺服器192.168.56.53。
1.測試域名解析是否正常
[root@station ~]# nslookup www.op.com
Server: 192.168.56.53
Address: 192.168.56.53#53
Name: www.op.com
Address: 192.168.56.53
[root@station ~]# cat /etc/resolv.conf
nameserver 192.168.56.53
[root@station ~]# nslookup www.sq.com
Name: www.sq.com
以上結果無異常,表示DNS伺服器正常運作。
2.測試頁面通路
使用firefox通路http://192.168.56.53時,傳回的結果為:
this is home page server: 192.168.56.53
使用firefox通路http://www.op.com時,傳回的結果為:
this is op page server: 192.168.56.53
使用firefox通路http://www.sq.com時,傳回的結果為:
this is sq page server: 192.168.56.53
四、進一步調試
1. 在伺服器上将httpd的主配檔案/etc/httpd/conf/httpd.conf中的NameVirtualHost注釋掉(先前啟用了,現在重新注釋掉),然後重新開機httpd,再檢視測試結果。
到客戶機上通路站點,會發現,無論是http://192.168.56.53、http://www.op.com、還是http://www.sq.com,傳回的結果都是“this is home page server: 192.168.56.53 ”,即http://192.168.56.53的主面内容。
2.在上述操作1的基礎上,再将“ServerName 192.168.56.53”的虛拟主機内容删除,即虛拟主機配置内容改為:
<code>#NameVirtualHost *:80</code>
修改完成後,重新開機httpd。
再在用戶端使用浏覽器通路,無論是http://192.168.56.53、http://www.op.com、還是http://www.sq.com,傳回的結果都是“this is op page server: 192.168.56.53 ”,即http://www.op.com的主面内容。
3.在上述操作2的基礎上,再将NameVirtualHost啟用,即将httpd的主配檔案/etc/httpd/conf/httpd.conf中的NameVirtualHost前的注釋符#去掉,修改完成後,重新開機httpd。
再在用戶端使用浏覽器通路,通路http://192.168.56.53和http://www.op.com,傳回的結果都是“this is op page server: 192.168.56.53 ”,通路http://www.sq.com傳回的結果是“this is sq page server: 192.168.56.53 ”
綜合以上三次操作,可以得出結論:
如果hpptd主配檔案中,#NameVirtualHost *:80 被注釋掉了(預設是被注釋掉了的),則表示httpd的虛拟功能沒有打開,此時無論在主配檔案中寫多少個虛拟主機(相應地,要在指定的DocumentRoot目錄上建立站點頁面,首頁必須是index.html),最終隻是第一個(寫在最上面的)生效,即客戶機通路所在的ServerName,最終都指向第一個ServerName對應的頁面。
結論二,在啟用了虛拟功能之後,主站(本文是http://192.168.56.53,對應/var/www/html/index.html),也要寫入到虛拟主機裡面,否則不會被通路。如操作3中,通路http://192.168.56.53時,實際上通路的不是主站,而是第一個虛拟主機http://www.op.com的頁面。
五、通路控制
以上述配置檔案的最後一個虛拟主機www.sq.com為例。
在虛拟主機裡使用<Directory>容器來設定通路控制。
1. 将虛拟主機配置修改為以下内容:
<code> </code><code><Directory </code><code>"var/www/html/sq"</code><code>></code>
<code> </code><code>order allow,deny </code><code>#先允許,後拒絕</code>
<code> </code><code>allow from 192.168.56. </code><code>#允許的内容,這裡允許192.168.56.0網段來訪</code>
<code> </code><code>deny from 192.168.56.123 </code><code>#拒絕的内容,這裡拒絕主機192.168.56.123來訪</code>
<code> </code><code><</code><code>/Directory</code><code>></code>
重新開機httpd。
此時,IP位址為192.168.56.123的主機無法通路www.sq.com首頁,出現的是Apache測試頁面,在/etc/httpd/logs/access_log日志中,可以看到403報錯,如下:
192.168.56.123 - - [14/May/2013:07:13:55 +0800] "GET / HTTP/1.1" 403 5039 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.24) Gecko/20111104 Red Hat/3.6.24-3.el6_1 Firefox/3.6.24"
除192.168.56.123外,192.168.56.0網段内的其他主機,都可以正常通路www.sq.com首頁。
2. 将虛拟主機配置修改為以下内容(與操作1相比,通路控制順序颠倒一下):
<code> </code><code>order deny,allow </code><code>#先拒絕,後允許</code>
<code> </code><code>allow from 192.168.56.</code>
<code> </code><code>deny from 192.168.56.123</code>
此時,192.168.56.0網段内的所有主機,包括192.168.56.123,都可以正常通路www.sq.com首頁。
3. 将虛拟主機配置修改為以下内容(與操作2相比,允許和拒絕的内容互換了一下):
<code> </code><code>allow from 192.168.56.123</code>
<code> </code><code>deny from 192.168.56.</code>
此時,IP位址為192.168.56.123的主機可以通路www.sq.com首頁,除192.168.56.123外,192.168.56.0網段内的其他主機,不可以通路www.sq.com首頁。
4. 将虛拟主機配置修改為以下内容(與操作3相比,通路控制順序颠倒了;與2相比,通路控制順序颠倒了,允許和拒絕的内容也互換了;與1相比,允許和拒絕的内容互換了):
此時,192.168.56.0網段内的所有主機,包括192.168.56.123,都不可以通路www.sq.com首頁。
綜合以上四次操作,說明了什麼問題呢?頭暈了,說不清楚。兩兩組合的問題,在實際工作中,大概不會這樣寫的吧,就本次實驗同一網段内的需求而言,隻使用deny語句、不使用allow語句,會更友善地實作通路控制。
本文轉自Sunshyfangtian 51CTO部落格,原文連結:http://blog.51cto.com/sunshyfangtian/1200225,如需轉載請自行聯系原作者