天天看點

RHCE教育訓練筆記——Apache

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>&lt;VirtualHost *:80&gt;</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>&lt;</code><code>/VirtualHost</code><code>&gt;</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為例。

在虛拟主機裡使用&lt;Directory&gt;容器來設定通路控制。

1. 将虛拟主機配置修改為以下内容:

<code>        </code><code>&lt;Directory </code><code>"var/www/html/sq"</code><code>&gt;</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>&lt;</code><code>/Directory</code><code>&gt;</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,如需轉載請自行聯系原作者