httpd重定向上的虚拟主机无意中

时间:2016-01-20 07:55:42

标签: apache httpd.conf

我的目标

使用1个IP运行2个名称虚拟主机。例如,{1}}和front1.httpd.example.com可以在1个服务器的1个httpd(父)进程上访问(我想在front1和front2中侦听端口80)。

环境

httpd 2.4和Ubuntu 11(32位)

我做了什么

我根据最新的官方文档Name-based Virtual Host Support添加到httpd.conf上的两个虚拟主机。

我还更新了我的服务器/ etc / hosts和客户端主机,如下所示。

服务器的主机(220.xxx.xxx.xxx是一些实际的IP)

front2.httpd.example.com

客户主持人

127.0.0.1 front1.httpd.example.com front2.httpd.example.com localhost

220.xxx.xxx.xxx front1.httpd.example.com
222.xxx.xxx.xxx front2.httpd.example.com

此外,我的主机名是220.xxx.xxx.xxx front1.httpd.example.com 220.xxx.xxx.xxx front2.httpd.example.com

(注意:我还尝试在VirtualHost部分之前添加front1.httpd.example.com,但它只返回附加消息“NameVirtualHost无效...”)

结果

当我访问NameVirtualHost *:80时,会返回front1.httpd.example.com/index.html。这是我的预期,但当我访问htdocs/xxxx/index.html时,尽管我打算显示front2.httpd.example.com/index.html,也会返回htdocs/xxxx/index.html。 (在浏览器控制台消息中,找到htdocs/yyyy/index.html,然后302重定向到front2.httpd.example.com/index.html

如果没有匹配的结果可供访问,虚拟主机将返回第一个虚拟主机值。所以,我也尝试改变虚拟主机的行为,如下所示:

首先尝试:

front1.httpd.example.com/index.html

第二次尝试:

<VirtualHost *:80>
    DocumentRoot "/opt/APACHE/httpd/htdocs/xxxx"
    ServerName front1.httpd.example.com
    ServerAlias front1.httpd.example.com
    ErrorLog "logs/dummy-host1.example.com-error_log"

    <Directory "/opt/APACHE/httpd/htdocs/xxxx">
      Options Indexes FollowSymLinks
      AllowOverride all
      Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/opt/APACHE/httpd/htdocs/yyyy"
    ServerName front2.httpd.example.com
    ServerAlias front2.httpd.example.com
    ErrorLog "logs/dummy-host2.example.com-error_log"
    <Directory "/opt/APACHE/httpd/htdocs/yyyy">
      Options Indexes FollowSymLinks
      AllowOverride all
      Require all granted
    </Directory>
</VirtualHost>

因此,<VirtualHost *:80> DocumentRoot "/opt/APACHE/httpd/htdocs/yyyy" ServerName front2.httpd.example.com ServerAlias front2.httpd.example.com ErrorLog "logs/dummy-host2.example.com-error_log" <Directory "/opt/APACHE/httpd/htdocs/yyyy"> Options Indexes FollowSymLinks AllowOverride all Require all granted </Directory> </VirtualHost> <VirtualHost *:80> DocumentRoot "/opt/APACHE/httpd/htdocs/xxxx" ServerName front1.httpd.example.com ServerAlias front1.httpd.example.com ErrorLog "logs/dummy-host1.example.com-error_log" <Directory "/opt/APACHE/httpd/htdocs/xxxx"> Options Indexes FollowSymLinks AllowOverride all Require all granted </Directory> </VirtualHost> 会返回front2.httpd.example.com/index.html,但htdocs/yyyy/index.html也会返回front1.httpd.example.com/index.html。因此,我猜访问请求的虚拟主机并不多。

参考和评论

我检查了类似Virtual Host on CentOS5这样的类似问题,但在我的情况下,我在服务器和客户端都写了hosts文件,所以我觉得DNS不适合我。

我已经设置了几年的httpd服务器,并且还使用了htdocs/yyyy/index.html旧的东西VirtualHost,但这次我搞砸了或者我不知道。 请提供任何想法?

我的httpd.conf

NameVirtualHost

1 个答案:

答案 0 :(得分:0)

我在此服务器实例上使用OpenAM Web策略代理。

因此,只需将每个FQDN添加到OpenAm代理配置文件上的FQDN虚拟映射即可实现我的目标。