1. 程式人生 > 其它 >Apache虛擬web主機構建

Apache虛擬web主機構建

目錄

一、構建虛擬web主機

1.1、虛擬web主機概述

虛擬Web主機指的是在同一臺伺服器中執行多個Web站點,其中每一個站點實際上並不獨立佔用整個伺服器,因此被稱為“虛擬”Web 主機。通過虛擬 Web 主機服務可以充分利用伺服器的硬體資源,從而大大降低網站構建及執行成本。

使用httpd服務可以非常方便地構建虛擬主機伺服器,只需要執行一個httpd服務就能夠同時支撐大量的Web站點。httpd服務支援的虛擬主機型別包括以下三種

基於域名:為每個虛擬主機使用不同的域名,但是其對應的IP 地址是相同的。例如,www.123.com 和 www.abc.com共同使用同一個IP地址,這是使用最為普遍的虛擬web主機型別

基於IP地址:為每個虛擬主機使用不同的域名,且各自對應的IP地址也不相同。這種方式需要為伺服器配備多個網路介面,因此應用並不是非常廣

基於埠:這種方式並不使用域名、IP地址來區分不同的站點內容,而是使用了不同的TCP埠號,因此使用者在瀏覽不同的虛擬站點時需要同時指定埠號才能訪問

二、搭建虛擬web主機步驟

2.1、基於域名搭建虛擬主機

①為虛擬主機提供域名解析

方法一:部署DNS域名解析伺服器,來提供域名解析

方法二:在/etc/hosts檔案中臨時配置域名與IP地址的對映

echo "192.168.80.11 www.aaa.com" >> /etc/hosts
echo "192.168.80.11 www.bbb.com" >> /etc/hosts

②為虛擬主機準備網頁文件

mkdir -p /var/www/html/123
mkdir -p /var/www/html/abc
echo "<h1>123</h1>" > /var/www/html/123/index.html
echo "<h1>abc</h1>" > /var/www/html/abc/index.html

③新增虛擬主機配置

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf     #原始碼編譯安裝的虛擬主機配置檔案路徑
或者vim /etc/httpd/conf.d/vhosts.conf                  #RPM或者YUM安裝的虛擬主機配置檔案路徑

<VirtualHost 192.168.80.14:80>                        #設定虛擬主機區域
#ServerAdmin [email protected]     #設定管理員郵箱,這個可以忽略
DocumentRoot ”/var/www/html/abc“                  #設定網站根目錄
ServerName www.abc.com
#ServerAlinas www.dummy-host.example.com
ErrorLog "logs/abc.com-error_log"                 #設定錯誤日誌檔案的路徑
CustomLog "logs/abc.com-access_log" common        #設定訪問日誌檔案的路徑
</VirtualHost>

<VirtualHost 192.168.80.14:80>
DocumentRoot ”/var/www/html/123“
ServerName www.123.com
ErrorLog "logs/123.com-error_log"
CustomLog "logs/123.com-access_log" common
</VirtualHost>

④設定訪問路徑

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf

<Directory "/var/www/html">           #設定目錄訪問許可權
    Options None                  #不啟用任何的伺服器特性
AllowOverride None            #不允許重寫Apache預設配置
Require all granted           #允許所有主機訪問
</Directory>

Options指令解釋

Options指令的主要作用是控制特定目錄將啟用哪些伺服器特性,可以在Apache服務配置檔案的虛擬主機配置(VirtualHost)、特定目錄配置(Directoty)以及.htaccess檔案中使用

Options指令常用選項 說明
None 表示不啟動任何的伺服器特性
FollowSymLinks 伺服器允許在此目錄中使用符號連線(軟連結)
Indexes 如果輸入的網址對應伺服器上的一個檔案目錄,而此目錄中又沒有Apache配置檔案中的DirectoryIndex指令指定的檔案(例如:DirectoryIndex index.html index.php),則列出該目錄下的所有檔案
MultiViews 如果客戶端請求的路徑可能對應多種型別的檔案,那麼伺服器將根據客戶端請求的具體情況自動選擇一個最匹配客戶端要求的檔案。例如,在伺服器站點的file資料夾下中存在名為hello.jpg和hello.html的兩個檔案,此時使用者輸入http://localhost/file/hello,如果在file資料夾下並沒有hello子目錄,那麼伺服器將會嘗試在file目錄夾下查詢形如hello.*的檔案,然後根據使用者請求的具體情況返回最匹配要求的hello.jpg或者hello.html
All 表示除MultiViews之外的所有特性,這也是Options指令的預設設定

