Warum kann ich auf meinem Ubuntu 9.04-Server nicht extern auf meine CouchDB-Instanz zugreifen?


27

Update: Ich habe es funktioniert jetzt. Durch die Antwort von Jim Zajkowski konnte ich feststellen, dass meine /etc/init.d/couchdb-Neustartaufrufe die Instanz nicht neu starteten. Nachdem ich die CouchDB-Prozesse manuell beendet und eine neue Instanz gestartet habe, hat sie die erforderliche BindAddress-Änderung übernommen.

Ich habe CouchDB über installiert

aptitude installiere couchdb

Von meinem Server aus kann ich eine Verbindung über herstellen

telnet localhost 5984

und führen Sie RESTful-Befehle aus. Wenn ich versuche, von einem anderen Computer in unserem Netzwerk oder von einem Computer außerhalb unseres Netzwerks auf den Server zuzugreifen, wird der Fehler " Die Verbindung wurde zurückgesetzt" angezeigt. Ich habe die Portweiterleitung auf dem Router eingerichtet und der Server ist ansonsten über Apache, Tomcat, SSH usw. erreichbar.

Ich bin neu in Linux / Ubuntu, daher war ich mir nicht sicher, ob eine Standard-Firewall die Verbindung blockiert. Deshalb habe ich Folgendes ausgeführt:

iptables -A INPUT -p tcp --dport 5984 -j ACCEPT

aber es hat nicht geholfen.

Hier ist der Speicherauszug von 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

Ich gehe davon aus, dass die für 5984 übertragenen Bytes auf meine localhost-Verbindung zurückzuführen sind.

Hier ist der Dump von netstat -an | grep 5984

tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN

Ich konfigurierte couch.ini „BindAddress = 0.0.0.0“ und neu gestartet, so dass es sollte auf allen Schnittstellen lauschen. Wenn ich "sudo /etc/init.d/couchdb stop" und dann "netstat" ausführe, wird der obige Eintrag weiterhin angezeigt. Es sieht so aus, als würde CouchDB überhaupt nicht anhalten. Dies kann mein Problem erklären, da es bedeuten kann, dass CouchDB nie neu gestartet wurde und die BindAddress-Änderung nie übernommen hat.

Ich habe den CouchDB-Prozess manuell beendet und erneut gestartet. Nun zeigt 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

Ich kann mich trotzdem nicht verbinden, auch nicht von einem anderen Rechner im LAN.


Dieses Problem existiert immer noch in Ubuntu 12. Sie würden denken, der Paketbetreuer hätte dies inzwischen behoben?
Mark E. Haase

Antworten:


33

Was netstat -an | grep 5984heißt das? Heißt es 127.0.0.1:5984oder *:5984? Wenn dies der 127.0.0.1Fall ist, muss couchdb so eingestellt sein, dass beide Schnittstellen abgehört werden.


3
"tcp 0 0 127.0.0.1:5984 0.0.0.0:* LISTEN" ist das Ergebnis. Ich habe die couch.ini so konfiguriert, dass sie "BindAddress = 0.0.0.0" hat und habe neu gestartet, so dass sie auf allen Schnittstellen lauscht. Hier ist jedoch der seltsame Teil: Wenn ich "sudo /etc/init.d/couchdb stop" und dann "netstat" ausführe, sehe ich immer noch den obigen Eintrag. Es sieht so aus, als würde CouchDB überhaupt nicht anhalten. Dies kann mein Problem erklären, da es bedeutet, dass es wahrscheinlich nie neu gestartet wurde und wahrscheinlich nie die BindAddress-Änderung übernommen hat
rcampbell 30.10.09

3
Ja, ich lief als Hintergrundprozess. es hat bei mir funktioniert, als ich couchdb mit couchdb -d getötet und neu gestartet habe
Kristian

2
Diese Antwort hat mir geholfen! Ich wollte mitteilen, dass man diese Einstellung einfach über die Futon-Weboberfläche ändern kann, ohne die eigentliche Konfigurationsdatei auf der Festplatte suchen und bearbeiten zu müssen . Navigieren Sie einfach zu 127.0.0.1:5984/_utils/config.html(oder einer entsprechenden URL für Ihr Setup), doppelklicken Sie auf den Optionswert, bearbeiten Sie ihn und klicken Sie dann auf das grüne Häkchen.
Steve Benner

