다음은 phpmyadmin님이 nginx+php-fpm 모드에서 phpMyAdmin을 사용할 수 없는 문제를 해결하기 위해 튜토리얼 칼럼에 소개한 내용입니다. 누가 필요해!
어제 한 네티즌으로부터 yum이 nginx+php-fpm+mysql+phpMyAdmin을 설치한 후 phpMyAdmin을 열 수 없고 계속 502 오류가 보고된다는 질문을 받았습니다. 다른 사람들을 돕기 위해 원격으로 행복의 원리를 읽도록 도와주었습니다. 문제 해결 아이디어의 요약은 다음과 같습니다. 문제 해결 아이디어도 이 기사의 초점입니다.
추천: "phpmyadmin 사용법 튜토리얼"
문제 환경: CentOS6 nginx+php-fpm+mysql+phpMyAdmin yum
을 통해 설치된 문제 설명: 설치가 완료된 후 다음이 있는 것으로 확인되었습니다. nginx에는 문제가 없지만 phpMyAdmin이 열리지 않아 502 오류가 발생합니다
문제 해결 프로세스
문제 환경의 설치 패키지 보기:
nginx-filesystem-1.0.15-12.el6.noarch |
nginx-1.0.15-12 .el6.x86_64 |
rrdtool-php-1.3.8-7.el6.x86_64 |
php-pear-1.9.4-4.el6.noarch |
php-devel-5.3.3- 46.el6_6.x86_64 |
php-mbstring-5.3.3-46.el6_6.x86_64 |
php-mcrypt-5.3.3-3.el6.x86_64 |
php-5.3.3-46 .el6_6.x86_64 |
php-tidy-5.3.3-46.el6_6.x86_64 |
php-pecl-memcache-3.0.5-4.el6.x86_64 |
php-xmlrpc-5.3.3-46.el6_6.x86_64 |
php-xmlseclibs-1.3.1-3.el6.noarch |
php-common-5.3.3-46. EL6_6.X86_64 |
PHP-PDO-5.3 .3-46.EL6_6.X86_64 |
PHP-XML-5.3.3-46.EL6_6.X86_64 |
PHP-FPM-3.3-46 .el6_6.x86_64 |
php-cli- 5.3.3-46.el6_6.x86_64 |
php-mysql-5.3.3-46.el6_6.x86_64 |
php-eaccelerator-0.9.6 .1- 1.el6.x86_64 |
php-gd -5.3.3-46.el6_6.x86_64 |
nginx에서 보고된 502 오류를 토대로 업스트림에 문제가 있음을 초기에 판단할 수 있습니다. 업스트림에 대해 언급하기 전에 nginx 구성 파일을 나열하겠습니다(댓글을 삭제하고 nginx 오류 로그 수준을 기본 수준에서 높였습니다. 정보) .
user nginx; worker_processes 1; error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; client_max_body_size 10M; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; include /etc/nginx/conf.d/*.conf; }
이 구성 파일에는 명시적으로 서버가 명시되어 있지 않으므로 include /etc/nginx/conf.d/*.conf;에 포함된 기본 서버 파일, 즉 /etc/nginx/conf.d /를 확인해야 합니다. default.conf, 주석 제거
cat /etc/nginx/conf.d/default.conf server { listen 80 default_server; server_name _; include /etc/nginx/default.d/*.conf; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } }
예비 판단에 따르면 이 nginx 구성에는 실제로 문제가 없으며 php-fpm 또는 php 자체에 문제가 있어야 합니다(문제 범위를 좁힙니다).
nginx 로그 파일(/var/log/nginx/error.log)을 확인하고 다음 프롬프트를 찾으세요. 확실히 php-fpm에 문제가 있습니다. Fastcgi도 업스트림용 프록시
2015/08/14 17:05:32 [notice] 9645#0: using the "epoll" event method 2015/08/14 17:05:32 [notice] 9645#0: nginx/1.0.15 2015/08/14 17:05:32 [notice] 9645#0: built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) 2015/08/14 17:05:32 [notice] 9645#0: OS: Linux 2.6.32-504.el6.x86_64 2015/08/14 17:05:32 [notice] 9645#0: getrlimit(RLIMIT_NOFILE): 65535:65535 2015/08/14 17:05:32 [notice] 9646#0: start worker processes 2015/08/14 17:05:32 [notice] 9646#0: start worker process 9648 2015/08/14 17:05:36 [error] 9648#0: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.228, server: 192.168.1.101, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.1.101" 2015/08/14 17:09:22 [error] 9648#0: *4 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.228, server: 192.168.1.101, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.1.101" 2015/08/14 17:11:23 [error] 9648#0: *7 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.228, server: 192.168.1.101, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.1.101" 2015/08/14 17:11:33 [info] 9648#0: *9 client closed prematurely connection while reading client request line, client: 192.168.1.228, server: 192.168.1.101
할 수 있는 파일을 만드세요. phpinfo 를 열고 php 파일이 제대로 파싱되는지 확인하세요. (문제의 범위가 더욱 좁아집니다.)
php-fpm이 php 파일을 정상적으로 파싱할 수 있고, 내부의 각 PHP 구성 요소가 정상적으로 표시되는 것으로 확인됩니다
버전 확인 phpMyAdmin의 php5.3.3을 지원하는지 공식 홈페이지의 문서를 확인해보면 현재 phpMyAdmin에서 지원하는 것으로 확인되었으므로 phpMyAdmin에는 문제가 없을 것입니다
phpMyAdmin의 로그를 확인하기 시작했습니다- fpm (/var/log/php-fpm/error.log)에서 다음을 발견했습니다:
[14-Aug-2015 16:34:53] NOTICE: fpm is running, pid 9522 [14-Aug-2015 16:34:53] NOTICE: ready to handle connections [14-Aug-2015 16:43:54] WARNING: [pool www] child 9527 exited on signal 11 (SIGSEGV) after 541.401349 seconds from start [14-Aug-2015 16:43:55] NOTICE: [pool www] child 9614 started [14-Aug-2015 16:44:00] WARNING: [pool www] child 9526 exited on signal 11 (SIGSEGV) after 547.107407 seconds from start [14-Aug-2015 16:44:00] NOTICE: [pool www] child 9615 started [14-Aug-2015 17:05:36] WARNING: [pool www] child 9523 exited on signal 11 (SIGSEGV) after 1843.098829 seconds from start [14-Aug-2015 17:05:36] NOTICE: [pool www] child 9649 started
이 로그 분명히 문제를 해결하기 위한 충분한 정보를 제공하는 것만으로는 충분하지 않으므로 php- fpm 및 php.ini를 사용하여 로그 수준을 높이고 자세한 오류 정보를 얻을 수 있습니다.
구성 파일에서 로그 키워드를 검색하거나 문서나 정보에 따라 수정하세요. 일부 방법이나 단계는 다음과 같습니다.
/etc/php-fpm.conf 파일에서 로그 수준을 알림에서 디버그로 변경하세요.
log_level = debug
/etc/ php-fpm.d/www.conf 파일은 PHP 작업자의 표준 출력 및 오류 출력을 /dev/null에서 기본 오류 로그인 /var/log/php-fpm/으로 리디렉션합니다. error.log
catch_workers_output = yes
/etc/php.ini 파일
error_reporting = E_ALL & ~E_DEPRECATED display_errors = On display_startup_errors = On log_errors = On track_errors = On html_errors = On
php-fpm을 다시 시작하고 작업자에서 자세한 오류를 찾으세요.
[14-Aug-2015 17:09:18] NOTICE: fpm is running, pid 9672 [14-Aug-2015 17:09:18] NOTICE: ready to handle connections [14-Aug-2015 17:09:22] WARNING: [pool www] child 9673 said into stderr: "[Fri Aug 14 17:09:22 2015" [14-Aug-2015 17:09:22] WARNING: [pool www] child 9673 said into stderr: "] [notice] EACCELERATOR(9673): PHP crashed on opline 30 of PMA_URL_getCommon() at /usr/share/nginx/html/libraries/url_generating.lib.php:188" [14-Aug-2015 17:09:22] WARNING: [pool www] child 9673 said into stderr: "" [14-Aug-2015 17:09:22] WARNING: [pool www] child 9673 exited on signal 11 (SIGSEGV) after 4.286828 seconds from start [14-Aug-2015 17:09:22] NOTICE: [pool www] child 9679 started [14-Aug-2015 17:11:23] WARNING: [pool www] child 9675 said into stderr: "[Fri Aug 14 17:11:23 2015" [14-Aug-2015 17:11:23] WARNING: [pool www] child 9675 said into stderr: "] [notice] EACCELERATOR(9675): PHP crashed on opline 30 of PMA_URL_getCommon() at /usr/share/nginx/html/libraries/url_generating.lib.php:188"
오류 메시지에는 EACCELERATOR PHP 모듈이 언급되어 있으므로 먼저 문제가 있는지 확인하세요. 이 모듈은 먼저 /etc/php.d/eaccelerator.ini 파일을 mv /etc/php.d/eaccelerator.ini /etc/php.d/eaccelerator와 같은 접미사 이름으로 변경하여 이 모듈을 비활성화합니다. ini~, 그런 다음 php-fpm을 다시 시작하고 결과를 다시 확인하여 문제가 해결되었는지 확인합니다.
eaccelerator가 phpMyAdmin과 충돌할 수 있으므로 phpMyAdmin을 사용하려면 설치 중에 이 모듈을 비활성화하거나 이 패키지를 건너뛸 수 있습니다.
참고: eAccelerator는 동적 콘텐츠 캐싱을 최적화하고, PHP 스크립트의 캐싱 성능을 향상시키며, 컴파일된 상태에서 PHP 스크립트의 서버 오버헤드를 거의 완전히 제거하는 무료 오픈 소스 PHP 가속기입니다. 또한 실행 효율성을 높이기 위해 스크립트를 최적화합니다. PHP 프로그램 코드 실행 효율성을 1~10배 향상시킵니다. (from bdbk)
문제 해결 아이디어 요약
0조, 오류 진단의 핵심은 배포 계획, 단계, 수행된 작업 등 문제를 자세히 이해하는 것입니다.
먼저, 경험적으로 판단하자면, nginx+php-fpm+phpMyAdmin은 매우 안정적인 조합이라 일괄적인 문제가 아닌 개별적인 문제라고 판단하여 직접 시작해서 시스템에 로그인하여 설치된 소프트웨어를 살펴보았습니다. 패키지, nginx, php, phpMyAdmin 버전이 모두 있습니다. 확인하려면 이 단계를 통해 처음에 서로 호환되는지, 가지고 있는 지식과 경험을 바탕으로 수정되지 않은 버그가 있는지 판단하는 데 도움이 됩니다.
둘째, nginx -t를 실행하여 nginx 구성 파일에 명시적인 오류가 있는지 확인하고 nginx의 실행 상태를 확인합니다.
셋째, php-fpm -t를 실행하여 php-fpm 구성에 명시적인 오류가 있는지 확인합니다. 파일을 만들고 php -Fpm 실행 상태를 확인하세요
넷째, 오류 로그를 확인하세요. 먼저 nginx 오류 로그를 확인하세요. "첫 번째 사이트"이기 때문이고, 그런 다음 php-fpm 로그를 확인하세요. "두 번째 사이트"이기 때문입니다.
다섯째, 로그 프롬프트가 확실하다면 로그 프롬프트에 따라 해당 구성 파일을 수정하고 문제를 다시 확인하세요
여섯째, 여전히 문제가 있다면이 단계는 문제를 해결하기 위한 가장 중요한 단계입니다. 문제. 로깅 수준을 높여야 합니다. 이것이 디버그가 있고 디버깅이라고 불리는 이유입니다. nginx가 컴파일될 때 확실하지 않은 경우에는 사용할 필요가 없습니다.) 디버깅을 위해 php의 로그 레벨을 올리고, 모든 PHP 디버깅 스위치를 켜십시오.
일곱 번째, nginx 및 php-fpm을 다시 시작한 후 구성 파일이 적용되면 웹페이지를 다시 열어서 문제를 재현하고 로그를 다시 열어서 로그 프롬프트 내용에 따라 해당 구성 파일을 수정하고 다시 확인하세요. 질문여덟째, 반복해서 수정해도 결과가 나오지 않으면, 문제가 발생할 때 공식 매뉴얼을 참조하세요. 상담해야 할 때이고, 구글에서 검색할 때 구글에서 검색하고, 버그 보고할 때 버그를 신고하고, 계속해서 성과가 없으면 다른 방법을 찾아 문제를 해결하는 방법은 다음을 참조하세요.
yum 설치를 컴파일 설치로 변경하거나, yum은 더 적은 수의 패키지를 설치하여 최소한의 설치 방법으로 문제의 범위를 최소화함으로써 문제를 식별하고 문제 해결 능력을 향상시켜 연구 및 학습에 적합합니다.
마지막으로 덧붙일 말: 문제가 재현 가능하고 무작위로 나타나지 않는 한 잘 해결될 테니 당황하지 말고, 성급하게 굴지 말고, 포기하지 마세요. 천천히 생각하고 침착하게 대처할 수도 있습니다.
--끝--
위 내용은 nginx+php-fpm 모드에서 phpMyAdmin을 사용할 수 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!