Linux

為什麼我不能在 Ubuntu 9.04 伺服器上從外部訪問我的 CouchDB 實例?

  • January 14, 2016

**更新:*我現在開始工作了。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。然後重新啟動服務並重試。

引用自:https://serverfault.com/questions/79453