Redis 接続エラー(Connection refused/タイムアウト)原因と対応

  • URLをコピーしました!

Redis を利用していると、アプリケーションからの接続時に 「Connection refused」「Connection timed out」 が出ることがあります。
これらは原因が複数あり、解決方法も異なります。

本記事では、原因ごとに確認方法と解決手順を整理して解説します。

目次

主な原因一覧

  1. Redis サービスが起動していない
  2. bindprotected-mode 設定により外部接続できない
  3. ファイアウォールやセキュリティグループでポート(6379)が閉じている
  4. 認証エラー(パスワード設定)
  5. ネットワーク遅延や接続数過多によるタイムアウト

原因と解決方法

1. Redis サービスが起動していない

確認方法

systemctl status redis
状態出力例
正常active (running)
異常inactive (dead) / failed

解決方法

サービスを起動/自動起動設定:

sudo systemctl start redis
sudo systemctl enable redis

失敗する場合はログ確認:

journalctl -u redis

2. 設定制限(bind / protected-mode)

Redis はデフォルトでローカル (127.0.0.1) からしか接続できません。外部接続が必要な場合は設定を修正します。

確認方法

grep -E "bind|protected-mode" /etc/redis/redis.conf
設定外部接続可否
bind 127.0.0.1protected-mode yes外部から接続不可
bind 0.0.0.0protected-mode no外部から接続可能

解決方法

/etc/redis/redis.conf を編集:

bind 0.0.0.0
protected-mode no

再起動:

sudo systemctl restart redis

⚠ セキュリティ上、外部公開時は必ずパスワード認証やファイアウォール制御を行うこと。

3. ファイアウォール/セキュリティグループでブロック

確認方法

ss -ltnp | grep 6379
  • LISTEN が出力されるのに接続できない場合 → ファイアウォールの可能性

iptables 確認:

sudo iptables -L -n | grep 6379

解決方法

iptables の場合:

sudo iptables -A INPUT -p tcp --dport 6379 -j ACCEPT

firewalld の場合:

sudo firewall-cmd --add-port=6379/tcp --permanent
sudo firewall-cmd --reload

クラウド環境(AWS, GCP など)ではセキュリティグループ/VPC ファイアウォールを確認。

4. 認証エラー(パスワード設定)

確認方法

アプリケーションから接続時に以下のエラーが出る:

(error) NOAUTH Authentication required

解決方法

パスワードを設定する場合(redis.conf):

requirepass yourpassword

接続時は:

redis-cli -a yourpassword

5. ネットワーク遅延や接続数過多によるタイムアウト

確認方法

外部から接続テスト:

redis-cli -h <host> -p 6379
  • 遅延が大きい場合は timeout が発生する

解決方法

アプリケーション側で timeout 設定を調整。
例(Python / redis-py):

import redis
r = redis.Redis(host='localhost', port=6379, password='yourpassword', socket_timeout=5)

まとめ

  • Connection refused → サービス未起動 or 設定ミス(bind/protected-mode)
  • 接続できるが外部から不可 → ファイアウォールやセキュリティグループ
  • NOAUTH エラー → パスワード設定ミス
  • タイムアウト → ネットワーク環境/timeout 設定見直し

原因ごとに確認コマンドと解決策を対応づけることで、トラブルシューティングがスムーズに進みます。

目次