我的家庭網路中有兩台伺服器:第一個是基於 Arm 的 Linux 計算機,在自訂 Debian 3.4.43 核心上運行,第二個是帶有乙太網路屏蔽的 Arduino。
我在linux伺服器上安裝了avahi和apache2,安裝了apache mod-dnssd並配置了以下服務:
afpd.服務:
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=MacPro</txt-record>
</service>
</service-group>
ssh.服務:
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>
並且,在 apache mod_dnssd 沒有我想要的之後,還有 http.service:
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>Cubie Remote</name> ## Name of the service
<service>
<type>_http._tcp</type>
<port>80</port>
</service>
</service-group>
在 Arduino 上,我使用了一個函式庫來進行 Zeroconf。我不會提供詳細信息,但原則上它應該在不同的伺服器上宣傳類似於 http.service 的服務,具有相同的類型和端口,但名稱不同。
到目前為止,一切順利,以下事情有效(有或沒有廣告的 http 服務):
- 我在 iMac Finder (OS X 10.9.1) 上找到了 afp 服務,甚至找到了正確的 MacPro 圖標,我可以連接到它
- 我還可以使用 server1.local ssh 到 linux 伺服器
- 我可以使用 Firefox 和 Chrome 開啟網站 server1.local 和 server2.local
- 我也可以在 iPhone 和 iPad (Safari) 上的 URL 下開啟這些網站
但:在我的 iMac 上,Safari 7.0.1
- 我在 Bonjour 收藏夾中找到了廣告的網路服務
- 當我單擊其中一個時,相應的 URL 會出現在地址欄中(帶有尾隨“點”,但我聽說這是正確的)
- 頁面卡住,一段時間後出現一條訊息“Safari 無法連接到伺服器”
- 當我在網址列手動輸入 server1.local 時也會發生同樣的情況
- 我還在Bonjour 收藏夾欄中找到了我的路由器,但當我刪除尾隨點時,Safari 只能連接到它(我的猜測是,它然後使用路由器的“dns”信息而不是單播/多播Zeroconf 訊息)
- 當我在網址列中輸入 IP 位址或將伺服器手動新增至 iMac 上的 /etc/hosts 檔案時,所有網站都可以正常運作
看起來 Safari 似乎需要一種特殊的乾淨 http 或某種授權,以便能夠連接到所宣傳的服務。有什麼想法這可能會導致什麼?或者我只是盲目的,Safari 和/或安全偏好設定中有一個明顯的複選框需要勾選?
不過,這對 Safari 來說似乎非常獨特,因為在 Chrome 和 Firefox 中可以正確解析名稱(並且在終端機中使用 ping、ssh 等,我甚至可以遠端登入連接埠 80 上的伺服器)
答案1
好的,所以我在這裡回答我自己的問題。我安裝了 Sophos 防毒軟體,因為我很偏執;) 我看到一些日誌條目與 iMac 上的 Web 服務並不真正相關。長話短說,在 Sophos Anti Virus 中禁用 Web 保護使上述現象立即消失...