5

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");

出力

配列(1) { ["127.0.0.1:11211"]=> bool(false) }

connect と addServer の違いは何ですか? 最善の方法はどれですか?
しかし、私はHello Worldを取得していません

コードとこの問題に関するその他の更新..

phpinfoは memcached を示しています。
var_dump($memcache->get('key')); 与える

bool(偽)

connectの代わりに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)
4

1 に答える 1

7

コメントで洗い流されたように、カーネルレベルでセキュリティの追加レイヤーを追加する Security-Enhanced Linux (SELinux) を実行しているようです。私の経験と使用法では、SELinux が特定のサービスの周囲に力場を追加して、システム上の特定のアセットにアクセスできないようにすることがわかりました。たとえば、 から html コンテンツを提供したい場合/home/src/web、httpd サービスが/home/src/webパス内のコンテンツにアクセスしても問題ないことをシステムに伝える必要があります。これを行うには、次のコマンドを発行します。

$ -> setsebool -P httpd_enable_homedirs 1

基本的に、サービス間の相互通信を許可するには、ファイアウォールを「ピンホール」して特定のポートへのアクセスを許可するのと同じように、ポリシーを介してそのようなアクセスを許可する必要があります。システムまたはサービスの別の部分へのアクセスを許可します。setsebool幸いなことに、面倒な独自のポリシーを定義しようとするのではなく、上記の構造を使用できる組み込みのポリシーがいくつかあります。SELinux の完全な説明については、ウィキペディアのページを参照してください。

具体的な質問に答えるには:

connect の代わりに addServer を使用する必要があるのはなぜですか?

addserver()キャッシュされた値が存在すると想定されるリスト、つまり memcache サーバーのプールに複数の IP (またはホスト名) を追加できます。ではconnect()、指定された単一のサーバーへの接続のみが許可されます。

getsebool httpd_can_network_memcache, オフに戻ります. オンに戻す必要がありますか?

はい、この特定の設定を有効にすると、SELinux が有効になっている memcache サーバーに接続できるようになりますが、実稼働サーバーではまだオフに設定されていますが、次のように設定されています。

$ -> setsebool -P httpd_can_network_connect 1

どちらの設定でも目的を達成できると思いますが、上記の設定では、別のホストに memcache サーバーがある場合でも httpd からアクセスできます。

これは、 SELinux をピンホールして、httpd サービスが他のサービスにアクセスできるようにすることに関するまともな記事です。

于 2013-08-25T18:51:18.463 に答える