#この記事の動作環境:CentOS 5.4 i386 システム、PHP7.1 バージョン、DELL G3 パソコンphp が memcache に接続できない問題の解決策: 最初に「/var/log/messages」を確認し、次に「[liang@www ~]$ sudo /usr/sbin/setsebool -P...」を実行します。 「ただ命令してください。
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 サイトの他の関連記事を参照してください。