>  기사  >  백엔드 개발  >  PHP가 Memcache에 연결할 수 없으면 어떻게 해야 합니까?

PHP가 Memcache에 연결할 수 없으면 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2021-06-19 09:30:272135검색

PHP가 Memcache에 연결할 수 없는 문제에 대한 해결책: 먼저 "/var/log/messages"를 확인한 다음 "[liang@www ~]$ sudo /usr/sbin/setsebool -P..." 명령을 다음과 같이 실행하세요. 루트.

PHP가 Memcache에 연결할 수 없으면 어떻게 해야 합니까?

이 기사의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.