您的位置:首页 > 运维架构 > Apache

apache基于端口的虚拟主机配置

2016-05-15 14:52 288 查看
同一个服务器只能有一个ip,这样如果在一个服务器上配置多个网站的话,如果用ip访问,访问的时候怎么才能区分你要访问的是哪个网站呢?

这就需要虚拟主机配置了,本文只介绍如何根据端口配置虚拟主机:

需要修改文件:httpd.conf,httpd-vhosts.conf

首先在vhosts配置文件中添加你的虚拟主机,文件里面有示例代码,你需要改的是虚拟主机名字,和监听的端口,由于本身主机监听80端口,再添加一个81端口就可以了:

<VirtualHost 127.0.0.1:81>//端口

ServerAdmin ***@test.com

DocumentRoot "D:/xampp/htdocs"//你项目的目录

ServerName www.****.com//这里是你虚拟主机名字,改hosts文件时用

##ServerAlias www.dummy-host.example.com

##ErrorLog "logs/dummy-host.example.com-error.log"

##CustomLog "logs/dummy-host.example.com-access.log" common

</VirtualHost>


修改httpd配置文件,把
#Include conf/extra/httpd-vhosts.conf
前面的#去掉,表示包含进来虚拟主机配置文件。

最后关键的一步,让apache监听81端口:

在httpd配置文件中加上:
listen 81


上述完成后重启apache,访问localhost和localhost:81会发现到了不同目录下

不过注意一点:如果配置了虚拟主机但是端口ip都没变,即和原来的服务器配置一样,那么原来的服务器项目就访问不到了:

这是因为:

下面复制自:http://www.ithov.com/linux/82600.shtml

配置了虚拟主机的服务器工作原理:

1、用户发起请求

2、apache 解析本次请求的域名和端口号, 加载 httpd-vhosts.conf 中的规则

3、检查是否存在与本次请求 端口号 一致的规则,存在 4, 不存在 5

4、进一步检查 规则中是否存在 ServerName 与本次请求 域名一致的规则,若存在做对应处理【完全匹配】;若不存在,则取第一条端口号一致的规则作为处理【至少端口号一致也会被拦截下来】

5、虚拟主机规则匹配完全失败,则读取 httpd.conf 中定义的 DocumentRoot 作为规则处理请求

所以虚拟主机是按 端口号 域名 作为先后顺序进行匹配的,端口号一致则继续匹配域名,域名一致则精确匹配,若不存在域名一致的规则则端口号相同的规则集合中的第一条作为规则,若没有此端口号则访问默认根目录

这就是配置了虚拟主机的服务器根据域名,端口判断访问哪个地址的过程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息