虚拟主机是web服务的一项很重要也是很有用的东西,可以让你在同一台服务器上定义多个站点,多个不同的主页面。听起来很假!但是这是可以实现的,等下我们用实例来演练一下。
虚拟主机,应该并不难理解。虚拟,就是说这不是实际存在的,但是给你的感觉却是实实在在的!也就是说在同一台主机的硬件上给虚拟出看上去有多个主机的样子。这个就体现在网站和网页上,下面我们就来用实际的例子来说明一下:
我们首先要做的当然是安装web服务的软件包httpd了,安装好httpd软件包之后,我们先要把/etc/httpd/conf/httpd.conf文件中的DocumentRoot开头的一行注释掉,这样在访问时就不会显示原主机上的内容了。
# vim /etc/httpd/conf/httpd.conf
将DocumentRoot一行注释掉
虚拟主机也分为不同的类型,有基于IP地址认证的和端口认证的,还有基于域名认证的。下面我们一个一个来说明。(注意:学习实验请在虚拟机中进行!以免“误伤”!)
基于IP地址认证:
IP地址认证很简单的,要保证你的主机有两个IP!也可以使用地址别名我们这里使用地址别名。另外这里只是为了做实验就使用临时的地址别名。
下面我们在/etc/httpd/conf.d目录下创建一个文件(这里名为xuni.conf),并添加以下内容:
<VirtualHost 172.16.16.20:80>
DocumentRoot “/www/aoxuetangli.com” # 页面文件的存放路径
CustomLog /var/log/httpd/aoxuetangli.com/access_log combined # 日志文件
</VirtualHost>
<VirtualHost 172.16.16.22:80>
DocumentRoot “/www/sishenlaile.com”
</VirtualHost>
完成之后不要着急测试,因为我们还有几个文件没创建呢。文件中定义了页面文件的存放路径,一个是/www/aoxuetangli.com,一个是/www/sishenlaile.com。另外还定义了访问日志文件/var/log/httpd/aoxuetangli.com/access_log我们要依依创建:
创建页面存放路径:
# mkdir -pv /www/{aoxuetangli.com,sishenlaile.com}
创建日志存放目录:
# mkdir /var/log/httpd/aoxuetangli.com
创建日志文件:
# touch /var/log/httpd/aoxuetangli.com/access_log
做完这些我们还要给网站提供页面:
为aoxuetangli.com提供主页面
# vim /www/aoxuetangli.com/index.html
输入一些内容以便测试时显示区别(注意:这里是提供的网页,要按照网页格式来写):
<html>
<h1>hell</h1>
aoxuetangli.com
</html>
为sishenlaile.com提供主页面
# vim /www/sishenlaile.com/index.html
<html>
<h1>sishenlaile.com</h1>
</html>
做完这些就可以启动服务进行测试了!
启动服务:
# service httpd start
打开浏览器测试一下:
可以看出于我们输入的内容是一致的,于定义IP的主机也是一致的。下面我们来看一下基于端口的虚拟主机。可以利用以上资源来进行修改,我们只需对xuni.conf文件做一下修改就可以实现:
# vim /etc/httpd/conf.d/xuni.conf
将其改为一下内容:
<VirtualHost 172.16.16.20:80>
DocumentRoot “/www/aoxuetangli.com”
CustomLog /var/log/httpd/aoxuetangli.com/access_log combined
</VirtualHost>
<VirtualHost 172.16.16.20:8080>
ServerName www.mail.com
DocumentRoot “/www/mail.com”
</VirtualHost>
对应的文件我们都已经创建过了,这里还要做的一步是将基于端口访问时需要监听的端口加上,默认只监听80端口:
# vim /etc/httpd/conf/httpd.conf
在Listen 80下面加上一行:
Listen 8080
然后重启服务或者让服务器重读配置文件
# service httpd restart #重启服务
# service httpd reload #重读配置文件
然后再用浏览器进行测试:
基于端口的虚拟主机也完成了,下面我们来实现一下基于域名的虚拟主机:
还是来修改xuni.conf文件吧,这样比较省事!
# vim /etc/httpd/conf.d/xuni.conf
修改为以下内容:
NameVirtualHost 172.16.16.20:80
<VirtualHost 172.16.16.20:80>
ServerName www.aoxuetangli.com
DocumentRoot “/www/aoxuetangli.com”
CustomLog /var/log/httpd/aoxuetangli.com/access_log combined
</VirtualHost>
<VirtualHost 172.16.16.20:80>
ServerName www.sishenlaile.com
DocumentRoot “/www/sishenlaile.com”
</VirtualHost>
这里虽然配置好了虚拟主机,但是我们要访问域名还要配置DNS服务,不过还有一种办法,就是修改主机上的hosts文件,Windows系统一般存放在C盘下面是路径:
Windows\System32\drivers\etc
可能是隐藏文件,打开hosts文件添加下面两行:
172.16.16.20 www.sishenlaile.com
172.16.16.20 www.aoxuetangli.com
接下来我们来测试一下:
虚拟主机还可以实现当要访问某个站点时要登录才能访问,这样我们就可以定义我们的内部网络了,并且只有授权的用户才能登录,提高了我们网络的安全性。
我们定义在访问sishenlaile.com时要登录才能访问,编辑/etc/httpd/conf.d/xuni.conf将定义sishenlaile.com的内容添加几行,下面为添加后的内容:
<VirtualHost 172.16.16.20:80>
ServerName www.sishenlaile.com
DocumentRoot "/www/sishenlaile.com"
<Directory "/www/sishenlaile.com">
Options none 定义网页在被访问时的访问属性
AllowOverride authconfig允许使用与认证授权相关的指令
AuthType basic认证类型
AuthName "Restrict area." 定义限定的访问区域
AuthUserFile "/etc/httpd/.htpasswd" 定义用户及密码的存放文件
Require valid-user 允许指定文件中的所有用户访问
</Directory>
</VirtualHost>
完成之后我们要为此站点提供用户和密码,文件中定义了用户和密码的存放路径在/etc/httpd/.htpasswd我们可以用命令htpasswd来实现创建此文件并创建用户和密码:
第一次创建时用-c选项系统会自动创建.htpasswd这个文件,这里设定的密码都与用户名相同,下面来测试一下:
输入域名之后会提示我们输入用户名和密码,这里只能登录.htpasswd文件中含有的用户,下面是输入正确的用户和密码之后的页面:
输入错误时会显示以下页面:
当输入错误时会返回登录框,让你重新登录。当你取消登录时会显示登录框背后的界面。
有了限制登录的还不够,有时我们需要禁止某个网段或者某个主机的访问,就是不让他来访问,连登录框都不给他,这个功能也是可以实现的,我们来看一下:
编辑我们的配置文件
# vim /etc/httpd/conf.d/xuni.conf
我们禁止192.168.0.234(我的主机)这个主机来访问我们的域名为aoxuetangli.com的站点,将文件内容中定义aoxuetangli.com的部分添加点内容,下面是添加后的内容:
<VirtualHost 172.16.16.20:80>
ServerName www.aoxuetangli.com
DocumentRoot "/www/aoxuetangli.com"
CustomLog /var/log/httpd/aoxuetangli.com/access_log combined
<Directory "/www/aoxuetangli.com">
Options none
AllowOverride none忽略.htpasswd文件中定义的作用内容
Order deny,allow定义访问控制列表的控制次序
Deny from 192.168.0.234不允许此主机访问
</Directory>
</VirtualHost>
然后重启服务或者让服务器重读配置文件,接着用浏览器进行测试:
我们可以看到我的主机也就是192.168.0.234已经不能访问此域名了!
这三种功能也可以同时使用,但是要注意的是基于域名访问中的NameVirtualHost 172.16.16.20:80一行一定要放在文件的首行。另外就是在定义哪个主机不能访问时要将基于IP的、端口的、域名的,全都写上相关内容,不然你会发现他还能访问!(本人就因为在定义的时候没全写而调试了一上午!!!)
转载于:https://blog.51cto.com/axtl1314/1181894