AllowOverride指令解析

  1. htaccess(分散式隱含配置檔案):提供了針對每個目錄改變配置的方法,即在一個特定的目錄中放置一個包含特定指令的檔案,其中的指令作用於此目錄及其所有子目錄
  2. 當AllowOverride設定成None時,相應的配置目錄下的.htaccess檔案是不被讀取的,即無法生效
  3. 當AllowOverride設定成All,每一次請求訪問相應目錄下的檔案時,都會讀取.htaccess檔案的配置,意味著原Apache指令會被.htaccess檔案中的指令重寫
  4. 從效能和安全性考慮,一般都儘可能避免使用.htaccess檔案,任何希望放在. htaccess檔案中的配置,都可放在主配置檔案(httpd. conf)的段中而且高效。因此AllowOverride屬性一般都配置成None

地址限制策略

型別 說明
Require all granted 允許所有主機訪問
Require all denied 拒絕所有主機訪問
Require local 僅允許本地主機訪問
Require [not] host < 主機名或域名列表> 允許或拒絕指定主機或域名訪問
Require [not] ip <IP地址或網段列表> 允許或拒絕指定IP地址網路訪問

⑤載入獨立的配置檔案

vim /usr/local/httpd/conf/httpd.conf            #原始碼編譯安裝的httpd服務主配置檔案路徑
-----480行------取消註釋
Include conf/extra/httpd-vhosts.conf            #載入獨立的配置檔案
或者vim /etc/httpd/conf/httpd.conf		#RPM或YUM安裝的httpd服務主配置檔案路徑
IncludeOptional conf.d/*.conf   		#最後一行已預設開啟此項
systemctl restart httpd

⑥客戶機訪問驗證

2.2、基於IP地址的虛擬主機

①配置第二張網絡卡

ifconfig ens33:0 192.168.80.200/24 #配置臨時虛擬網絡卡

②修改虛擬web主機配置

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 
<VirtualHost 192.168.80.12:80>
#ServerAdmin [email protected]
DocumentRoot "/var/www/html/abc"
ServerName www.abc.com
#ServerAlias www.dummy-host.example.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.80.200:80>
#ServerAdmin [email protected]
DocumentRoot "/var/www/html/123"
ServerName www.123.com
ErrorLog "logs/123.com-error_log"
CustomLog "logs/123.com-access_log" common
</VirtualHost>

<Directory "/var/www/html">
Options None
AllowOverride None
Require all granted
</Directory>

③新增監聽地址

vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.80.200:80
systemctl restart httpd

④客戶機驗證

2.3、基於埠的虛擬主機

①修改監聽埠

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 
<VirtualHost 192.168.80.12:88>
#ServerAdmin [email protected]
DocumentRoot "/var/www/html/abc"
ServerName www.abc.com
#ServerAlias www.dummy-host.example.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.80.200:87>
#ServerAdmin [email protected]
DocumentRoot "/var/www/html/123"
ServerName www.123.com
ErrorLog "logs/123.com-error_log"
CustomLog "logs/123.com-access_log" common
</VirtualHost>

<Directory "/var/www/html">
Options None
AllowOverride None
Require all granted
</Directory>

②修改監聽地址

 vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.80.12:88
Listen 192.168.80.200:87
systemctl restart httpd

③客戶及驗證

2.4、構建web虛擬目錄與使用者授權限制

①建立使用者認證資料檔案

cd /usr/local/httpd/bin
./htpasswd -c /usr/local/httpd/user test1   #-c選項表示新建使用者資料檔案,預設時則表示指定的使用者資料檔案已經存在,用於新增新的使用者或修改現有使用者的密碼。   
cat /usr/local/httpd/user                      #確認使用者資料檔案

②新增使用者授權配置

vim /usr/local/httpd/conf/httpd.conf 

-----末行新增------
Alias /test /var/www/html/test              #設定虛擬目錄的根目錄,/test為虛擬目錄名稱
<Directory "/var/www/html/test">            #設定虛擬目錄配置區域
AuthName "Hello!"                           #定義受保護的領域名稱,會在認證對話方塊中顯示
AuthType Basic                              #設定認證的型別,Basic表示基本認證
AuthUserFile /usr/local/httpd/user          #設定用於儲存使用者賬號和密碼的認證檔案的路徑
Require valid-user                          #開啟使用者認證,只有認證檔案中的合法使用者才能訪問
#authgroupfile /usr/local/httpd/conf/group  #設定用於儲存組賬號和密碼的認證檔案的路徑
#Require user zhangsan                      #僅允許指定使用者訪問
#Require group zhangsan                     #僅允許指定組訪問
</Directory>

③驗證使用者訪問許可權

mkdir -p /var/www/html/test
echo "<h1>hello world!</h1>" > /var/www/html/test/index.html
systemctl restart httpd

④客戶機驗證

2.5、日誌分割

①修改配置檔案

使用Apache自帶rotatelogs分割工具,將Apache的日誌進行按每天的日期自動分割
vim /usr/local/httpd/conf/httpd.conf

-----274行附近-----修改
ErrorLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/error_%Y%m%d.log 86400"                  #分割錯誤日誌

-----304行附近-----修改
CustomLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/access_%Y%m%d.log 86400" combined        #分割訪問日誌

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf                                                 #虛擬主機也可以進行分割
ErrorLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/aaa.com-error_%F.log 86400"
CustomLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/aaa.com-access_%F.log 86400" combined

注:
開頭的|為管道符號。
-l選項表示使用本地時間為時間基準。
86400表示1天,即每天生成一個新的日誌檔案。

mkdir /var/log/httpd                   #建立分割後的日誌檔案儲存目錄

systemctl restart httpd

②驗證

三、AWStats分析系統

AWStats是使用Perl語言開發的一款開源日誌分析系統,它用來完成自動化的日誌統計與分析工作

3.、應用步驟

①解壓安裝

cd /opt
tar zxvf awstats-7.6.tar.gz
mv /opt/awstats-7.6 /usr/local/awstats

②為要統計的站點建立配置檔案

cd /usr/local/awstats/tools
./awstats_configure.pl

Config file path ('none' to skip web server setup):
> /usr/local/httpd/conf/httpd.conf   #輸入httpd服務主配置檔案的路徑
Your web site,virtual server or profile name:
> www.123.com                        #輸入要統計的站點域名
其它都是回車確認

③修改自動生成的awstats訪問許可權,載入CGI模組(Apache2.4以上版本需要載入CGI模組)

vim /usr/local/httpd/conf/httpd.conf
ErrorLog "logs/error_log"              
CustomLog "logs/access_log" combined
141、145行附近取消註釋
末行註釋Order、Allow
新增Require all granted

④修改站點統計配置檔案

vim /etc/awstats/awstats.www.123.com.conf
LogFile="/usr/local/httpd/logs/access_log"    #修改訪問日誌檔案位置(由於日誌格式問題,不能設定虛擬主機的日誌)
DirData="/var/lib/awstats"                    #awstats目錄預設不存在,需要手動建立
mkdir /var/lib/awstats

⑤執行日誌分析

systemctl restart httpd
cd /usr/local/awstats/tools/
./awstats_updateall.pl now          #更新資料(根據站點配置檔案指定的日誌檔案路徑)

⑥設定cron計劃任務

crontab -e                          #編寫計劃性任務,每2分鐘更新一次日誌檔案資料
*/2 * * * * /usr/local/awstats/tools/awstats_updateall.pl now
systemctl start crond

⑦訪問AwStats分析系統站點

echo "192.168.80.11 www.123.com" >> /etc/hosts
瀏覽器訪問
http://www.123.com/awstats/awstats.pl?config=www.123.com