【问题标题】:Apache Multiple Sub Domains With One IP Address一个 IP 地址的 Apache 多个子域
【发布时间】:2012-11-30 01:14:56
【问题描述】:

这可能已经被问过了,但我找不到一个直接的答案,或者我找到的那些不起作用。

我有一个域名mydomain.com,解析为一个IP;我们称之为 8.8.8.8。 DNS 设置还将两个子域指向带有 A 记录的 IP 地址。它们是 dev.mydomain.comstaging.mydomain.com。两者都有指向 8.8.8.8 的 A 记录。

在服务器 (8.8.8.8) 上,我有两个虚拟主机文件。它们如下:

staging.mydomain.com.conf

<VirtualHost *:80>
    ServerName  staging.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

还有……

dev.mydomain.com.conf

<VirtualHost *:80>
    ServerName  dev.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>

问题是:

无论我访问 http://staging.mydomain.com 还是 http://dev.mydomain.com,我总是登陆 staging.mydomain.com(Apache 提供这些服务文件)。

我已经重新启动了 Apache 甚至服务器。如果我更改 .conf 文件的顺序以使 dev 排在第一位,我总是会看到这一点。任何建议将不胜感激。谢谢!


更新

我发现自己又回到了这个问题上!如果你知道你的语法是正确的,你可能有一个错误的符号链接。删除它并重新创建,中间重新启动 apache。我只是这样做了,它解决了几个小时令人头疼的问题。在CentOS 上,您可以使用httpd -S 检查您的可用虚拟主机

更新 2

当虚拟主机的 apache log 文件不存在或不可写时,我也发现存在此问题。

【问题讨论】:

  • 我已经投票重新提出这个问题,因为问题和答案都有帮助。除此之外,关于 Apache 的问题在 StackOverflow 上并不是题外话,ServerFault 仅用于专业设置。

标签: apache subdomain vhosts


【解决方案1】:

听起来您需要将NameVirtualHost directive 添加到您的配置中。

NameVirtualHost         *:80

在某些情况下,Apache 可能无法正确处理*:80 VirtualHosts。在这些情况下,您应该将 VirtualHosts 直接映射到特定 IP。

NameVirtualHost         8.8.8.8:80

<VirtualHost 8.8.8.8:80>
    ServerName  staging.mydomain.com
    ServerAlias stage.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

<VirtualHost 8.8.8.8:80>
    ServerName  dev.mydomain.com
    ServerAlias development.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>

您也可以运行 apachectl -t -D DUMP_VHOSTS 来查看 Apache 如何解析 VirtualHost 配置。

更新:如 cmets 中所述,通常您可以使用 NameVirtualHost *:80。所以大多数时候你可以如下配置虚拟主机。

NameVirtualHost         *:80

<VirtualHost *:80>
    ServerName  staging.mydomain.com
    ServerAlias stage.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

<VirtualHost *:80>
    ServerName  dev.mydomain.com
    ServerAlias development.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>

【讨论】:

  • 谢谢 Ketola。在我的 httpd.conf 文件的末尾,我有以下内容(包括虚拟主机)NameVirtualHost *:80 [[new line]] Include /etc/httpd/sites-enabled/
  • 那应该可以了。 Apache 有时对*:80 可能有点挑剔,所以您可能想尝试8.8.8.8:80 来看看它是否工作得更好。还运行apachectl -t -D DUMP_VHOSTS 以查看 Apache 如何解析您的配置文件。更新了答案以反映这些。
  • 感谢 Ketola,在 .conf 文件和 httpd.conf 文件中都试过了,但没有雪茄,虽然顺序发生了变化! apachectl -t -D DUMP_VHOSTS 非常有用,它表明 Apache 将开发服务器定义为默认值并首先加载它。
  • 很奇怪。我能想到的唯一其他原因是某个地方的拼写错误,但这不太可能。您是否有代理或其他任何可能弄乱请求中的 Host: 标头的东西?下一步是在 Apache 中设置LogLevel debug,和/或在服务器上执行telnet localhost 80 并直接请求文档。
  • 我遇到了类似的问题...apachectl -t -D DUMP_VHOSTS 命令是告诉所有人:[Mon May 20 23:51:08 2013] [warn] _default_ VirtualHost overlap on port 80, the first has precedence 。添加NameVirtualHost *:80 解决了它
猜你喜欢
  • 2013-07-02
  • 2014-12-17
  • 2013-08-01
  • 2015-08-30
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2017-07-07
相关资源
最近更新 更多