ホームページ >バックエンド開発 >PHPの問題 >php が memcache に接続できない場合はどうすればよいですか?

php が memcache に接続できない場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2021-06-19 09:30:272188ブラウズ

php が memcache に接続できない問題の解決策: 最初に「/var/log/messages」を確認し、次に「[liang@www ~]$ sudo /usr/sbin/setsebool -P...」を実行します。 「ただ命令してください。

php が memcache に接続できない場合はどうすればよいですか?

#この記事の動作環境:CentOS 5.4 i386 システム、PHP7.1 バージョン、DELL G3 パソコン

php が接続できませんto memcached

memcached をインストールして設定した後、Telnet は接続できますが、php は接続できません。 memadmin は、サーバーに接続できないことを示すプロンプトも表示します。最後に、オンラインで解決策を見つけました。

********************

SELinux により、PHP は fsockopen を使用して Memcached サーバーに接続できなくなります。

問題は次のとおりです:

まず、サーバーのハードディスクに問題があります:-(、ハードディスクを交換し、システム (CentOS 5.4 i386) を再インストールしてから、インストールしました各種プログラムを実行し、各種データを復元します。最後のステップ Memcache.php を使用して Memcache の状態を監視します。しかし、ツールが Memcached サーバーに接続できないことがわかります。確認した後、Memcached サーバーは正常に起動しており、次のコマンドを使用して正常に接続できます。 telnet に接続すると、Memcached を使用したアプリケーションプログラム (PHP プログラム) も正常に動作しますが、memcache.php のコードを見ると、fsockopen を使用して Memcached サーバーに接続していることがわかり、Socket 拡張機能の問題を疑いました。確認したところ、コマンド ラインで fsockopen を使用すると、任意のアドレスの任意のポートに接続できることがわかり、Socket 拡張機能に問題がないことがわかりました。しかし、httpd では fsockopen を使用すると、80、8080、および 8080 にのみ接続できます。ローカル マシンのポートが 443 で、他のポートへの接続が失敗します。

httpd ログを確認しましたが、問題は見つかりませんでした。オンラインで検索しましたが、同様の問題は見つかりませんでした。落ち込んでいます。……

次に、SELinux の問題ではないかと考え、/var/log/audit/audit.log を grep して、次の手がかりを見つけました:

[liang@www ~]$ sudo grep denied /var/log/audit/audit.log
type=AVC msg=audit(1280882021.681:780): avc:  denied  { name_connect } for  pid=3822 comm="httpd" dest=11211 scontext=user_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket
type=AVC msg=audit(1280885410.800:805): avc:  denied  { name_connect } for  pid=3790 comm="httpd" dest=11211 scontext=user_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket

SELinux が再び問題を引き起こしているようです。引き続き確認すると、/var/log/messages に次のエラー メッセージが表示されていることがわかります:

Aug  4 08:11:59 www setroubleshoot: SELinux is preventing the http daemon from connecting to the itself or the relay ports For complete SELinux messages. run sealert -l 23d1381f-9d4b-439a-9ad6-d52f1025f247

これは確かに SELinux が原因で発生した問題です。プロンプト:

[liang@www ~]$ sealert -l 23d1381f-9d4b-439a-9ad6-d52f1025f247
Summary:
SELinux is preventing the http daemon from connecting to the itself or the relay
ports
Detailed Description:
SELinux has denied the http daemon from connecting to itself or the relay ports.
An httpd script is trying to do a network connect to an http/ftp port. If you
did not setup httpd to network connections, this could signal a intrusion
attempt.
Allowing Access:
If you want httpd to connect to httpd/ftp ports you need to turn on the
httpd_can_network_relay boolean: "setsebool -P httpd_can_network_relay=1"
The following command will allow this access:
setsebool -P httpd_can_network_relay=1
Additional Information:
Source Context                user_u:system_r:httpd_t
Target Context                system_u:object_r:http_cache_port_t
Target Objects                None [ tcp_socket ]

————————一部の出力を省略します————————

エラー メッセージは非常に明確です: SELinux は httpd 接続をブロックします。 root として次のコマンドを実行するだけです:

[liang@www ~]$ sudo /usr/sbin/setsebool -P httpd_can_network_relay=1

コマンドが正常に実行された後は何も出力されないことに注意してください。設定が成功したかどうかを確認するには、getsebool コマンドを実行するか、ログ:

[liang@www ~]$ /usr/sbin/getsebool httpd_can_network_relay
httpd_can_network_relay –> on
[liang@www ~]$ sudo tail /var/log/messages
Aug  4 10:50:23 www setsebool: The httpd_can_network_relay policy boolean was changed to 1 by root

正常に設定されました。memcache.php を更新すると、正常に動作していることがわかります。完了しました!

この記事は純粋に作業メモです。しかし、次のような友人にも役立つことを願っています。同じ問題が発生します。

推奨学習: 「

PHP ビデオ チュートリアル

以上がphp が memcache に接続できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。