블로그 서버에 워드프레스용 AMP를 설정하는 도중 500 Internal Server Error가 발생했습니다.
에러의 정확한 원인을 파악하기 위해 Nginx 로그를 확인한 결과 다음과 같은 에러 메세지가 나타났습니다.
2018/10/03 16:13:07 [error] 7515#0: *33598 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Class 'DOMDocument' not found in /blog/path/wp-content/plugins/amp/includes/utils/class-amp-dom-utils.php:65 Stack trace: #0 /blog/path/wp-content/plugins/amp/includes/utils/class-amp-dom-utils.php(324): AMP_DOM_Utils::get_dom('<html><head><me...') #1 /blog/path/wp-content/plugins/amp/includes/templates/class-amp-content-sanitizer.php(27): AMP_DOM_Utils::get_dom_from_content('<h2>VBscript \xED\x8C...') #2 /blog/path/wp-content/plugins/amp/includes/templates/class-amp-content.php(185): AMP_Content_Sanitizer::sanitize('<h2>text...', Array, Array) #3 /blog/path/wp-content/plugins/amp/includes/templates/class-amp-content.php(118): AMP_Content->sanitize('<h2>text...') #4 /blog/path/wp-content/plugins/amp/includes/templates/class-amp-content.php(76): AMP_Content->transform() #5 /blog/path/wp-content/plugins/amp/includes/templates/class-" while reading response header from upstream, client: ###.###.###.###, server: ###.###.###.###, request: "GET /p/20181003000000?amp=1 HTTP/2.0", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "###.###.###.###"
여기서 확인해야 할 부분은 첫 부분입니다.
33598 FastCGI sent in stderr: “PHP message: PHP Fatal error: Uncaught Error: Class ‘DOMDocument’ not found in /blog/path/wp-content/plugins/amp/includes/utils/class-amp-dom-utils.php:65
문제가 발생한 부분을 살펴보면 DOMDocument
클래스를 찾을 수 없어 PHP 실행 에러가 발생한 것입니다.
이 문제는 웹 서버에 PHP DOM 확장(PHP DOM Extension)이 설치되지 않아서 발생하는 문제입니다.
이제 해당 DOM 확장을 설치하기 위해 웹 서버로 접속해보겠습니다. (만약 웹 호스팅 서비스를 사용하는 경우 서버에 직접적으로 접근할 수 없기 때문에 호스팅 관리업체에 문의해야 합니다.)
웹 서버의 원격 터미널(SSH 또는 TELNET 등의 프로토콜 이용)이나 직접 서버 장비에 접근할 수 있다면 해당 장비에서 터미널을 엽니다.
터미널에서 관리자 계정으로 패키지를 설치해야 하기 때문에 su
명령어로 root 계정으로 전환합니다.
[user@localhost ~]$ su - Password:
이제 현재 설치된 PHP의 버전에 맞는 패키지를 설치해야 합니다.
현재 PHP 버전을 확인하려면 아래 명령어를 입력하여 확인할 수 있습니다.
[root@localhost ~]# php -v PHP 7.2.10 (cli) (built: Sep 11 2018 11:22:20) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
운영체제가 Debian 계열이거나 Ubuntu인 경우는 다음 패키지 이름으로 설치해야 합니다.
php5-dom
또는 php-dom
php7.0-xml
또는 php-xml
또는 php-dom
반면 운영체제가 RedHat 계열이거나 CentOS, Fedora를 사용하고 있다면 다음 패키지 이름으로 설치해야 합니다.
php5-xml
또는 php-xml
php70w-xml
또는 php-xml
PHP 패키지가 다른 패키지 저장소(repo)에서 설치되었거나 5.3 이나 7.2와 같이 마이너 버전이 붙었다면 패키지 이름에 버전을 붙이는 경우가 있으므로 주의해주세요.
php53-dom
/ php70-xml
패키지 검색으로 해당 패키지 설치명이 존재하는지 확인하는 것을 권장합니다.
apt
또는 yum
등의 패키지 관리자를 사용 중이면 각자에 맞는 패키지 설치 명령어를 사용하여 DOM Extension을 설치해줍니다. 여기서는 yum
을 사용한다고 가정해보겠습니다.
[root@localhost ~]# yum install php-xml
설치가 완료되었다면 웹 서비스를 재시작해야 합니다. 아래 명령어를 참고하여 서비스를 다시 시작해줍니다.
Apache2 (Ubuntu, Debian 계열)
[root@localhost ~]# service apache2 restart
HTTPD / NginX (CentOS, RedHat 계열)
[root@localhost ~]# service nginx restart 또는 [root@localhost ~]# service httpd restart
PHP-FPM
서비스를 사용 중인 경우 혹시모르니 이 서비스 또한 재시작해줍니다.
[root@localhost ~]# service php-fpm restart
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…
언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…