新RHEL服务器:Redis可通过redis-cli连接,但PHP连接提示权限拒绝
PHP连接Redis提示权限拒绝的排查方案
问题背景
新部署的RHEL服务器上,已经装好Redis和php-pecl-redis6扩展,用redis-cli能正常连接Redis服务,但PHP执行$redis->connect('localhost', 6379);时,抛出RedisException异常提示权限拒绝,端口确认无误。
可能的原因
- SELinux权限限制:RHEL默认启用SELinux,大概率是它阻止了PHP进程连接Redis端口。
- Redis绑定地址限制:Redis配置里的
bind参数如果只绑定了特定IP,未包含127.0.0.1,PHP用localhost连接就会被拒绝。 - PHP进程权限不足:运行PHP的用户(比如apache、nginx、php-fpm用户)没有访问Redis网络端口或套接字的权限。
- 防火墙规则拦截:虽然
redis-cli能连接,但防火墙可能对PHP进程的访问做了针对性限制。
解决方案
- 调整SELinux策略
先临时关闭SELinux测试:
如果问题解决,添加永久规则放行:setenforce 0- 用Apache运行PHP,执行:
setsebool -P httpd_can_network_connect on - 用Nginx+PHP-FPM运行PHP,执行:
setsebool -P httpd_can_network_connect on setsebool -P httpd_can_network_connect_db on
- 用Apache运行PHP,执行:
- 修正Redis绑定配置
打开Redis配置文件/etc/redis.conf,检查bind参数:
改为仅允许本地连接:
或允许所有地址连接:bind 127.0.0.1
修改完成后重启Redis服务:bind 0.0.0.0systemctl restart redis - 检查PHP进程权限
用ps aux | grep php-fpm(或对应运行PHP的进程命令)查看运行PHP的用户,确保该用户能访问Redis的6379端口;如果用unix套接字连接Redis,需保证套接文件的权限对该用户开放。
内容的提问来源于stack exchange,提问作者Fibericon
相关产品推荐
相关产品推荐

