0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel + Redis】初期構築時にsessionがredisから読み取れない原因と対処法

Posted at

要約

Laravel(v11/v12)で408タイムアウトする原因は
config/database.phpの'scheme'が未指定だった
環境:SESSION_DRIVER=redis(Valkey/Redis)

現象

Laravel 12で .env に以下のように設定して、Redis(正確にはAWSの Valkey Serverless)をセッション管理に使おうとしたところ、リクエストがタイムアウト(408) する問題が発生。

SESSION_DRIVER=redis
REDIS_CLIENT=phpredis
REDIS_HOST=valkey1-xxxx.cache.amazonaws.com
REDIS_PORT=6379
REDIS_USERNAME=my-user
REDIS_PASSWORD=secret
REDIS_TLS=true
REDIS_SCHEME=tls
REDIS_DB=0
REDIS_CACHE_DB=1
SESSION_CONNECTION=default

tinkerではcacheをRedisに配置できたとしても、ブラウザからアクセスするとNginxが408を返すだけでLaravelのログにも何も出ない。

原因:config/database.php の 'scheme' => 'tls' を default側に設定していなかった

// これだとSESSION_DRIVER=redisが動かない
'default' => [
    'host' => env('REDIS_HOST'),
    'username' => env('REDIS_USERNAME'),
    'password' => env('REDIS_PASSWORD'),
    'port' => env('REDIS_PORT'),
    'database' => env('REDIS_DB'),
    // ← 'scheme' がないとTLSで接続できない
],

→ Laravelの SESSION_DRIVER=redis は redis.default を使うため、ここに scheme => 'tls' を入れないと Laravel 12 では Redisに接続できず、無限リトライ→タイムアウトになります。

正しい設定例

'redis' => [

    'client' => env('REDIS_CLIENT', 'phpredis'),

    'default' => [
        'host' => env('REDIS_HOST'),
        'username' => env('REDIS_USERNAME'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT'),
        'database' => env('REDIS_DB'),
        'scheme' => 'tls', // ← これが必須!忘れてた
    ],

    'cache' => [
        'host' => env('REDIS_HOST'),
        'username' => env('REDIS_USERNAME'),
        'password' => env('REDIS_PASSWORD'),
        'port' => env('REDIS_PORT'),
        'database' => env('REDIS_CACHE_DB'),
        'scheme' => 'tls', // cache側も必須!
    ],

],

そのほか注意点

  • .env に SESSION_CONNECTION=default を入れておくと redis.default を明示的に使ってくれるのでより安全
  • Laravel 12からは Redis の接続管理が厳密になっている
  • phpredis + TLS 利用時は設定漏れに特に注意

まとめ

Laravelでは、phpredis + TLS構成で Redis に接続する場合、'scheme' => 'tls' の指定が必須です。これを省略すると、セッション取得時にLaravelがハングして応答が返らなくなります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?