Maison  >  Article  >  développement back-end  >  Que dois-je faire si PHP ne parvient pas à se connecter à Memcache ?

Que dois-je faire si PHP ne parvient pas à se connecter à Memcache ?

藏色散人
藏色散人original
2021-06-19 09:30:272113parcourir

Solution au problème selon lequel php ne peut pas se connecter à memcache : vérifiez d'abord "/var/log/messages" puis exécutez "[liang@www ~]$ sudo /usr/sbin/setsebool -P... "Donnez simplement l'ordre.

Que dois-je faire si PHP ne parvient pas à se connecter à Memcache ?

L'environnement d'exploitation de cet article : système CentOS 5.4 i386, PHP version 7.1, ordinateur DELL G3

php ne peut pas se connecter à memcached

Après avoir installé et configuré memcached, telnet peut se connecter, mais php ne peut pas se connecter. memadmin indique également qu'il ne peut pas se connecter au serveur. Finalement, j'ai trouvé une solution en ligne.

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

SELinux empêche PHP d'utiliser fsockopen pour se connecter à Memcached serveur

Le truc est comme ça :

Tout d'abord, il y a eu un problème avec le disque dur du serveur :-(, j'ai remplacé le disque dur, puis j'ai réinstallé le système (CentOS 5.4 i386 ), puis installé divers programmes et restauré diverses données. La dernière étape Memcache.php est utilisée pour surveiller l'état de Memcache. Cependant, il s'avère que l'outil ne peut pas se connecter au serveur Memcached. Après vérification, le serveur Memcached a été démarré normalement. et l'application (programme PHP) utilisant Memcached peut être connectée normalement. En regardant le code memcache.php, nous avons constaté qu'elle utilise fsockopen pour se connecter au serveur Memcached, nous avons donc soupçonné un problème avec l'extension Socket. nous pouvons utiliser fsockopen sur la ligne de commande pour nous connecter à n'importe quel port à n'importe quelle adresse, indiquant qu'il n'y a aucun problème avec l'extension Socket. Lorsque j'utilise fsockopen, je ne peux me connecter qu'aux ports 80, 8080 et 443 de la machine locale, mais. Je n'ai pas réussi à me connecter à d'autres ports.

J'ai vérifié le journal httpd et je n'ai trouvé aucun problème similaire. J'ai cherché en ligne et je n'ai trouvé aucun problème similaire...

Ensuite, j'ai pensé. pour savoir s'il s'agissait d'un problème SELinux. J'ai grep /var/log/audit/audit.log et j'ai trouvé les indices suivants :

[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

Il semble que SELinux soit provoquant à nouveau le problème. Continuez à vérifier et trouvez le message d'erreur suivant dans /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

Il s'agit bien d'un problème causé par SELinux. Continuez à vérifier selon les invites :

[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 ]
.

——————-Omettre certaines sorties——————

Le message d'erreur est très clair : SELinux bloque la connexion httpd. La méthode de modification est également donnée. en tant que root :

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

Notez qu'il n'y a aucune sortie une fois la commande exécutée avec succès. Pour vérifier si le paramètre est réussi, vous pouvez exécuter la commande getsebool ou consulter directement le journal :

[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

Configuration réussie. Memcache.php actualisé et constaté qu'il fonctionne normalement

Cet article est purement une note de travail, mais j'espère qu'il pourra également aider les amis qui rencontrent le même problème. Apprentissage recommandé : "

Tutoriel vidéo PHP

"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn