我正在运行centos 6.使用apache处理php和nginx来处理脚本图像和css
我已经安装了memcached服务器。
PORT="11211"
USER="memcached"
MAXCONN="4096"
CACHESIZE="512"
OPTIONS="-l 127.0.0.1"
我还安装了php的模块。
我创建了一个新的php文件
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
我检查了memcached状态并且它正在运行 我总是得到“无法联系” 我试图将值从'127.0.0.1'更改为'localhost' - 仍然无效。
$memcache = new Memcache();
$memcache->addServer('127.0.0.1', 11211) or die ("Could not connect");
var_dump($memcache->getExtendedStats());
$memcache->set('key', 'hello world', false, 60);
echo $memcache->get('key');
//$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
输出
array(1) { ["127.0.0.1:11211"]=> bool(false) }
connect和addServer有什么不同的做法?哪种方法最好?
但我没有得到Hello World
有关代码和此问题的更多更新..
phpinfo 正在显示memcached 后续代码var_dump($ memcache->获得( '键'));给出
bool(false)
为什么我应该使用 addServer 而不是连接?
更新代码
$memcache = new Memcache;
$memcache->addServer('localhost', 11211);
echo $memcache->getServerStatus('localhost', 11211);
output : 1
//$memcache->set('key', 'hello world') or die("failed to store data");
output : failed to store data
更多细节
getsebool httpd_can_network_memcache
返回关闭
它应该继续吗?
Notice: Memcache::connect(): Server 127.0.0.1 (tcp 11211, udp 0) failed with: Permission denied (13)
答案 0 :(得分:7)
如评论中所述,您似乎正在运行安全增强型Linux(SELinux),它在内核级别添加了额外的安全层。根据我的经验和用法,我发现SELinux在某些服务周围添加了一个强制字段,这样他们就无法访问系统上的特定资产。例如,如果我想从/home/src/web
提供html内容,我必须告诉系统httpd服务可以访问/home/src/web
路径中的内容。为此,我将发出以下命令:
$ -> setsebool -P httpd_enable_homedirs 1
基本上,为了允许服务之间的交叉通信,您必须允许通过策略进行此类访问,就像“锁定”防火墙以允许访问特定端口一样,除了SELinux您不授予对端口的访问权限,而是您准许访问系统的另一部分或服务。幸运的是,我们有几个内置的策略,我们可以使用上面的setsebool
构造,而不是试图定义我们自己的策略,这可能是一个痛苦。有关SELinux的更完整说明,请查看wikipedia page。
现在回答您的具体问题:
为什么我应该使用addServer而不是connect?
addserver()
将允许您将多个ips(或主机名)添加到一个列表中,从该列表中假定存在缓存值,即一个memcache服务器池。而connect()
只允许您连接到指定的单个服务器。
getsebool httpd_can_network_memcache,它会返回,是否应该返回?
是的,看起来打开此特定设置将允许您连接到启用了SELinux的内存缓存服务器,但是在我的生产服务器上,我仍然将其设置为关闭,但具有以下设置:
$ -> setsebool -P httpd_can_network_connect 1
我相信,任何一个设置都可以实现目标,但是如果你在另一个主机上有一个memcache服务器,那么httpd仍然可以访问它。
这是一个体面的write-up针对SELinux的允许httpd服务访问其他服务。