Heim >Backend-Entwicklung >PHP-Problem >Was soll ich tun, wenn PHP keine Verbindung zum Memcache herstellen kann?
Lösung für das Problem, dass PHP keine Verbindung zum Memcache herstellen kann: Überprüfen Sie zuerst „/var/log/messages“ und führen Sie dann den Befehl „[liang@www ~]$ sudo /usr/sbin/setsebool -P...“ aus Wurzel. .
Die Betriebsumgebung dieses Artikels: CentOS 5.4 i386-System, PHP-Version 7.1, DELL G3-Computer
PHP kann keine Verbindung zu Memcached herstellen
Nach der Installation und Konfiguration von Memcached kann Telnet eine Verbindung herstellen, PHP jedoch keine Verbindung . Vorgesetzter. memadmin meldet außerdem, dass keine Verbindung zum Server hergestellt werden kann. Endlich habe ich online eine Lösung gefunden.
****************************
SELinux führt dazu, dass PHP fsockopen nicht verwenden kann, um eine Verbindung zum Memcached-Server herzustellen
Die Sache ist folgende:
Zuallererst gibt es ein Problem mit der Server-Festplatte :-(, ich habe die Festplatte ausgetauscht, dann das System neu installiert (CentOS 5.4 i386), dann diverse Programme installiert und diverse Daten wiederhergestellt. Der letzte Schritt war die Nutzung memcache.php zur Überwachung des Memcache-Status. Ich habe jedoch festgestellt, dass das Tool keine Verbindung zum Memcached-Server herstellen konnte. Nach der Überprüfung wurde der Memcached-Server normal gestartet und kann über Memcached normal verbunden werden Funktioniert auch normal. Überprüfen Sie den memcache.php-Code und stellen Sie fest, dass er fsockopen verwendet, um eine Verbindung zum Memcached-Server herzustellen. Ich habe jedoch festgestellt, dass ich fsockopen in der Befehlszeile verwenden kann Jeder Port an einer beliebigen Adresse, was darauf hinweist, dass es kein Problem mit der Socket-Erweiterung gibt. Wenn ich jedoch fsockopen in httpd verwende, kann ich nur eine Verbindung zu 80, 8080 und 443 des lokalen Computers herstellen
Ich habe das httpd-Protokoll überprüft und keine ähnlichen Probleme gefunden. Dann habe ich darüber nachgedacht, ob es sich um ein SELinux-Problem handelt. Die folgenden Hinweise wurden gefunden.[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_socketEs scheint, dass SELinux es erneut verursacht und festgestellt, dass /var/log/messages die folgende Fehlermeldung hatte:
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-d52f1025f247Es wurde tatsächlich durch SELinux verursacht zu den Eingabeaufforderungen:
[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 ]——————-Einige Ausgaben weglassen——————Die Fehlermeldung ist sehr klar: SELinux blockiert die httpd-Verbindung. Führen Sie einfach Folgendes aus Befehl als Root:
[liang@www ~]$ sudo /usr/sbin/setsebool -P httpd_can_network_relay=1Beachten Sie, dass nach erfolgreicher Ausführung des Befehls keine Ausgabe erfolgt. Um zu überprüfen, ob die Einstellung erfolgreich ist, können Sie den Befehl getsebool ausführen oder direkt das Protokoll überprüfen:
[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 rootAktualisieren Sie die Memcache-Einstellung , und festgestellt, dass es normal funktioniert. Dieser Artikel ist nur eine Arbeitsnotiz, aber ich hoffe, er kann auch Freunden helfen, die auf das gleiche Problem stoßen Empfehlen Sie das Lernen: „
PHP-Video-Tutorial
“Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHP keine Verbindung zum Memcache herstellen kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!