PHP가 Memcache에 연결할 수 없는 문제에 대한 해결책: 먼저 "/var/log/messages"를 확인한 다음 "[liang@www ~]$ sudo /usr/sbin/setsebool -P..." 명령을 다음과 같이 실행하세요. 루트.
이 기사의 운영 환경: CentOS 5.4 i386 시스템, PHP 버전 7.1, DELL G3 컴퓨터
php는 memcached에 연결할 수 없습니다
memcached를 설치하고 구성한 후 telnet은 연결할 수 있지만 php는 연결할 수 없습니다. . 우수한. memadmin은 또한 서버에 연결할 수 없다는 메시지를 표시합니다. 마침내 온라인에서 해결책을 찾았습니다.
************************
SELinux로 인해 PHP가 fsockopen을 사용하여 Memcached 서버에 연결할 수 없게 됩니다
문제는 다음과 같습니다.
우선 서버 하드디스크에 문제가 있습니다 :-( 하드디스크 교체 후 시스템 재설치(CentOS 5.4 i386) 후 각종 프로그램 설치 및 각종 데이터 복구를 진행하였습니다. 마지막으로 사용하는 방법은 다음과 같습니다. memcache.php를 이용하여 Memcache 상태를 모니터링했는데, Memcached 서버에 접속이 되지 않는 것을 확인하였습니다. memcache.php 코드를 확인하여 Memcached 서버에 연결하는 데 fsockopen을 사용하는 것을 확인했습니다. 그러나 소켓 확장에 문제가 있는 것으로 의심됩니다. 그러나 명령줄에서 연결하는 데 사용할 수 있는 것으로 나타났습니다. 모든 주소의 모든 포트는 소켓 확장에 문제가 없음을 나타냅니다. 그러나 httpd에서 fsockopen을 사용할 때 로컬 시스템의 80, 8080 및 443 포트에만 연결할 수 있으며 다른 포트에 연결하지 못했습니다.
httpd 로그를 확인해보니 문제가 없었습니다. 온라인으로 검색해봐도 비슷한 문제는 발견되지 않았습니다. 우울했습니다. 그러다가 SELinux의 문제인지 생각해보고 /var/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
계속해서 확인해보니 /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
물론이죠. 질문입니다. 프롬프트에 따라 계속 확인하세요.
[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 연결을 차단합니다. 방법도 제공됩니다. 루트로 다음 명령을 실행하세요.
[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가 Memcache에 연결할 수 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!