关于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 重启后成功

2014-11-10 10:01:47

php
php

这是介绍的地方

本文相关标签

推荐应用

友情链接


皖ICP备14007051号-2 关于穆子龙