블로그 서버에 워드프레스용 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
Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…