Redis を利用していると、アプリケーションからの接続時に 「Connection refused」 や 「Connection timed out」 が出ることがあります。
これらは原因が複数あり、解決方法も異なります。
本記事では、原因ごとに確認方法と解決手順を整理して解説します。
目次
主な原因一覧
- Redis サービスが起動していない
bind
やprotected-mode
設定により外部接続できない- ファイアウォールやセキュリティグループでポート(6379)が閉じている
- 認証エラー(パスワード設定)
- ネットワーク遅延や接続数過多によるタイムアウト
原因と解決方法
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.1 + protected-mode yes | 外部から接続不可 |
bind 0.0.0.0 + protected-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 設定見直し
原因ごとに確認コマンドと解決策を対応づけることで、トラブルシューティングがスムーズに進みます。