Maison > Article > développement back-end > Que dois-je faire si PHP ne parvient pas à se connecter à Memcache ?
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.
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 PHPCe 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!