关于memcache客户端无法连接的问题
memcached

今天我在虚拟机上架设一个lamp环境,按照往常那样,装上memcache,在服务器上telnet是正常的,可是在web端死活都连接不上,下面是测试代码
$mem = new Memcache; $mem->connect("127.0.0.1", 11211) or die('fail'); $mem->set(‘key’,'This is a test!’, 0, 60); $val = $mem->get(‘key’); echo $val; ?>
通过终端运行,是可以能得到This is a test的结果,但是通过web一直得到的都是fail
这个错误还真没碰到过,所以特意纪录下来。
开启php报错信息
ini_set('display_errors', 1); error_reporting(E_ALL);
接着运行web端,抓取到这样的错误
Notice: memcache_connect(): Server 127.0.0.1 (tcp 11211, udp 0) failed with: Permission denied (13)
百度上找不到相关信息,不过google强大很多,得知这是selinuxd的问题,
selinux是一套linux的安全系统,它指定了应用程序可以访问的磁盘文件、网络端口等等。
如果装有selinux,那么默认的selinux会阻止memcache程序访问11211端口,所以必须对selinux进行配置才行。
方法1: 临时降低selinux运行级别,以便我们进行测试
命令:setenforce [Enforcing | Permissive]
Enforcing表示不允许违反策略的操作
Permissive表示允许违反策略的操作,但会记录下来
我们使用 setenforce Permissive
方法2: 修改selinux配置文件,关闭selinux
编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled
方法3: 修改selinux的http策略,使得httpd进程可以访问网络,这样也就可以使用memcache了
命令:setsebool -P httpd_can_network_connect true
参数P的意思是保持设置的有效性,这样在重启之后这个设置依然有效,不会改变
我采用的是改/etc/selinux/config SELINUX=0 重启后成功