實驗環境
實體主機IP為192.168.43.78,安裝httpd-2.4
分别配置:
- 基于IP的兩台httpd虛拟主機,URL分别為http://192.168.43.78和http://192.168.43.79;
- 基于PORT的兩台虛拟主機,URL分别為http://192.168.43.78和http://192.168.43.78:8080
- 基于FQDN的兩台虛拟主機,URL分别為http://www1.server.com和http://www2.server.com
httpd-2.4 虛拟主機的配置項
<VitualHost IP:PORT>
ServerName FQDN
DocumentRoot ""
ErrorLog ""
CustomLog "" Combined
<Directory "">
Options {None|Index|FollowSymLink}
AllowOverride None
Require all granted #也可以指定IP,或基于使用者的通路控制
</Directory>
Alias
等等
</VirtualHost>
一、基于IP的虛拟主機配置實踐
基于IP的虛拟主機雖然節約了實體資源,但需要額外配置IP位址,如果是公網生産環境,也是一項額外成本。
配置要求:
(1) 站點1的IP為192.168.43.78,域名為www1.server.com,文檔路徑為/data/www1/html;
(2) 站點2的IP為192.168.43.79,域名為www2.server.com,文檔路徑為/data/www2/html。
配置步驟:
(1) 建立各自的文檔路徑和首頁檔案
# mkdir -pv /data/www{1,2}/html
#編輯首頁以示區分。
# vim /data/www1/html/index.html
<h1>This is www1 Server</h1>
# vim /data/www2/html/index.html
<h1>This is www2 Server</h1>
(2) 為伺服器主機設定2個IP位址
# 這裡我是直接編輯網卡配置檔案,設定IPADDR1和IPADDR2,沒有設定網卡别名
# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
...
IPADDR1="192.168.43.78"
PREFIX1="24"
IPADDR2="192.168.43.79"
PREFIX2="24"
...
# 重新開機網絡服務以立即生效
# systemctl restart network.service
(3) 增加并編輯虛拟機配置檔案
# 跳轉到配置檔案目錄
# cd /etc/httpd/conf.d/
# 增加并編輯www1虛拟主機的配置檔案
# vim vhost_www1.conf
<VirtualHost 192.168.43.78:80>
ServerName "www1.server.com"
DocumentRoot "/data/www1/html"
<Directory "/data/www1/html">
Options None
AllowOverride None
Require all granted
</Directory>
Customlog "logs/www1/access_log" combined
ErrorLog "logs/www1/error_log"
</VirtualHost>
# 增加并編輯www2虛拟主機的配置檔案
# vim vhost_www2.conf
<VirtualHost 192.168.43.79:80>
ServerName "www2.server.com"
DocumentRoot "/data/www2/html"
<Directory "/data/www2/html">
Options None
AllowOverride None
Require all granted
</Directory>
Customlog "logs/www2/access_log" combined
ErrorLog "logs/www2/error_log"
</VirtualHost>
(4) 驗證
# 檢查配置檔案文法,并重新開機服務
# httpd -t
Syntax OK
# systemctl restart httpd.service
浏覽器分别通路http://192.168.43.78和http://192.168.43.79,分别顯示對應内容:
二、基于PORT的虛拟主機配置實踐
基于PORT的虛拟主機雖然節約了IP位址成本,但對于使用者來說,輸入url時還需要指定端口,對于沒有IT基礎的使用者來說,也是一項挑戰,不利于拓寬使用者面。
配置要求:
(1) 站點1的IP:PORT為192.168.43.78:80,域名為www1.server.com,文檔路徑為/data/www1/html;
(2) 站點2的IP:PORT為192.168.43.78:8080,域名為www2.server.com,文檔路徑為/data/www2/html。
配置步驟:
(1) www1的配置不用更改,更改www2的配置
Listen 8080 #添加監聽端口8080
<VirtualHost 192.168.43.78:8080>
ServerName "www2.server.com"
DocumentRoot "/data/www2/html"
<Directory "/data/www2/html">
Options None
AllowOverride None
Require all granted
</Directory>
Customlog "logs/www2/access_log" combined
ErrorLog "logs/www2/error_log"
</VirtualHost>
(2)驗證
*浏覽器通路http://192.168.43.78:8080,顯示www2的首頁:
三、基于FQDN的虛拟主機配置實踐
如果有自己的DNS伺服器,基于FQDN的虛拟主機隻需額外指定一個主機名,在DNS伺服器中添加條目,就可以通路;或者額外申請一個域名。
這裡使用在本機上搭建的bind作為DNS伺服器,配置分為兩步。
配置要求
(1) 站點1的IP:PORT為*:80,域名為www1.server.com,文檔路徑為/data/www1/html;
(2) 站點2的IP:PORT為*:80,域名為www2.server.com,文檔路徑為/data/www2/html。
因為不再需要IP和PORT來區分虛拟主機,是以IP為*,即本機的所有IP,端口為http預設端口80
1. 配置DNS服務,并将http用戶端的DNS指向對應位址
(1) 在bind配置檔案/etc/named.rfc1912.zones中定義區域
# vim /etc/named.rfc1912.zones
zone "server.com" IN {
type master;
file "server.com.zone";
};
(2) 建立并編輯區域資料檔案,用于解析server.com域中的域名
# vim /var/named/server.com.zone
$TTL 3600
$ORIGIN server.com.
@ IN SOA ns1.server.com. dnsadmin.server.com. (
2018101501
1H
10M
3D
1D )
IN NS ns1.server.com.
IN MX 10 mx1
ns1 IN A 192.168.43.78
mx1 IN A 192.168.43.78
www1 IN A 192.168.43.78
www2 IN A 192.168.43.78
(3) 重載配置檔案和區域資料檔案
# 檢查配置檔案
# named-checkconf
# 檢查區域資料檔案
# named-checkzone server.com /var/named/server.com.zone
zone server.com/IN: loaded serial 2018101501
OK
# 重載
# rndc reload
server reload successful
2.配置基于FQDN的虛拟主機
(1) 更改www1和www2的配置
# vim vhost_www1.conf
<VirtualHost *:80>
ServerName "www1.server.com"
DocumentRoot "/data/www1/html"
<Directory "/data/www1/html">
Options None
AllowOverride None
Require all granted
</Directory>
Customlog "logs/www1/access_log" combined
ErrorLog "logs/www1/error_log"
</VirtualHost>
# vim vhost_www2.conf
<VirtualHost *:80>
ServerName "www2.server.com"
DocumentRoot "/data/www2/html"
<Directory "/data/www2/html">
Options None
AllowOverride None
Require all granted
</Directory>
Customlog "logs/www2/access_log" combined
ErrorLog "logs/www2/error_log"
</VirtualHost>
(2) 檢查并重新開機服務
# httpd -t
Syntax OK
# systemctl restart httpd.service
3. 驗證
(1) 将用戶端的DNS伺服器指向192.168.43.78
(2) 浏覽器分别通路http://www1.server.com和http://www2.server.com,顯示對應内容:
自此,httpd-2.4中三種虛拟主機的配置方式已實踐完成。