1. 程式人生 > 其它 >虛擬web主機 Apache 配置與應用

虛擬web主機 Apache 配置與應用

一、構建虛擬 Web主機

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

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

httpd服務支援的虛擬主機型別包括以下三種:

1、基於域名:為每個虛擬主機使用不同的域名,但是其對應的IP地址是相同的。例如,www .benet.com和www.accp.com站點的IP地址都是192.168.80.10.這是使用最為普遍的虛擬Web主機型別

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

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

二、基於域名的虛擬主機

1、為虛擬主機提供域名解析

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

方法二:在/etc/hosts 檔案中臨時配置域名與IP地址的對映關係
echo "192.168.80.10 www.benet.com" >> /etc/hosts
echo "192.168.80.10 www.accp.com" >> /etc/hosts

注意:用echo的話,記得在客戶機也要配置

2、為虛擬主機準備網頁文件

mkdir -p /var/www/html/benet
mkdir -p /var/www/html/accp
echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html
echo "<h1>www.accp.com</h1>" > /var/www/html/accp/index.html

3、新增虛擬主機配置

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

<VirtualHost 192.168.80.10:80>								#設定虛擬戰鬥區域
#    ServerAdmin [email protected]			#設定管理員郵箱,這行可忽略
    DocumentRoot "/var/www/html/benet"						#設定網站根目錄
    ServerName www.benet.com								#設定Web站點的完整域名(主機名+域名)
#    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/benet.com-error_log"						#設定錯誤日誌檔案的路徑
    CustomLog "logs/benet.com-access_log" common			#設定訪問日誌檔案的路徑
</VirtualHost>

<VirtualHost 192.168.80.10:80>
    DocumentRoot "/var/www/html/accp"
    ServerName www.accp.com
    ErrorLog "logs/accp.com-error_log"
    CustomLog "logs/accp.com-access_log" common
</VirtualHost>

設定訪問控制
<Directory "/var/www/html"> 							#設定目錄訪問許可權
	Options None											#不啟用任何的伺服器特性
	AllowOverride None										#不允許重寫Apache預設配置
	Require all granted										#允許所有主機訪問
</Directory>
Options指令解釋:
Options指令的主要作用是控制特定目錄將啟用哪些伺服器特性。可以在Apache服務配置檔案的虛擬主機配置(VirtualHost)、特定目錄配置(Directory)以及.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指令解釋:
.htaccess(分散式隱含配置檔案):提供了針對每個目錄改變配置的方法,即在一個特定的目錄中放置一個包含特定指令的檔案,其中的指令作用於此目錄及其所有子目錄。
當AllowOverride設定成None時,相應的配置目錄下的.htaccess檔案是不被讀取的,即無法生效。
當AllowOverride設定成All時,每一次請求訪問相應目錄下的檔案時,都會讀取.htaccess檔案的配置,意味著原Apache指令會被.htaccess檔案中的指令重寫。
從效能和安全性考慮,一般都儘可能避免使用.htaccess檔案,任何希望放在.htaccess檔案中的配置,都可放在主配置檔案(httpd.conf)的 <Directory>段中,而且高效。因此AllowOverride屬性一般都配置成None 。

地址限制策略:
Require all granted:允許所有主機訪問。
Require all denied:拒絕所有主機訪問。
Require local:僅允許本地主機訪問。
Require [not] host <主機名或域名列表>:允許或拒絕指定主機或域名訪問。
Require [not] ip <IP 地址或網段列表>:允許或拒絕指定 IP 地址網路訪問。

4、載入獨立的配置檔案

vim /usr/local/httpd/conf/httpd.conf		#原始碼編譯安裝的httpd服務主配置檔案路徑
--483行--取消註釋
Include conf/extra/httpd-vhosts.conf		#載入獨立的配置檔案

