为什么我不能在Ubuntu 9.04服务器上从外部访问我的CouchDB实例?

更新:我现在正在工作。 Jim Zajkowski的回答帮助我检测到我的/etc/init.d/couchdb重新启动调用实际上没有重新启动实例。 在我手动杀死了CouchDB进程并启动了一个新的实例之后,它启动了所需的BindAddress更改。

我已经通过安装CouchDB

aptitude安装couchdb

从我的服务器,我可以通过连接

telnet localhost 5984

并执行RESTful命令。 当我尝试从我们的networking上的另一台机器或从我们networking外部的一台机器访问服务器时,出现连接重置错误。 我已经在路由器上设置了端口转发,而服务器可以通过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 

我configurationcouch.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 

我仍然无法连接,即使从局域网上的另一台机器。

netstat -an | grep 5984是什么? netstat -an | grep 5984说? 它是说127.0.0.1:5984还是*:5984 ? 如果是127.0.0.1 ,那么需要将couchdb设置为侦听所有接口。

您必须更改/etc/couchdb/default.ini中的bind_address。 然后重新启动服务,然后重试。

我注意到,为了这个工作,你必须手动杀死正在运行的erlang进程。 ps ax | grep beam ps ax | grep beam应该揭示erlang过程,你应该在输出中的某个地方得到0:00 /usr/lib/erlang/erts的行。 如果你杀了这个进程,然后运行/etc/init.d/couchdb restart那么新的configuration文件将被加载。

在家用PC / Mac上运行这个命令:

 ssh -L 5984:localhost:5984 YOUR-SERVER-IP-HERE 

接下来在你的浏览器中打开localhost:5984 / _utils …它适用于我

我遇到过这个问题,而且我的问题最终成了,显然,我的Ubuntu安装已经安装了couchdb。 我一直在编辑/ etc / couchdb下的configuration文件,但是运行的configuration文件实际上是从/ usr / local / etc / couchdb中取出configuration文件。

提示是/ etc / couchdb中的configuration提到沙发0.10,但是我刚刚安装了1.0.1。

configuration文档 :

bind_address

如果你从被褥configuration面板改变它,你不必做任何事情(重新启动数据库等):

在这里输入图像描述

在更改默认的bind_address之前:

 peter@earth:~/$ netstat -an | grep 5984 tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN 

更改为0.0.0.0后:

 peter@earth:~/$ netstat -an | grep 5984 tcp 0 0 0.0.0.1:5984 0.0.0.0:* LISTEN 

注意非专业人士:无法访问您的计算机(通常是本地networking之外的任何设备)仍然无法访问您的计算机(CouchDB或其他任何设备)。

iptables -L -n -v会显示你当前的防火墙规则。 看看是否有一个数据包在达到你的规则之前被丢弃。