Назад | Перейти на главную страницу

Почему я не могу получить доступ к своему экземпляру CouchDB извне на сервере Ubuntu 9.04?

Обновить: Теперь он работает. Ответ Джима Зайковски помог мне обнаружить, что мой /etc/init.d/couchdb вызовы reboot фактически не перезагружали экземпляр. После того, как я вручную завершил процессы CouchDB и запустил новый экземпляр, он получил необходимое изменение BindAddress.

Я установил CouchDB через

aptitude установить couchdb

Со своего сервера я могу подключиться через

локальный telnet 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

Я все еще не могу подключиться, даже с другого компьютера в локальной сети.

Что значит netstat -an | grep 5984 сказать? Это говорит 127.0.0.1:5984 или *:5984? Если это 127.0.0.1, то нужно настроить couchdb для прослушивания любого из интерфейсов.

Вам необходимо изменить bind_address в /etc/couchdb/default.ini. Затем перезапустите службу и попробуйте еще раз.

Я заметил, что для того, чтобы это сработало, вы должны по какой-то причине вручную убить запущенный процесс erlang.ps ax | grep beam должен раскрыть процесс erlang, вы должны получить что-то вроде 0:00 /usr/lib/erlang/erts где-то на выходе. Если вы убьете этот процесс, а затем запустите /etc/init.d/couchdb restart будет загружен новый файл конфигурации.

На домашнем ПК / Mac выполните эту команду:

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

затем откройте в браузере localhost: 5984 / _utils ... У меня работает

Документация по конфигурации:

Если вы измените его из панели конфигурации Futon, вам больше не придется ничего делать (перезагружать db и т. Д.):

Перед изменением 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

Обратите внимание на не-гуру: компьютеры, которые не могут получить доступ к вашему (обычно все, что находится за пределами вашей локальной сети), по-прежнему не смогут получить доступ к вашему компьютеру (CouchDB или что-то еще).

Я столкнулся с этим, и моя проблема в том, что, по-видимому, couchdb уже был установлен в моей установке Ubuntu. Я редактировал файлы конфигурации в / etc / couchdb, но тот, который был запущен, фактически извлекал конфигурацию из / usr / local / etc / couchdb.

Подсказкой было то, что в конфигурациях в / etc / couchdb упоминается couch 0.10, но я только что установил 1.0.1.

iptables -L -n -v покажет вам текущие правила брандмауэра. Посмотрите, есть ли тот, который отбрасывает эти пакеты, прежде чем он попадет в ваше правило.