@SteveBenner Leider bringt 127.0.0.1:5984/_utils/config.html nichts!
Dr.jacky

@ rcampbell Wo ist die couch.ini ?!
Dr.jacky


7

Ich habe festgestellt, dass Sie den laufenden Erlang-Prozess aus irgendeinem Grund manuell beenden müssen, damit dies funktioniert. ps ax | grep beamSolltest du den Erlang-Prozess aufdecken, solltest du 0:00 /usr/lib/erlang/ertsirgendwo in der Ausgabe etwas in die richtige Richtung bekommen . Wenn Sie diesen Vorgang /etc/init.d/couchdb restartabbrechen und dann ausführen, wird die neue Konfigurationsdatei geladen.


das gleiche gilt für mich - erst nachdem der beam-prozess beendet wurde, dann die couchdb -d und dann service stop / start .. hat die neue einstellung gewirkt.
Bobby

4

Führen Sie auf Ihrem Heim-PC / Mac den folgenden Befehl aus:

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

Als nächstes öffne in deinem Browser localhost: 5984 / _utils ... Es funktioniert bei mir


4

Konfigurationsdokumente :

bind_address

Wenn Sie es im Futon-Konfigurationsfenster ändern, müssen Sie nichts weiter tun (db neu starten usw.):

Bildbeschreibung hier eingeben

Vor dem Ändern der Standard-Bindeadresse:

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

Nach dem Wechsel auf 0.0.0.0:

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

Hinweis für Nicht-Gurus: Computer, die nicht auf Ihren zugreifen können (normalerweise nichts außerhalb Ihres lokalen Netzwerks), können weiterhin nicht auf Ihren Computer zugreifen (CouchDB oder etwas anderes).


Diese Antwort ist zwar ziemlich alt, scheint aber an die richtige Stelle zu führen. Futon wurde durch Fauxton ersetzt, aber ich denke, die Leute werden das Wesentliche darin sehen, die Bind_Adresse in der Konfiguration zu ändern.
Scott Biggs

2

Ich bin auf dieses Problem gestoßen und es stellte sich heraus, dass in meiner Ubuntu-Installation anscheinend bereits couchdb installiert war. Ich hatte die Konfigurationsdateien unter / etc / couchdb bearbeitet, aber die, die ausgeführt wurde, zog die Konfiguration tatsächlich aus / usr / local / etc / couchdb.

Der Tip war, dass die Configs in / etc / couchdb couch 0.10 erwähnten, aber ich hatte gerade 1.0.1 installiert.


1

iptables -L -n -vzeigt Ihnen Ihre aktuellen Firewall-Regeln an. Sehen Sie nach, ob es eine gibt, die diese Pakete verwirft, bevor sie Ihrer Regel entsprechen.


In der Tabelle sind keine DENY-Regeln aufgeführt. Ansonsten gibt es drei ACCEPT, eine für 5984 und zwei Duplikate für 8080. Ich bin mir nicht sicher, warum es zwei exakte Duplikate für 8080 gibt, und wenn ich versuche, Tomcat (läuft auf 8080) außerhalb unseres Netzwerks zu treffen, schlägt dies sogar fehl obwohl Maschinen in unserem Netzwerk Tomcat gut treffen können.
Rcampbell

Darf ich die Ausgabe zeigen? Nehmen Sie Ihre IP heraus, wenn Sie gebraucht werden.
Bill Weiss

Wie wäre es damit, das zu starten lsof -i -n -P | grep LISTENund zu posten? Sie suchen nach dem CouchDB-Prozess und dessen Bindung. In diesem Fall 127.0.0.1:5984müssen Sie CouchDB so konfigurieren, dass externe Verbindungen abgehört werden. Wenn es *:5984gut ist, ist mindestens CouchDB richtig konfiguriert :)
Bill Weiss

Hallo Bill, entschuldige, dass du nicht früher geantwortet hast. Ich habe den Rohdump, den Sie angefordert haben, auf die Frage gepostet.
Rcampbell

Wie wäre es mit dieser lsofAusgabe?
Bill Weiss
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.