Apache 基于域名的虚拟主机(基于域名 混合多IP)

Stella981
• 阅读 667

最近,我有一台debian服务器,双网卡,一个用于提供外网服务,一个用于管理,上面部署有apache,部署了四个基于域名的虚拟主机,现在想把其中两个改成让外网可以访问,两个让内网访问,按照一般的操作完成后,发现第二个设置外网访问的虚拟主机访问不了,访问时内容总是跳转到第一个外网虚拟主机上面,当时知道apache如果找不到相应的虚拟主机会以第一个虚拟主机为默认的,但是看配置是没有问题的(表面而已)。

下来讲一下debian安装apache的目录结构,在centos下安装httpd时只要yum -y install httpd.x86_64即可,centos的默认配置都在一个文件中,所有的加载的模块配置和虚拟主机配置都在一个httpd.conf文件中,而debian却是以加载模块和配置文件的形式在,debian的apache安装按成后在/etc/apache2目录下有以下文件:

Apache 基于域名的虚拟主机(基于域名 混合多IP)

debian的主配置文件是apache2.conf,httpd.conf是空文件,envvars用来给apache2ctl设置环境变量,ports.conf用来定义主配置文件的监听IP, NameVirtualHost等,mods-available和mods-enabled是两个重要的目录,里面包含了一些apache的扩展模块,mods-available里面是默认的一些apache模块,但并不是所有的都已经加入主配置中,比如要加入rewrite模块,执行a2enmod rewrite即可,这样在mods-enabled目录中就有开启的rewrite模块了(软连接形式),a2dismod可以取消相关模块,sites-available和sites-enabled是配置虚拟主机的,所有的虚拟主机都在sites-available目录下,当需要开启某个虚拟主机时,执行a2ensite filename即可,在sites-enabled目录下就会有相应的文件(软连接)。a2dissite 取消相关虚拟主机。在apache2.conf中会以Include的形式把相关文件夹包含进去。

我的apache都是以域名的虚拟主机,在sites-enabled目录下,每个项目的虚拟主机分别分配一个文件,如下:

Apache 基于域名的虚拟主机(基于域名 混合多IP)

格式如下:

<VirtualHost 192.168.2.1:80> 
    ServerAdmin webmaster@localhost 
    ServerName test.wai2.com 
    DocumentRoot /var/www/test.wai2.com 
    <Directory /var/www/test.wai2.com> 
        Options -Indexes FollowSymLinks +Execcgi 
        Order allow,deny allow from all 
        ErrorLog /var/log/apache2/test.wai2.com_error.log 
        LogLevel warn 
        CustomLog /var/log/apache2/test.wai2.com_access.log combined 
    </Directory>
</VirtualHost>

在四个基于域名的虚拟主机都绑定内网IP时,这种配置访问都很正常,每个虚拟主机一个配置文件也没问题,但是当其中两个绑定内网IP,两个绑定外网IP时就出现了开头说的那种情况,最后把绑定内网IP的虚拟主机的配置文件(test.nei1.com,test.nei3.com)合并到一个文件中,把绑定外网IP的虚拟主机配置文件(test.wai2.com,test.wai4.com)合并到一个文件中,在ports.conf中取消 NameVirtualHost的定义配置,在合并后的每个配置文件的开头插入一行NameVirtualHost IP:80,绑定内网的就写内网IP,绑定外网的就写外网IP,做好DNS后,然后重启apache即可。

测试:

Apache 基于域名的虚拟主机(基于域名 混合多IP)

这样就可以即有绑定内网的虚拟主机,也有绑定外网的虚拟主机,且互不影响,在centos下应该不会出现在debian下的这种情况,因为所有的配置都在一个文件中,但是习惯了debian的配置文件格式,且这样每个虚拟主机分开写管理起来方便,所以还不死心,又改成了四个配置文件的格式,并且在每个配置文件的第一行插入NameVirtualHost IP:80的配置,然后启动的时候会有警告NameVirtualHost 外网IP:80 has no VirtualHosts,很奇怪定义了,怎么会没有呢,这样等于就有两个NameVirtualHost 内网IP:80和两个NameVirtualHost 外网IP:80的配置了,但是实验结果却是可以正常访问互不影响的,然后看了一下文档有如下描述:

