我正在运行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-> get(’key’)); 给
布尔值(false)
为什么我应该使用 addServer 而不是 connect ?
有关代码的更多更新
$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
返回 关闭
它应该继续吗?
注意:Memcache :: connect():服务器127.0.0.1(tcp 11211,udp 0)失败,原因:权限被拒绝(13)
从注释中可以看出,您正在运行增强了安全性的Linux(SELinux),它在内核级别增加了一层额外的安全性。根据我的经验和用法,我发现SELinux在某些服务周围添加了一个力场,因此它们无法访问系统上的特定资产。例如,如果我要从提供HTML内容/home/src/web,则必须告诉系统httpd服务可以访问/home/src/web路径中的内容。为此,我将发出以下命令:
/home/src/web
$ -> setsebool -P httpd_enable_homedirs 1
基本上,要允许服务之间的交叉通信,您必须允许通过策略进行此类访问,就像对防火墙“钉孔”以允许访问特定端口一样,除非使用SELinux,否则您不授予对端口的访问权限,而是授予对系统或服务另一部分的访问权限。对我们来说幸运的是,有一些内置策略可以使用上述setsebool构造,而不是尝试定义自己的策略,这很痛苦。有关SELinux的更完整说明,请查看Wikipedia页面。
setsebool
现在回答您的特定问题:
为什么我应该使用addServer而不是connect?
addserver()将允许您将多个ip(或主机名)添加到假定存在缓存值的列表(即内存缓存服务器池)中。而connect()只能允许您连接到单个指定的服务器。
addserver()
connect()
getsebool httpd_can_network_memcache,它关闭了,应该重新打开吗?
是的,打开此特定设置似乎可以使您连接到启用了SELinux的内存缓存服务器,但是,在我的生产服务器上,我仍然将其设置为off,但具有以下设置:
$ -> setsebool -P httpd_can_network_connect 1
我相信,任何一种设置都可以达到目的,但是通过上述设置,如果您在另一台主机上具有Memcache服务器,httpd仍然可以访问它。
这是关于完善SELinux 的不错的文章,以允许httpd服务访问其他服务。