apache添加虚拟主机后导致旁站访问出现403问题分析

来源:互联网 发布:网络高峰期 编辑:程序博客网 时间:2024/04/25 20:48

需要了解的概念

  • 1、apache是怎么处理请求的?(这里主要说明开启VirtualHost后的处理流程)
    • Apache 在接受到请求时,会将配置文件中出现的第一个VirtualHost作为默认的,然后再找匹配的,如果没有匹配到,就使用默认的虚拟主机配置文件
  • 2、apache配置文件加载顺序
    • 1、如果没有打开Include语句,则是按照顺序,从上到下加载,如果出现相同的配置那么后面的就覆盖前面的
    • 2、有些顺序是固定的和位置无关,如下,从上到下,优先级从高到低
      • <Directory>
      • <DirectoryMatch>
      • <Files> & >FilesMatch>
      • <Location> & >LocationMatch>
  • 3、什么是旁站
    • 简单的说就是你通过一个域名或者是ip访问到一个网站后,该网站的主机下还有其它域名的网站,即可以通过另外一个域名或者ip访问到同样的主机

问题描述

前些天写了个添加子域名自动部署的脚本,主要功能就有两个

  • 1、生成子域名的虚拟主机配置文件然后上传到服务器中,
  • 2、 创建该虚拟主机所涉及到的目录

假定原来网站为xxx.com,那么在我添加新的子域名虚拟主机配置文件后,则会导致xxx.com访问出现403

这里需要说一下,我们网站访问的流程是 xxx.com 会跳转到 www.xxx.com 然后再跳转到 https://www.xxx.com,最后到实际服务器

排查过程

  • 线下搭建一套同样的测试环境
  • 由于根据报错发现是apache给的,所以就直接从前端跳过了,直接从apache入手
  • 把添加的子域名配置文件直接写在httpd.conf中则就没有问题,而直接写在conf.d下面旁站访问就会出现403
  • 查看httpd.conf配置文件发现有两个问题
    • 1、没有对应www.xxx.com的虚拟主机
    • 2、虚拟主机都写在httpd.conf中
  • 上面第2点和我们的问题不相干,但是第1条就存在问题,之所以原来访问不会出问题,www.xxx.com没有匹配到时,xxx.com总是作为默认的域名,所以不会出错
  • 好了,知道也问题所在,再新建一个www.xxx.com的虚拟主机,或者在原来的xxx.com做一个别名到www.xxx.com
  • 测试一把,没有问题,好了,终于可以舒口气了,感觉全世界都清静了

结论

原理性的东西一定要时刻都清楚,比如apache加载配置文件的顺序、默认虚拟主机充当的角色,常用配置的含义

阅读全文
0 0
原创粉丝点击