Heim >Backend-Entwicklung >PHP-Problem >Was soll ich tun, wenn PHP keine Verbindung zum Memcache herstellen kann?

Was soll ich tun, wenn PHP keine Verbindung zum Memcache herstellen kann?

藏色散人
藏色散人Original
2021-06-19 09:30:272188Durchsuche

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

Was soll ich tun, wenn PHP keine Verbindung zum Memcache herstellen kann?

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_socket

Es ​​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-d52f1025f247

Es ​​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=1

Beachten 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 root

Aktualisieren 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn