服务器虚拟化主机

服务器虚拟化主机,第1张

ApacheHttpd服务器之虚拟机详解

其实用百度搜索网上有很多虚拟机配置。那么我为什么要写Apache虚拟机的配置方法呢?第一个原因是我真的不喜欢千篇一律的配置方式。你抄我的我抄你的,还写了一些其他与虚拟机配置无关的说明,误导读者。第二个原因是很少有文章能解释一个从配置域名解析到配置虚拟机的完整过程。基于这两个原因,在这篇文章中,我会尽量通过测试组合的方式,把虚拟机的配置方法解释的尽可能的清楚,而不是仅仅把一堆配置放在上面。希望通过我的文章,你能对Apache的虚拟机配置有更清晰的认识。

这里举个栗子来说明如何让用户在注册域名、购买服务器、安装Apache服务器后,在浏览器中输入域名来访问你的服务器。比如我申请了一个名为ezmonitor.cn的域名,然后在阿里云买了一台服务器,ip地址是115.29.44.171。因此,实现目标的第一步是在DNS服务器中注册域名。那么如何注册呢?您需要向您的域名提供商注册。例如,我从王湾购买了ezmonitor.cn的域名,所以我需要进入王湾的后台,找到设置域名解析的地方。域名解析的界面如下图所示。相信其他域名提供商的背景也差不多。现在,只有王湾的背景被用作栗子。

这里有两种“记录类型”,一种是记录类型,另一种是CNAME记录类型。

记录A的作用是域名到IP的映射。如果用户想通过ezmonitor.cn的域名访问你的服务器,需要通过记录a将域名和你的服务器的IP关联起来,在这里填写你的服务器的IP进行备案,在这里填写@符号进行主机备案。其实域名解析的 *** 作在这里已经完成了。当用户进入http://ezmonitor.cn时,他们将访问您的服务器。但是,如果只设置了记录A,用户只能通过http://ezmonitor.cn访问您的服务器。如果用户想通过输入http://www.ezmonitor.cn访问您的服务器,我们还需要设置CNAME记录。

CNAME的功能是从域名到域名的映射。例如,如果您希望用户通过www.ezmonitor.cn访问您的服务器,您需要设置CNAME。此时,您应该将CNAME的主机记录设置为www,将记录值设置为ezmonitor.cn。当用户访问www.ezmonitor.cn时,实际上是www.ezmonitor.cn被CNAME记录解析到ezmonitor.cn,然后ezmonitor.cn被A记录解析到服务器的IP,达到让服务器响应的目的。在上图中,我的主机被记录为*,这意味着任何xxx.ezmonitor.cn都将被解析为我的服务器IP。


说到这里,第一步,域名解析完成。所以现在我有了另一个要求。我想通过v1.com访问服务器v1目录下的页面,如何通过v2.com访问服务器v2目录下的页面?这就是设置虚拟机的目的,我们需要通过基于名称的虚拟机来实现。

其实虚拟机的配置很简单,只有


首先说一下最基本的场景,即通过v1.com访问v1目录,通过v2.com访问v2目录。假设服务器的IP地址是192.168.1.254,服务器的根目录是/easydeploy/httpd/htdocs,v1目录是/easydeploy/httpd/v1,v2目录是/easydeploy/httpd/htdocs/v2。v1目录下有一个index.html页面,页面内容是我是v1。v2目录下还有一个index.html页面,内容是我是v2。服务器根目录/easydeploy/httpd/htdocs下还有一个index.html页面,页面内容是I'mdefault。那么配置如下:

<VirtualHost 192.168.1.254:80>   DocumentRoot"/easydeploy/httpd/htdocs/v1"   ServerName v1.com </VirtualHost> <VirtualHost 192.168.1.254:80>   DocumentRoot"/easydeploy/httpd/htdocs/v2"   ServerName v2.com </VirtualHost>

将上述配置添加到httpd.conf文件的末尾。<虚拟主机></virtualhost>;表示创建了新的虚拟机。<虚拟主机192.168.1.254:80>的IP和端口是通过v1.com或v2.com的域名解析的IP和端口,80是http协议使用的默认端口,所以访问v1.com或v2.com时不需要像http://v1.com:80那样输入,只需输入http://v1.com即可。但是我们必须确保v1.com能够解析192.168.1.254的ip地址。如果我们在局域网中访问,我们可以通过设置主机文件来解析域名。设置主机文件的方法是在新的一行中输入192.168.1.254v1.com,每个IP-域名对为一行。文档“/easydeploy/httpd/htdocs/v1”指令和Apache的全局指令一样,指定了根目录。表示该虚拟机的根目录为/easydeploy/httpd/htdocs/v1。访问http://v1.com/index.html,时,服务器会将/easydeploy/httpd/htdocs/v1/index.html的文件内容返回给浏览器(显示内容为我是v1)。servername的命令是指定该虚拟机对应的域名。如果设置为x1.com,您必须在浏览器中输入x1.com/index.html,并确保x1.com解析为192.168.1.254的ip,以获取服务器中/easydeploy/httpd/htdocs/v1/index.html的内容。v2.com的虚拟机配置与v1.com的完全相同。访问http://v2.com/index.html,时,服务器会将/easydeploy/httpd/htdocs/v2/index.html的文件内容返回给浏览器(显示内容为I'mv2)。


在设置虚拟机时,我们经常会遇到各种奇怪的问题。我们来模拟几个奇怪的场景,看看设置不当后会发生什么。

第一,IP不正确。以下是配置

<VirtualHost 127.0.0.1:80>   DocumentRoot"/easydeploy/httpd/htdocs/v1"   ServerName v1.com </VirtualHost> <VirtualHost 192.168.1.254:80>   DocumentRoot"/easydeploy/httpd/htdocs/v2"   ServerName v2.com </VirtualHost>

因为v1虚拟机对应的ip是127.0.0.1,v1.com解析的ip是192.168.1.254,所以v1虚拟机的配置是不正确的,只有v2虚拟机的配置是正确的。当浏览器输入http://v1.com/index.html,时,返回给浏览器的内容是“我是v2”。当浏览器输入http://v2.com/index.html,时,返回给浏览器的内容也是“我是v2”。问题来了。很明显,v1.com对应的根目录是/easydeploy/httpd/htdocs/v1,所以应该会返回/easydeploy/httpd/htdocs/v1/index.html中的内容(应该是我是v1)。那么为什么会返回/easydeploy/httpd/htdocs/v2/index.html中的内容呢?原来,当请求的域名(v1.com)解析的ip与虚拟机中设置的ip不一致时,apache会先寻找正确配置的虚拟机,根据正确虚拟机设置的根目录返回内容。因此...。当我们访问http://v1.com/index.html和http://v2.com/index.html时,如果所有虚拟机设置都不正确,会发生什么情况?


第二,两个虚拟机的IP都不正确。下面是配置。

<VirtualHost 127.0.0.1:80>   DocumentRoot"/easydeploy/httpd/htdocs/v1"   ServerName v1.com </VirtualHost> <VirtualHost 127.0.0.1:80>   DocumentRoot"/easydeploy/httpd/htdocs/v2"   ServerName v2.com </VirtualHost>

此时,当我们访问http://v1.com/index.html,时,返回的结果是我违约。当我们访问http://v2.com/index.html,时,返回的结果是我违约。不都是来自/easydeploy/httpd/htdocs/index.html吗?发生了什么事?原来在我们


在虚拟机的设置中,还有一个重要的命令,ServerAlias,可以帮助我们通过使用不同的域名来访问一个虚拟机。比如我们想通过vx1.com访问/easydeploy/httpd/htdocs/v1目录下的内容,然后确定vx1.com的域名也解析为192.168.1.254,我们只需要这样配置就可以了。

<VirtualHost 192.168.1.254:80>   DocumentRoot"/easydeploy/httpd/htdocs/v1"   ServerName v1.com   ServerAlias vx1.com </VirtualHost> <VirtualHost 192.168.1.254:80>   DocumentRoot"/easydeploy/httpd/htdocs/v2"   ServerName v2.com </VirtualHost>

还有一个问题。。。如果将v2.com添加到v1虚拟机中的ServerAlias,会发生什么情况?让我们试一试。配置如下:

<VirtualHost 192.168.1.254:80>   DocumentRoot"/easydeploy/httpd/htdocs/v1"   ServerName v1.com   ServerAlias vx1.com v2.com </VirtualHost> <VirtualHost 192.168.1.254:80>   DocumentRoot"/easydeploy/httpd/htdocs/v2"   ServerName v2.com </VirtualHost>

当我们进入http://v2.com/index.html,时,我们发现返回的内容实际上是我是v1。给你。。。显然,v2虚拟机配置正确。为什么它会读取目录easydeploy/httpd/htdocs/v1中的内容?最初,当所有虚拟机配置都正确时,Apache将按顺序匹配第一个合格的配置。在v1虚拟机中设置ServerAlias没有错,所以当你访问http://v2.com/index.html,时,会返回v1目录中的内容。


好了,虚拟机的配置就这么多了。这其实是一个非常简单的内容拉动,但却是我们经常使用的东西。所以希望对大家有帮助。有问题也可以互相交流。对LAMP感兴趣的朋友,欢迎大家+群322715918一起讨论,交朋友o(∩_∩)o。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/782477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存