作者:网络傅老师
特别提示:未经作者允许,不得转载任何内容。违者必究!
Debian如何配置Apache2(2)虚拟主机
《傅老师Debian小知识库系列之22》——原创
==前言==
一、概念
通常一台Apache服务器上要运行多个网站(虚拟主机),配置虚拟主机有多种方法,本篇分别介绍。
二、前置知识
实现虚拟主机通常有以下3种方法:
1、不同IP地址
如果你的Apache服务器的IP地址阔绰,那么每个虚拟主机都可以对应1个IP地址,客户端通过不同IP地址就能访问不同的网站。
2、相同IP地址、不同端口号
如果你的Apache服务器只有1个IP地址。那么就无法通过IP地址区分不同的虚拟主机,此时可以用上不同的端口号。客户端通过IP:端口的格式就能访问不同的网站,例如“http://123.4.5.6:7890”。显然,这种方式对于用户不太友好。
3、相同IP地址和端口号、不同的FQDN
显然,这种方式对用户最友好,实际工作中用的也最多。用户只需通过类似于“www.fu.com”这种FQDN访问网站就行了,Apache接收到请求后,会由不同的虚拟主机响应。
三、操作方法
1、不同IP地址
先给网卡配置第2个IP地址192.168.9.75/24,可使用nmtui工具,方法略。
(1)创建2个测试网站的目录和首页
root@Debian:~# mkdir -p /var/www/fu1
root@Debian:~# mkdir -p /var/www/fu2
root@Debian:~# echo "<h1>www.fu1.com</h1>" > /var/www/fu1/index.html
root@Debian:~# echo "<h1>www.fu2.com</h1>" > /var/www/fu2/index.html
(2)编辑虚拟主机配置文件
root@Debian:~# nano /etc/apache2/sites-available/vhosts.conf
内容如下
<VirtualHost 192.168.9.57:80> //监听192.168.9.57:80
ServerName www.fu1.com
DocumentRoot /var/www/fu1/ //网站目录
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/fu1/>
Require all granted //授予允许访问权限
</Directory>
</VirtualHost>
<VirtualHost 192.168.9.75:80> //监听192.168.9.57:80
ServerName www.fu2.com
DocumentRoot /var/www/fu2/ //网站目录
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/fu2/>
Require all granted
</Directory>
</VirtualHost>
(3)关闭默认网站,启用虚拟主机
命令a2dissite是禁用、a2ensite是启用
root@Debian:~# a2dissite 000-default.conf //关闭默认网站
Site 000-default disabled.
To activate the new configuration, you need to run:
systemctl reload apache2
root@Debian:~# a2ensite vhosts.conf //启用虚拟主机
Enabling site vhosts.
To activate the new configuration, you need to run:
systemctl reload apache2
root@Debian:~# systemctl restart apache2 //重启apache服务
(4)客户端验证
可以看到不同的IP访问不同的网站。如图22.1所示。
图22.1 不同IP的虚拟主机
2、相同IP地址、不同端口号
还用上面两个测试网站,修改一下其虚拟主机配置文件,使用相同IP,其中fu1使用默认的80端口、fu2使用12345端口。然后指定Apache监听相关端口号。
(1)修改虚拟主机配置文件
root@Debian:~# nano /etc/apache2/sites-enabled/vhosts.conf
内容如下:
<VirtualHost 192.168.9.75:80> //相同IP,80端口
ServerName www.fu1.com
DocumentRoot /var/www/fu1/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/fu1/>
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.9.75:12345> //相同IP,12345端口
ServerName www.fu2.com
DocumentRoot /var/www/fu2/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/fu2/>
Require all granted
</Directory>
</VirtualHost>
(2)指定监听端口
root@Debian:~# nano /etc/apache2/ports.conf
内容如下:
Listen 80
Listen 12345 //指定监听12345端口
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
root@Debian:~# systemctl restart apache2 //重启服务
(3)客户端验证
可以看到,fu1网站是默认80端口、fu2网站是12345端口,2个网站的IP都是192.168.9.75,如图22.2所示。
图22.2 相同IP不同端口号的虚拟主机
3、相同IP和端口、不同FQDN
(1)修改虚拟主机配置文件
root@Debian:~# nano /etc/apache2/sites-enabled/vhosts.conf
内容如下:
<VirtualHost 192.168.9.75:80> //相同IP和端口
ServerName www.fu1.com //指定FQDN
DocumentRoot /var/www/fu1/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/fu1/>
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.9.75:80> //相同IP和端口
ServerName www.fu2.com //指定FQDN
DocumentRoot /var/www/fu2/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/fu2/>
Require all granted
</Directory>
</VirtualHost>
root@Debian:~# systemctl restart apache2 //重启Apache
(2)配置域名解析
配置区域——
root@Debian:~# nano /etc/bind/named.conf.local
内容如下:
zone "fu1.com" {
type master;
file "/etc/bind/db.fu1.com";
};
zone "fu2.com" {
type master;
file "/etc/bind/db.fu2.com";
};
配置区域数据文件——
root@Debian:~# nano /etc/bind/db.fu1.com
内容如下:
……省略部分内容
@ IN NS Debian.fu1.com.
Debian IN A 192.168.9.75
www IN A 192.168.9.75
root@Debian:~# nano /etc/bind/db.fu2.com
内容如下:
……省略部分内容
@ IN NS Debian.fu2.com.
Debian IN A 192.168.9.75
www IN A 192.168.9.75
root@Debian:~# systemctl restart bind9 //重启bind9服务
(3)客户端验证
可以看到通过不同的FQDN访问不同虚拟主机,如图22.3所示。
图22.3 不同FQDN访问的虚拟主机
OK,这些就是在Apache2中实现多个虚拟主机的方法,第三种方案用的最多,当然同学们也可根据实际情况选择其他的方案。快试一下吧~~
尾部有傅老师的微信名片
欢迎沟通交流:)