Laravel Echo Server连接Redis超时问题求助(Ubuntu 18.04.4)
Laravel 7.x 广播VPS部署Redis连接超时(ETIMEDOUT)问题解决记录
我最近踩了个坑:本地用Laragon 4.0+Redis跑Laravel7.x的广播功能完全正常,但部署到Ubuntu18.04.4+Apache2+Virtualmin的VPS后就掉链子了。Redis本身是没问题的——PING能返回PONG,键值读写正常,重启服务数据也能保留。触发事件广播时queue:work跑的好好的,但启动Laravel Echo Server后,客户端刚连上几秒,控制台就弹出[ioredis] Error: connect ETIMEDOUT的错误。翻了好多资料都没解决,最后靠Redis的Unix Socket配置搞定了,把过程分享给大家。
我的配置情况
.env核心配置
APP_NAME=Testapp APP_ENV=local BROADCAST_DRIVER=redis REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379
Broadcasting.php中的Redis连接配置
'redis' => [ 'driver' => 'redis', 'connection' => 'default', ]
Database.php中的Redis配置
'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'port' => env('REDIS_PORT', '6379'), ] ]
laravel-echo-server.json核心配置
{ "authHost": "127.0.0.1", "database": "redis" }
另外我已经确认防火墙端口是开放的,服务也正常监听端口,但就是出现连接超时的问题。
最终解决办法:改用Redis Unix Socket规避网络问题
把Redis的连接方式从TCP端口改成Unix Socket就解决了,具体操作步骤:
- 先确认Redis配置文件(一般是
/etc/redis/redis.conf)里的Unix Socket相关配置是开启的:- 确保
unixsocket /var/run/redis/redis.sock这行没被注释 - 权限设置比如
unixsocketperm 777(可以根据实际安全需求调整)
- 确保
- 修改Laravel的配置:
- 在.env里添加
REDIS_PATH=/var/run/redis/redis.sock,然后把REDIS_HOST和REDIS_PORT注释掉或者删掉 - 更新Database.php里的default连接配置:
'default' => [ 'path' => env('REDIS_PATH', '/var/run/redis/redis.sock'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'port' => env('REDIS_PORT', '6379'), ]
- 在.env里添加
- 更新laravel-echo-server.json的Redis配置,加上socket路径:
{ "authHost": "127.0.0.1", "database": "redis", "databaseConfig": { "redis": { "socket": "/var/run/redis/redis.sock" } } } - 重启Redis服务、Laravel队列和Laravel Echo Server,之后广播功能就恢复正常了。
这个方法绕开了TCP连接可能出现的网络层面问题(比如VPS内部的端口转发、防火墙隐性拦截或者回环地址的特殊配置),用本地套接字直接通信稳定性更高。
内容的提问来源于stack exchange,提问作者Simone Cabiddu
相关产品推荐
相关产品推荐

