web-dev-qa-db-ja.com

Redis-リモートサーバーへの接続

Ubuntu 10.10サーバーで http://redis.io/topics/quickstart のクイックスタートガイドの手順を使用して、Redisを正常にインストールしました。私はdameonとしてサービスを実行しています(したがって、init.dで実行できます)

サーバーは、内部IPと外部IPを備えたRackspace Clusterの一部です。ホストはポート6379で実行されています(Redisの標準)

以下に示すように、ポート6379からの着信接続を許可するために、iptablesに行を追加しました。

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

別のサーバー上のPHPコードで、ここで新しいRedisサーバーに接続しようとしています。

$this->load->helper("iredis");

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));

これを行うと、常に接続が拒否されます。 redis.confファイルでは、ローカルバインドコマンドがコメントアウトされているため、ローカルホストIP以外でリッスンする必要があります。別のサーバーではなく、ローカルマシン上のデータベースに接続できます。外部IPアドレスと内部IPを試してみましたが、運はありません。

これを機能させるための提案はありますか?

109
gregavola

まず、予想されるIPでリッスンしていることを確認します。

netstat -nlpt | grep 6379

起動/停止の方法によっては、思っていたときに実際にインスタンスを再起動していない場合があります。 netstatは、あなたが考えている場所を聞いているかどうかを教えてくれます。そうでない場合は、再起動して、必ず再起動してください。再起動しても期待した場所でリッスンしない場合は、構成ファイルを確認してください。

確立した後、アクセスしようとしているリモートノードから、あなたが期待する場所をリッスンしています:

redis-cli -h REMOTE.Host ping

また、ローカルホストからそれを試すこともできますが、ホスト名やローカルホストの代わりに、リッスンすることが期待されるIPを使用します。両方の場合に応答してPONGが表示されます。

そうでない場合、ファイアウォールがあなたをブロックしています。これは、ローカルIPTableまたはノード間のファイアウォールのいずれかです。 IPTables構成にロギングステートメントを追加して、6379を超える接続をログに記録し、何が起こっているかを確認できます。また、ローカルおよび非ローカルから同じIPにpingを再試行することは、説明に役立つはずです。ローカルでは応答するがリモートでは応答しない場合は、ノード上のIPテーブルルールの複雑さに応じて、介在するファイアウォールを使用します。

120
The Real Bill

私は同じ問題に悩まされており、前述の答えは私には役に立たなかった(よく書かれていたとしても)。

解決策はこちらです:/etc/redis/redis.confを確認し、デフォルトを必ず変更してください

bind 127.0.0.1

bind 0.0.0.0

次に、サービスを再起動します(service redis-server restart

次に、redisが非ローカルインターフェイスでリッスンしていることを確認します。

redis-cli -h 192.168.x.x ping

(192.168.x.xをIPアドレスに置き換えてください)

重要な注意:いくつかのユーザーが述べたように、これは安全ではないインターネットに公開されているサーバーでこれを設定することです。 redisは、ニーズに合った手段で保護されていることを確認する必要があります。

312
Orabîg

Orabîgによる優れた答えに加えて:

この問題を解決するには、bindセクションを完全に削除し、protected-modenoに設定しました。

#bind 127.0.0.1
protected-mode no

公開されているサーバーでこのメソッドを使用しないでください。

12
deafnull

Orabigは正しいです。

buntu(VirtualBox)で10.0.2.15をバインドしてから、ホストからゲストUbuntuへポート転送を実行できます。

/etc/redis/redis.conf

bind 10.0.2.15

次に、redisを再起動します。

Sudo systemctl restart redis

うまくいく!

3
Michael Qin
  • 自分でredis(apt-get install redis-serverではない)をダウンロードし、上記の提案でredis.confを編集した場合は、rediswithそのような構成:./src/redis-server redis.conf

    • また、サイドノートには、Windows上でvirtualbox vmに接続している場合、redisに接続するための仮想ボックス設定のスクリーンショットが含まれています。

enter image description here

2
Robot70

サーバーのredis構成でtcp-keepaliveを60(0に設定)に設定すると、この問題を解決できました。

0
Saurabh