memcache for php-无法连接

memcache for php-无法连接,php,linux,apache,nginx,Php,Linux,Apache,Nginx,我在运行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

我在运行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) } 没有更多的细节

getsebool httpd_can_network_memcache getsebool httpd\u can\u网络\u memcache 它返回关闭

它应该回来吗

Notice: Memcache::connect(): Server 127.0.0.1 (tcp 11211, udp 0) failed with: Permission denied (13) 注意:Memcache::connect():服务器127.0.0.1(tcp 11211,udp 0)失败,原因是:权限被拒绝(13)
正如注释中所显示的,您似乎正在运行安全增强型Linux(SELinux),它在内核级别增加了一层额外的安全性。在我的经验和使用中,我发现SELinux在某些服务周围添加了一个force字段,因此它们无法访问系统上的特定资产。例如,如果我想从
/home/src/web
提供html内容,我必须告诉系统httpd服务可以访问
/home/src/web
路径中的内容。为此,我将发出以下命令:

$ -> setsebool -P httpd_enable_homedirs 1
基本上,为了允许服务之间的交叉通信,您必须通过一个策略来允许这种访问,就像“锁定”防火墙以允许访问特定端口一样,除非使用SELinux,您不授予对端口的访问权限,而是授予对系统另一部分或服务的访问权限。幸运的是,我们可以使用上面的
setsebool
构造几个内置策略,而不是试图定义我们自己的策略,这可能是一种痛苦。有关SELinux的更完整解释,请查看

现在回答您的具体问题:

为什么我应该使用addServer而不是connect?

addserver()
允许您将多个IP(或主机名)添加到假定存在缓存值的列表中,即memcache服务器池。而
connect()
只允许您连接到单个指定的服务器

PORT="11211"
USER="memcached"
MAXCONN="4096"
CACHESIZE="512"
OPTIONS="-l 127.0.0.1"
getsebool httpd\u can\u network\u memcache,如果返回,它将返回关闭状态?

是的,打开此特定设置将允许您在启用SELinux的情况下连接到memcache服务器,但是在我的生产服务器上,我仍然将其设置为off,但设置如下:

$ -> setsebool -P httpd_can_network_connect 1
我相信,这两种设置都可以实现目标,但是通过上面的设置,如果您在另一台主机上有memcache服务器,httpd仍然可以访问它


下面是一个关于针孔SELinux的不错的方法,它允许httpd服务访问其他服务。

如评论中所述,您运行的是安全增强型Linux(SELinux),它在内核级别增加了一层额外的安全性。在我的经验和使用中,我发现SELinux在某些服务周围添加了一个force字段,因此它们无法访问系统上的特定资产。例如,如果我想从
/home/src/web
提供html内容,我必须告诉系统httpd服务可以访问
/home/src/web
路径中的内容。为此,我将发出以下命令:

$ -> setsebool -P httpd_enable_homedirs 1
基本上,为了允许服务之间的交叉通信,您必须通过一个策略来允许这种访问,就像“锁定”防火墙以允许访问特定端口一样,除非使用SELinux,您不授予对端口的访问权限,而是授予对系统另一部分或服务的访问权限。幸运的是,我们可以使用上面的
setsebool
构造几个内置策略,而不是试图定义我们自己的策略,这可能是一种痛苦。有关SELinux的更完整解释,请查看

现在回答您的具体问题:

为什么我应该使用addServer而不是connect?

addserver()
允许您将多个IP(或主机名)添加到假定存在缓存值的列表中,即memcache服务器池。而
connect()
只允许您连接到单个指定的服务器

PORT="11211"
USER="memcached"
MAXCONN="4096"
CACHESIZE="512"
OPTIONS="-l 127.0.0.1"
getsebool httpd\u can\u network\u memcache,如果返回,它将返回关闭状态?

是的,打开此特定设置将允许您在启用SELinux的情况下连接到memcache服务器,但是在我的生产服务器上,我仍然将其设置为off,但设置如下:

$ -> setsebool -P httpd_can_network_connect 1
我相信,这两种设置都可以实现目标,但是通过上面的设置,如果您在另一台主机上有memcache服务器,httpd仍然可以访问它


这里有一个关于pinholing SELinux的不错的方法,允许httpd服务访问其他服务。

您是否尝试过“telnet 127.0.0.1 11211”是的,我尝试过。我接通了。转义字符是…memcache守护进程是否在您尝试在同一台服务器上执行代码?telnet host_name 11211->connecting?如果出于某种原因SELinux阻止php与memcache通信,您可以查看
/var/log/audit/audit.log
。要检查SELinux是否已启用,请执行cat/SELinux/exforce,如果它响应一个,则它已启用。另一个想法是,尝试重新启动memcache和apache服务……您是否尝试过“telnet 127.0.0.1 11211”是的,我尝试过。我接通了。转义字符是…memcache守护进程是否在您尝试在同一台服务器上执行代码?telnet host_name 11211->connecting?如果出于某种原因SELinux阻止php与memcache通信,您可以查看
/var/log/audit/audit.log
。要检查SELinux是否已启用,请执行cat/SELinux/exforce,如果它响应一个,则它已启用。另一个想法是,尝试重新启动memcache和apache服务……Mike Purcell返回getsebool httpd\u can\u network\u memcache