Чому я не можу отримати доступ до свого екземпляра CouchDB зовні на сервері Ubuntu 9.04?


27

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

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

здатність встановити couchdb

З мого сервера я можу підключитися через

telnet localhost 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 | греп 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

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


Ця проблема все ще існує в Ubuntu 12. Ви могли б подумати, що технічне обслуговування пакета вже зараз це виправить?
Марк Е. Хааз

Відповіді:


33

Що netstat -an | grep 5984говорить? Це говорить 127.0.0.1:5984чи *:5984? Якщо це так 127.0.0.1, то couchdb потрібно встановити для прослуховування будь-яких інтерфейсів.


3
"tcp 0 0 127.0.0.1.19898 0.0.0.0:* LISTEN" - результат. Я налаштував couch.ini так, щоб він був "BindAddress = 0.0.0.0" і перезавантажився, тому його слід слухати на всіх інтерфейсах. Ось дивна частина, хоча: коли я запускаю "sudo /etc/init.d/couchdb stop", а потім запускаю netstat, я все ще бачу вищезазначений запис. Схоже, CouchDB насправді зовсім не зупиняється. Це може пояснити мою проблему, оскільки це означає, що вона, ймовірно, ніколи не перезавантажувалась і, ймовірно, ніколи не піднімала зміну
BindAddress

3
так, я працював як фоновий процес. він працював для мене, коли я вбив couchdb за допомогою couchdb -d і перезапустив його
Крістіан

2
Ця відповідь мені допомогла! Я хотів поділитися тим, що ви можете легко змінити цей параметр за допомогою веб-інтерфейсу Futon, не потребуючи пошуку та редагування фактичного конфігураційного файлу на диску . Просто перейдіть до 127.0.0.1:5984/_utils/config.html(або еквівалентної URL-адреси для вашої установки) та двічі клацніть значення параметра, відредагуйте, а потім натисніть зелену галочку.
Стів Беннер

@SteveBenner На жаль, 127.0.0.1.19898/_utils/config.html нічого не приносить!
Dr.jacky

@rcampbell Де знаходиться couch.ini ?!
Dr.jacky


7

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


те саме для мене - лише після вбивства процесу проміння, потім зробіть couchdb -d, а потім зупинку / запуск служби .. чи вступила в дію нова настройка.
Боббі

4

На домашньому ПК / Mac виконайте цю команду:

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

наступне відкриття у вашому браузері localhost: 5984 / _utils ... Це працює для мене


4

Документи конфігурації :

bind_address

Якщо ви зміните його на панелі налаштувань 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 або що-небудь ще).


Хоча ця відповідь досить стара, вона, здається, призводить до потрібного місця. Футон був замінений на Фокстон, але я думаю, що люди отримають суть зміни bind_address у Конфігурації.
Скотт Біггс

2

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

Підказка полягала в тому, що конфігуратори в / etc / couchdb згадали couch 0.10, але я щойно встановив 1.0.1.


1

iptables -L -n -vпокаже ваші поточні правила брандмауера. Подивіться, чи є той, хто скидає ці пакети, перш ніж потрапити до вашого правила.


У таблиці немає правил DENY. В іншому випадку є три ACCEPT, один для 5984 і два дублікати для 8080. Я не впевнений, чому є два точні дублікати для 8080, і коли я намагаюся вдарити Tomcat (працює на 8080) зовні нашої мережі, це не вдається, навіть хоча машини в нашій мережі можуть вдало вдарити Tomcat.
rcampbell

Розум показує вихід? При необхідності вийміть свій IP-адресу.
Білл Вайс

Як щодо запуску lsof -i -n -P | grep LISTENта публікації цього? Ви шукаєте процес CouchDB, і для чого він пов'язаний. Якщо це так 127.0.0.1:5984, вам потрібно налаштувати CouchDB для прослуховування зовнішніх з'єднань. Якщо це *:5984добре, принаймні CouchDB налаштований правильно :)
Білл Вайс

Привіт Білл, вибач за те, що не реагував раніше. Я опублікував вихідний дамп, про який ви запитали.
rcampbell

Як щодо цього lsofвиходу?
Білл Вайс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.