VirtualHosts 在 Mac OS 10.7 上不起作用
Posted
技术标签:
【中文标题】VirtualHosts 在 Mac OS 10.7 上不起作用【英文标题】:VirtualHosts does not work on Mac OS 10.7 【发布时间】:2012-05-14 21:46:16 【问题描述】:我想在 Mac OS 10.7 上创建 VirtualHosts,因此我编辑了 /etc/apache2/httpd.conf。我取消注释“包含/private/etc/apache2/extra/httpd-vhosts.conf”行以包含虚拟主机。在文件 /private/etc/apache2/extra/httpd-vhosts.conf 我写了以下内容:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/var/www"
ServerName localhost
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/someFolder"
ServerName myApplication.dev
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/someOhterFolder"
ServerName myApplication2.dev
</VirtualHost>
我删除了两个示例虚拟主机。在我的 /etc/hosts 文件中,我添加了以下内容:
127.0.0.1 myApplication.dev
127.0.0.1 myApplication2.dev
我重新启动了我的 Apache 并在浏览器中输入了 myApplication.dev 和 myApplication2.dev,但我收到一个错误“找不到服务器”,它在浏览器中显示 www.myApplication.dev(myApplication2.dev 也是如此)。
我是否忘记了要配置的内容?我在httpd.conf中激活了php,也安装了mysql,但我认为这与虚拟主机无关。 感谢您的帮助!
【问题讨论】:
这听起来更像是 /etc/hosts 条目的问题,而不是 apache 配置的问题。如果您尝试 ping myApplication.dev 会发生什么? 如果我 ping 它,我会得到正确的答案,所以它可以工作。 【参考方案1】:apachectl 有一个选项 -S 来检查 vhost.conf 文件的语法。您可以在 vhosts.conf 文件中找到这些行。
> # You may use the command line option '-S' to verify your virtual host
> # configuration.
所以,当你运行时
sh-3.2# apachectl -S
如果你得到 Syntax OK 结果,则说明你的 vhosts.conf 文件没有问题。
httpd: VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server zz.xxxx.com (/private/etc/apache2/extra/httpd-vhosts.conf:27)
port 80 namevhost zz.xxxx.com (/private/etc/apache2/extra/httpd-vhosts.conf:27)
port 80 namevhost yy.xxxx.com (/private/etc/apache2/extra/httpd-vhosts.conf:35)
Syntax OK
如果 conf 文件有任何问题,它会告诉你错误行,例如
sh-3.2# apachectl -S
Syntax error on line 33 of /private/etc/apache2/extra/httpd-vhosts.conf:
CustomLog takes two or three arguments, a file name, a custom log format string or format name, and an optional "env=" clause (see docs)
确保您的 vhosts.conf 文件具有真实配置。
【讨论】:
谢谢!这帮助我解决了一个问题。奇怪的是,apache 错误日志中没有提到语法错误,但是运行语法检查会突出显示一些隐藏字符,这些字符在我粘贴某人通过 iChat 发送给我的配置时一定会出现。 尽管这很容易,但它解决了我的问题。我刚刚遇到语法错误,“apachectl restart”显然没有说明任何内容。【参考方案2】:我在使用 OS X Lion 时遇到了完全相同的问题。我通过将“::1 myhost.dev”添加到 /etc/hosts 来修复它:
127.0.0.1 myhost.dev
::1 myhost.dev
顺便说一句,::1 还修复了一个错误,该错误使 Mac 提供的虚拟主机上的页面加载非常缓慢。
【讨论】:
我花了太多时间查看我的 /etc/hosts、httpd-vhosts.conf、apachectl -S、apache 错误日志等……这解决了它!你摇滚! 谁能解释为什么这可以解决问题? 不知道。也许 OSX 正在使用 ipv6 作为环回接口?【参考方案3】:我遇到了同样的问题,并注意到ServerRoot "/usr"
的设置如图所示,并且在 10.7 升级后设置不正确。 httpd.conf 文件仍在 /etc/apache2 下,但其中的此设置指向错误的位置。一旦我通过更改为ServerRoot "/etc/apache2"
解决了这个问题,我之前的所有虚拟主机配置都会正确获取。
我还必须通过取消注释第 477 行来重新启用虚拟主机,如此处提到的 http://brettterpstra.com/fixing-virtual-hosts-and-web-sharing-in-mountain-lion/ 直到我解决了上面的路径问题之后才开始生效。
【讨论】:
【参考方案4】:您使用的是 HTTP 代理吗?如果是这样,请为 myApplication.dev 和 myApplication2.dev 设置一个例外。
我的意思是,问题“服务器 mot found”意味着您的浏览器无法找到主机“myapplication.dev”的 IP 地址。这可能是因为您使用的是 http 代理,可能是您的托管公司配置的代理。在任何情况下,您甚至都无法访问服务器,因此您根本无法尝试虚拟主机配置。
要尝试虚拟主机配置,您可以在终端窗口中使用 telnet 并直接与服务器进行 HTTP 通信,如下所示:
yourmacbox:~ yourname$ telnet 127.0.0.1 80
您应该会看到以下文字:
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
然后你输入
GET / HTTP/1.0
Host: myApplication.dev
现在,希望您能看到来自您的网络服务器的一些响应。这表明一旦你可以连接到它,虚拟主机就可以工作了。
【讨论】:
我只有一台标准配置的普通 MacBook Pro。所以没有配置 HTTP 代理。还是你的意思是别的? 我也有同样的问题。我能够使用Host:
这个技巧和telnet
来获得预期的响应。虽然我必须输入 Control-D 才能完成请求。我可以ping
主机,所以/etc/hosts
中的条目是正确的,但我仍然无法在浏览器中访问它。我认为没有代理正在运行,有什么方法可以从命令行检测到它?
代理不必在您自己的系统上运行 - 可能是您的互联网提供商有一个设置,使您的网络浏览器使用提供商的代理。您可以在浏览器的首选项中进行检查,通常在网络设置中的某处。
嗯。即使我用lynx
尝试它也会发生这种情况,我会惊讶地发现注意到操作系统代理设置。但是感谢telnet
的技巧,它至少让我确认应用程序正在运行,即使我无法根据需要访问它。我可以t do
telnet [hostname] 80` 是不是很奇怪?好像 Apache 没有监听 *,但它似乎在配置中……
如果您不能远程登录“主机名”,那么您的 DNS 设置不起作用,因为您的应用程序都找不到主机名。 (是的,lynx 确实理解 http 代理 - 如果您从 ISP 分配了一个代理,它将最终出现在您的环境变量中,并且 lynx 将使用它。)以上是关于VirtualHosts 在 Mac OS 10.7 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥mac升级之后,升级成mac OS Sierra 10.12.1,我的parallels Desktop就启动不了,需要重新安装吗?
安装 Mac OS X Yosemite (Mac OS 10.10) 后 Eclipse 无法启动
mac os x10.10批量重命名教程:os x 10.10批量修改文件名步骤