#vim /etc/httpd/conf/httpd.conf		#RPM或YUM安裝的httpd服務主配置檔案路徑
IncludeOptional conf.d/*.conf		#最後一行已預設開啟此項


systemctl restart httpd 

5、在客戶機中訪問虛擬Web 主機

http://www.nj.com
http://www.accp.com

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

ifconfig ens33:0 192.168.80.100 netmask 255.255.255.0

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost 192.168.80.10:80>
    DocumentRoot "/var/www/html/benet"
    ServerName www.benet.com
    ErrorLog "logs/benet.com-error_log"
    CustomLog "logs/benet.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.80.100:80>
    DocumentRoot "/var/www/html/accp"
    ServerName www.accp.com
    ErrorLog "logs/accp.com-error_log"
    CustomLog "logs/accp.com-access_log" common
</VirtualHost>

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

vim /usr/local/httpd/conf/httpd.conf
--53行--插入
Listen 192.198.80.100:80


systemctl restart httpd

在客戶機中瀏覽器訪問虛擬 Web 主機
http://192.168.80.10
http://192.168.80.100

四、基於埠的虛擬主機

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost 192.168.80.10:80>
    DocumentRoot "/var/www/html/benet"
    ServerName www.benet.com
    ErrorLog "logs/benet.com-error_log"
    CustomLog "logs/benet.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.80.10:8080>
    DocumentRoot "/var/www/html/accp"
    ServerName www.accp.com
    ErrorLog "logs/accp.com-error_log"
    CustomLog "logs/accp.com-access_log" common
</VirtualHost>

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

vim /usr/local/httpd/conf/httpd.conf
--53行--插入
Listen 192.198.80.10:8080


systemctl restart httpd

在客戶機中瀏覽器訪問虛擬 Web 主機
http://192.168.80.10:80
http://192.168.80.10:8080

五、Apache 連線保持

vim /usr/local/httpd/conf/extra/httpd-default.conf
KeepAlive On			#設定是否開啟連線保持功能,後面接OFF表示關閉,接ON表示開啟。可以根據網站的併發請求量決定是否開啟,即在高併發時開啟連線保持功能,併發量不高時關閉此功能。

MaxKeepAliveRequests 100		#用於設定在一次長連線中可以傳輸的最大請求數量,超過此最大請求數量就會斷開連線,最大值的設定決定於網站中網頁的內容,一般設定數量會多於網站中所有的元素。

KeepAliveTimeout 5		#設定來自同一個客戶端一次連線多次請求之間的最大間隔時間,即兩次請求之間超過該時間連線就會自動斷開,從而避免客戶端佔用連線資源。

六、構建Web虛擬目錄與使用者授權限制

1、建立使用者認證資料檔案

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

cat /usr/local/httpd/conf/user 		#確認使用者資料檔案

2、新增使用者授權配置

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/conf/user		#設定用於儲存使用者賬號和密碼的認證檔案的路徑
	Require valid-user							#開啟使用者認證,只有認證檔案中的合法使用者才能訪問
   #authgroupfile /usr/local/httpd/conf/group	#設定用於儲存組賬號和密碼的認證檔案的路徑
   #Require user zhangsan						#僅允許指定使用者訪問
   #Require group zhangsan						#僅允許指定組訪問		
</Directory>

3、驗證使用者訪問授權

mkdir -p /var/www/html/test
echo "<h1>this is vdir test</h1>" > /var/www/html/test/index.html
systemctl restart httpd

在客戶機中瀏覽器訪問
http://192.168.80.10:80/test

1、建立使用者認證資料檔案

2、新增使用者授權配置

3、驗證使用者訪問授權

七、Apache 日誌分割

使用Apache 自帶 rotatelogs 分割工具,將 Apache 的日誌進行按每天的日期自動分割

vim /usr/local/httpd/conf/httpd.conf
--275行--修改
ErrorLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/error_%Y%m%d.log 86400"		#分割錯誤日誌
--305行--修改
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/benet.com-error_%F.log 86400"
CustomLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/benet.com-access_%F.log 86400" combined

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

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

八、AWStats 分析系統

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

1、將安裝AWStats 所需軟體包傳到/opt目錄下

awstats-7.6.tar.gz

2、安裝 AWStats 軟體包

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

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

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.kgc.com                   		   	#輸入要統計的站點域名

其它全部是y 或者 回車

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

vim /usr/local/httpd/conf/httpd.conf
ErrorLog "logs/error_log"
CustomLog "logs/access_log" combined
......
--143行--
<IfModule !mpm_prefork_module>
	LoadModule cgid_module modules/mod_cgid.so		#取消註釋
</IfModule>
<IfModule mpm_prefork_module>
	LoadModule cgi_module modules/mod_cgi.so		#取消註釋
</IfModule>
......
--跳至末行修改--
<Directory "/usr/local/awstats/wwwroot">
    Options None
    AllowOverride None
    #Order allow,deny			#註釋掉
    #Allow from all				#註釋掉
    Require all granted			#新增
</Directory>

5、修改站點統計配置檔案

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


mkdir /var/lib/awstats

6、執行日誌分析,並設定 cron 計劃任務

systemctl restart httpd
cd /usr/local/awstats/tools/
./awstats_updateall.pl now  	#更新資料(根據站點配置檔案指定的日誌檔案路徑獲取日誌資料)
#注意,更新資料前最好先把access.log檔案清空後重新訪問站點,再獲取日誌資料。

crontab -e
*/5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now

systemctl start crond

7、訪問 AWStats 分析系統站點

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

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

8、優化網頁地址

vim /usr/local/httpd/htdocs/aws.html
<html>
<head>
<meta http-equiv=refresh content="0;url=http://www.kgc.com/awstats/awstats.pl?config=www.kgc.com">
</head>
<body></body>
</html>

HTML 檔案結構解釋:
<html> </html> :用於HTML檔案結構最外層表示的標籤	
<head> </head> :用於HTML網頁內容描述資訊的頭標籤
<body> </body> :用於顯示網頁內容的內容標籤
<meta> :定義了 HTML 文件中的元資料,比如針對搜尋引擎和更新頻度的描述和關鍵詞。這裡的http-equiv=refresh 用於實現網頁自動跳轉

瀏覽器訪問
http://www.kgc.com/aws.html

1、將安裝AWStats 所需軟體包傳到/opt目錄下

2、安裝 AWStats 軟體包

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

4、改自動生成的 awstats 訪問許可權,載入 CGI 模組(Apache 2.4 以上版本需要載入CGI 模組)

5、修改站點統計配置檔案

6、執行日誌分析,並設定 cron 計劃任務

注:這邊計劃任務就先不做了

7、訪問 AWStats 分析系統站點

8、優化網頁地址