為什麼我不能在 Ubuntu 9.04 伺服器上從外部訪問我的 CouchDB 實例?
**更新:*我現在開始工作了。Jim Zajkowski 的回答幫助我檢測到我的/etc/init.d/couchdb*重新啟動呼叫實際上並沒有重新啟動實例。在我手動終止 CouchDB 程序並啟動一個新實例後,它獲取了所需的 BindAddress 更改。
我已經通過安裝 CouchDB
aptitude 安裝 couchdb
從我的伺服器,我可以通過
遠端登錄本地主機 5984
並執行 RESTful 命令。當我嘗試從我們網路上的另一台電腦或我們網路外部的電腦訪問伺服器時,我收到連接已重置錯誤。我已經在路由器上設置了埠轉發,並且可以通過 Apache、Tomcat、SSH 等訪問伺服器。
我是 Linux/Ubuntu 的新手,所以我不確定是否有預設防火牆阻止連接,所以我執行:
iptables -A INPUT -p tcp –dport 5984 -j ACCEPT
但這沒有幫助。
這是執行iptables -L -n -v的轉儲
Chain INPUT (policy ACCEPT 2121K packets, 1319M bytes) pkts bytes target prot opt in out source destination 70 3864 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5984 9 1647 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 1708K packets, 1136M bytes) pkts bytes target prot opt in out source destination
我假設顯示為5984傳輸的字節是由於我的本地主機連接。
這是執行netstat -an |的轉儲 grep 5984
tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN
我將couch.ini配置為“BindAddress=0.0.0.0”並重新啟動,因此它應該在所有介面上進行監聽。但是,當我執行“sudo /etc/init.d/couchdb stop”然後執行 netstat 時,我仍然看到上面的條目。看起來 CouchDB 實際上並沒有停止。這可以解釋我的問題,因為這意味著這可能意味著 CouchDB 從未真正重新啟動,也從未獲得 BindAddress 更改。
我手動終止了 CouchDB 程序並再次啟動它。現在 netstat 顯示:
tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:5984 127.0.0.1:35366 TIME_WAIT
我仍然無法連接,即使是從 LAN 上的另一台機器。
說什麼
netstat -an | grep 5984
?它說127.0.0.1:5984
或*:5984
?如果是127.0.0.1
,則需要將 couchdb 設置為偵聽所有介面。
您必須更改 /etc/couchdb/default.ini 中的 bind_address。然後重新啟動服務並重試。