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を試してみましたが、運はありません。
これを機能させるための提案はありますか?
まず、予想されるIPでリッスンしていることを確認します。
netstat -nlpt | grep 6379
起動/停止の方法によっては、思っていたときに実際にインスタンスを再起動していない場合があります。 netstatは、あなたが考えている場所を聞いているかどうかを教えてくれます。そうでない場合は、再起動して、必ず再起動してください。再起動しても期待した場所でリッスンしない場合は、構成ファイルを確認してください。
確立した後、アクセスしようとしているリモートノードから、あなたが期待する場所をリッスンしています:
redis-cli -h REMOTE.Host ping
また、ローカルホストからそれを試すこともできますが、ホスト名やローカルホストの代わりに、リッスンすることが期待されるIPを使用します。両方の場合に応答してPONGが表示されます。
そうでない場合、ファイアウォールがあなたをブロックしています。これは、ローカルIPTableまたはノード間のファイアウォールのいずれかです。 IPTables構成にロギングステートメントを追加して、6379を超える接続をログに記録し、何が起こっているかを確認できます。また、ローカルおよび非ローカルから同じIPにpingを再試行することは、説明に役立つはずです。ローカルでは応答するがリモートでは応答しない場合は、ノード上のIPテーブルルールの複雑さに応じて、介在するファイアウォールを使用します。
私は同じ問題に悩まされており、前述の答えは私には役に立たなかった(よく書かれていたとしても)。
解決策はこちらです:/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は、ニーズに合った手段で保護されていることを確認する必要があります。
Orabîgによる優れた答えに加えて:
この問題を解決するには、bind
セクションを完全に削除し、protected-mode
をno
に設定しました。
#bind 127.0.0.1
protected-mode no
公開されているサーバーでこのメソッドを使用しないでください。
Orabigは正しいです。
buntu(VirtualBox)で10.0.2.15をバインドしてから、ホストからゲストUbuntuへポート転送を実行できます。
/etc/redis/redis.conf
bind 10.0.2.15
次に、redisを再起動します。
Sudo systemctl restart redis
うまくいく!
サーバーのredis構成でtcp-keepaliveを60(0に設定)に設定すると、この問題を解決できました。