无法通过 Localhost 上的 Apache 访问虚拟主机

无法通过 Localhost 上的 Apache 访问虚拟主机

我开始拔我的头发。

我们使用 Redhat/Apache 设置了三台虚拟主机来为三个基于 Drupal 的域提供服务,并且设置了第四台虚拟主机来通过乘客从一台机器为 Redmine 提供服务。

此设置适用于所有流量,所有网络地址都可以解析所有四个域。由于网络基础设施的原因,所讨论的盒子使用代理来查看外部世界。

我尝试从本地计算机上的脚本访问 Redmine API,但响应是错误:

While trying to retrieve the URL: http://projects/users.xml 

The following error was encountered: 

Unable to determine IP address from host name for projects 
The dnsserver returned: 

Name Error: The domain name does not exist. 
This means that: 

 The cache was not able to resolve the hostname presented in the URL. 
 Check if the address is correct. 

从外部机器访问 API 提供了预期的响应,因此 API 是可访问的 - 这使我相信这只是 Apache 或/和 PHP 从自身解析虚拟主机域的问题。

我猜测这可能是代理问题,所使用的代理不知道本地网络 DNS,但我不知道如何关闭代理以便 Apache 检查,因为我没有设置此服务器并且不熟悉代理要求。

如果我可以确认这是否是代理问题,我该如何对某些域进行例外处理?我假设我需要使用 NO_PROXY 环境变量,但同样,我不知道如何为 Apache 用户执行此操作,更重要的是,为 Apache 用户转储 ENV 变量根本不会显示 HTTP_PROXY 值,所以我假设 Apache 在其他地方使用代理配置。

我是否遗漏了一些显而易见的东西?

编辑: 根据请求,域的 nslookup 返回:

$ nslookup projects
Server:         10.11.6.31
Address:        10.11.6.31#53

Name:   projects.INNSERVE.LOCAL
Address: 10.11.6.48

编辑2: 根据要求,使用 wget 获取相关 URL 的结果:

$ wget projects/users.xml
--2012-12-22 19:12:51--  http://projects/users.xml
Resolving projects... 10.11.6.48
Connecting to projects|10.11.6.48|:80... connected.
HTTP request sent, awaiting response... 401 Authorization Required
Authorization failed.

答案1

我会尝试以下方法之一:

添加

domain example.com
search example.com

到 /etc/resolv.conf

或者添加

11.22.33.44    projects.example.com projects

到 /etc/hosts

其中任何一个都可能解决 DNS 问题。

答案2

出于绝望,我们设法通过重新定义 Apache Web 服务器主机文件来解决问题。以前我们使用 Webmin 来设置这些文件(大多数情况下,我手动创建项目主机条目,以便通过 Passenger 为 Redmine 安装提供服务)。

问题如下:

项目被定义为具有以下端口号的虚拟主机:

<VirtualHost our.ip.address:80>
DocumentRoot /opt/redmine-2.1.2/public
ServerName projects
...

而所有其他虚拟主机的定义都没有明确标记端口号:

<VirtualHost our.ip.address>
    DocumentRoot /var/www
    ServerName address.domain.local
    ServerAlias address

除了 Apache 解析其自己的虚拟主机之外,其他方面都运行良好。

更改剩余的虚拟主机以包含端口号似乎已经纠正了这个问题(端口号很重要,因为我们出于各种与此无关的原因使用多个端口号)。

相关内容