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

apache配置了虚拟主机的服务器工作原理:
1、用户发起请求
2、apache 解析本次请求的域名和端口号, 加载 httpd-vhosts.conf 中的规则
3、检查是否存在与本次请求 端口号 一致的规则,存在 4, 不存在 5
4、进一步检查 规则中是否存在 ServerName 与本次请求 域名一致的规则,若存在做对应处理【完全匹配】;若不存在,则取第一条端口号一致的规则作为处理【至少端口号一致也会被拦截下来】
5、虚拟主机规则匹配完全失败,则读取 httpd.conf 中定义的 DocumentRoot 作为规则处理请求
所以虚拟主机是按 端口号 域名 作为先后顺序进行匹配的,端口号一致则继续匹配域名,域名一致则精确匹配,若不存在域名一致的规则则端口号相同的规则集合中的第一条作为规则,若没有此端口号则访问默认根目录

基于以上原则,同一个服务器只有一个ip,如果在一个服务器上配置多个网站的话,我们可以用不同的端口来区分不同的网站,那在apache中如何配置呢?

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

  • 需要修改文件:httpd.conf,httpd-vhosts.conf
    1. 首先在vhosts配置文件中添加你的虚拟主机,文件里面有示例代码,你需要改的是虚拟主机名字,和监听的端口,由于本身主机监听80端口,再添加一个8080端口就可以了:
      <VirtualHost 127.0.0.1:8080>//端口
      ServerAdmin ***@test.com
      DocumentRoot "/var/www/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>
    2. 修改httpd配置文件,把#Include conf/extra/httpd-vhosts.conf前面的#去掉,表示包含进来虚拟主机配置文件。
    3. 最后关键的一步,让apache监听8080端口:
      在httpd配置文件中加上:listen 8080

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

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

发表评论