gpt4 book ai didi

php - 用于 php 的内存缓存 - 无法连接

转载 作者:IT王子 更新时间:2023-10-29 01:16:28 25 4
gpt4 key购买 nike

我正在运行 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) }

What does connect and addServer do differently? Which is best way to do?
But i am not getting the Hello World

More updates on the code and on this problem..

phpinfo is showing memcached.
var_dump($memcache->get('key')); gives

bool(false)

why should i use addServer instead of connect?

More update on the code

$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)

最佳答案

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

$ -> setsebool -P httpd_enable_homedirs 1

基本上,要允许服务之间的交叉通信,您必须通过策略允许此类访问,就像“针孔化”防火墙以允许访问特定端口一样,除了 SELinux 之外,您不授予对端口的访问权限,相反,您是在授予对系统或服务的另一部分的访问权限。对我们来说幸运的是,我们可以使用上面的 setsebool 构造几个内置策略,而不是尝试定义我们自己的策略,这可能很痛苦。有关 SELinux 的更完整说明,请查看 wikipedia page .

现在回答您的具体问题:

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

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

getsebool httpd_can_network_memcache,它返回关闭,它应该返回吗?

是的,似乎打开此特定设置将允许您连接到启用 SELinux 的内存缓存服务器,但是在我的生产服务器上我仍然将其设置为关闭,但设置如下:

$ -> setsebool -P httpd_can_network_connect 1

我相信,这两种设置都可以实现目标,但是使用上述设置,如果您在另一台主机上有内存缓存服务器,httpd 仍然可以访问它。

这是一个体面的write-up关于 pinholing SELinux 以允许 httpd 服务访问其他服务。

关于php - 用于 php 的内存缓存 - 无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com