The namevirtualhost command tells Apache that you will use VirtualHost boxes on a specific IP address. This command is needed only once for each IP address. It is not necessary to repeat the namevirtualhost directive for every VirtualHost box you use as in your example. The directive doesn't define a VirtualHost, it only tells Apache that on that IP address one or more virtual hosts will be present.

恍然大悟啊,同一个IP的NameVirtualHost的只能定义一次,但是如果各取消一个NameVirtualHost的话就又会出现开头的问题,所以为了每次启动时美观一些(没有warn),只好改成两个配置文件,一个绑定内网的,一个绑定外网的。

各位看官有什么好的建议可以提一下,谢谢了。Apache 基于域名的虚拟主机(基于域名 混合多IP)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Nginx 和Apache 中的虚拟主机的概念
 在部署环境的时候,有时候会引用到虚拟主机的概念,什么是虚拟主机呢,博主之前一直把虚拟主机的概念没搞清楚,导致在部署的时候,一直动不动就404,或者500,或者服务器不通所以,什么是虚拟主机呢?虚拟主机概念大致同虚拟机的概念。如果你有两个不同域名的网站,但是你只有一台服务器,这时候怎么办?其实利用nginx或者apache都可以帮你用一台机器来模
Stella981 Stella981
3年前
41.Apache用户认证及访问日志 域名跳转
11.18Apache用户认证11.19/11.20域名跳转11.21Apache访问日志扩展 apache虚拟主机开启php的短标签 http://ask.apelearn.com/question/5370(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fask.
Wesley13 Wesley13
3年前
LAMP架构之用户认证、域名跳转及访问日志
本文索引:Apache用户认证针对目录针对单个文件设置域名跳转基本知识介绍如何配置Apache访问日志apache用户认证针对目录先确保主配置文件内开启了虚拟主机服务root@localhost~
Stella981 Stella981
3年前
Apache用户认证、域名跳转、Apache访问日志
11.18Apache用户认证注意: 本章使用浏览器进行检测的前提是在物理机hosts文件添加虚拟机IP和虚拟主机域名。配置用户认证编辑虚拟主机配置文件“httpdvhosts.conf”。root@adailinux~vim/usr/local/apache2
Stella981 Stella981
3年前
Apache用户认证、域名跳转、访问日志格式
11.18Apache用户认证注意: 本章使用浏览器进行检测的前提是在物理机hosts文件添加虚拟机IP和虚拟主机域名。配置用户认证编辑虚拟主机配置文件“httpdvhosts.conf”。root@1~vim/usr/local/apache2.4/conf/
Stella981 Stella981
3年前
Apache 设置域名泛解析
如果你的服务器,只做一个网站,基本不要配置如果有多虚拟主机的话,应该是把泛域名那个网站作为默认的虚拟主机设置服务器支持泛域名。<VirtualHost\:80       ServerAdminyourmail@yourdomain.com       DocumentRoot你的SupeSite程序的
Wesley13 Wesley13
3年前
nginx配置虚拟主机相关教程
1.配置虚拟主机配置虚拟主机即:在一台服务器上启动多个网站;区分不同的网站方式:域名不同,端口不同;1.1通过端口区分虚拟主机1.1.1server节点的介绍nginx的配置文件路径:/usr/local/nginx/conf/nginx.conf一个se
Wesley13 Wesley13
3年前
Nginx技术深度剖析(2)
Nginx虚拟主机配置实战:虚拟主机的概念:所谓虚拟主机就是在Web主机里的一个独立的网站站点,这个站点对应独立的域名(也可能是IP地址或端口),具有独立的程序及资源目录,可以独立的对外提供服务供用户访问。这个独立的站点在配置里是由一定格式的标签段标记,对于Apache软件来说,一个独立的虚拟主机的标签段通常包含在<VirtualHost<