Mac OS X Mountain Lion 在共享系统首选项菜单中没有 Web 共享框。网络上详细讨论了 Apache 服务器的可用性,并且可以在命令行中手动打开它,或者使用方便的首选项窗格。这在计算机处于唤醒状态时有效。但是,当我的计算机进入睡眠状态时,服务器停止工作,即使在节能器首选项窗格中选中了唤醒网络访问。从 Bonjour 上的讨论中,我发现这个问题可能是由于 Apache 未在 Bonjour 中注册而导致的。这听起来可能吗?如果不是,请提出一些建议。连接是通过有线以太网进行的。
如果使用 Bonjour 注册是个问题,我想知道如何注册它。您对 dns-sd 给出了很好的描述,命令描述为“dns-sd -R 名称类型域端口 [TXT...](注册服务)”,但我不知道“名称”或“类型”应该使用什么,也不知道域的格式。我尝试了一些 dns-sd -B 搜索,但没有找到可以用作模型的东西,它也没有显示在 Bonjour 浏览器中。
任何建议,将不胜感激。
答案1
这个问题的正确解决方案(正如@Zoredache 指出的那样)是将服务器设置为永不休眠。也许有办法将其设置为按需唤醒,但速度会很慢、过于复杂,并且可能不可靠。
现在关于“网络访问唤醒”:它不会因为任何旧的网络访问而唤醒,而是在收到特殊格式的“魔法包”告诉它醒来。传入的 HTTP 请求不是这种格式,所以它们不会起作用。(注意:实际上,启动 HTTP 会话的 TCP SYN 数据包必须采用这种格式……但即使这样也行不通,因为您的计算机在睡眠状态下不会响应 ARP,因此路由器不知道如何向其发送 SYN……)
ABonjour 睡眠代理提供了一种可能的解决方法(尽管如上所述,它会很慢等)。如果您的本地网络上有提供睡眠代理服务的设备,Mac 可以在进入睡眠状态时向代理注册其 Bonjour 通告的服务。当它处于睡眠状态时,代理会通过 Bonjour 通告您的服务,并代表您的计算机响应 ARP。当收到针对您的某项服务的请求(实际上是 SYN 数据包)时,代理会发送一个魔术数据包来唤醒您的计算机,然后将传入的连接转交给您的计算机。
我还没有测试过,但我的理解是,要让它工作,你需要一个提供 Bonjour 睡眠代理服务的设备(尽管显然有些 Mac 已将其内置到以太网接口中),然后使用 Bonjour 在端口 80 上注册一个服务:
dns-sd -R "some arbitrary name" _http._tcp local 80 &
请注意,“&”在后台运行;dns-sd 程序必须保持运行才能保持注册有效。另一种可能性是编辑 launchd .plist 文件,让 apache 创建 Bonjour 注册。但我不会担心这个,因为无论如何这都不是正确的解决方案;正确的解决方案是首先不要让服务器休眠。