웹페이지 운영

[Apache2] Syntax error of IncludeOptional 해결 방법

공무원 봉급 2022. 5. 6. 04:09

본 페이지에서는 Apach2 서비스의 IncludeOptional 구문에서 에러가 발생할 경우 조치 방법에 대해서 설명합니다. 

이 문제를 발견했을 때 syntax error로 로그가 남아서 설정 파일의 문법 오류가 아닌지를 먼저 살펴봤습니다만, 결론적으로는 모듈을 제대로 로드하지 못해서 발생한 에러였습니다. 

이 문제를 어떻게 진단하고 해결했는지에 대해서 설명드리고자 합니다. 

 

환경

필자가 경험한 문제의 환경은 아래와 같습니다. 

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04 LTS
Release: 22.04
Codename: jammy

라즈베리파이4B에 Ubuntu Linux 22.04가 설치된 환경입니다. 

 

문제의 현상

Ubuntu Linux를 20.04 LTS 버전으로 업그레이드 한 이후부터 웹서버가 동작하지 않는 문제가 발생함. 

 

문제의 진단

$ sudo service apache2 status

 

service apache2 status 명령으로 로그를 살펴본 결과 아래와 같은 에러 메시지가 있음

apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error on line 3 of /etc/apache2/mods-enabled/php8.0.load: Cannot load /usr/lib/apache2/modules/libphp8.0.so into server: /usr/lib/apache2/modules/libphp8.0.so: cannot open shared object file: No such file or directory

 

$ apachectl configtest

apachectl configtest 명령으로 체크해보면 동일한 에러가 표시됨. 

apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error on line 3 of /etc/apache2/mods-enabled/php8.0.load: Cannot load /usr/lib/apache2/modules/libphp8.0.so into server: /usr/lib/apache2/modules/libphp8.0.so: cannot open shared object file: No such file or directory
Action 'configtest' failed.
The Apache error log may have more information.

살펴보면 에러 메시지의 depth가 여러 단계라는 것을 알 수 있음. 

최종적으로는 /etc/apache2/apach2.conf 파일의 146번 라인에서 syntax error가 발생함. 

그렇지만 좀 더 자세히 살펴보면 /etc/apache2/mods-enabled/php8.0.load 3번 라인에서 문제가 발생했음. 

그 이유는 /usr/lib/apache2/modules/libphp8.0.so 파일이 존재하지 않기 때문임. 

 

$ vi /etc/apache2/apache2.conf

vi로 /etc/apache2/apache2.conf 파일을 열어서 로그를 순차적으로 따라가 봄.

IncludeOptional mods-enable/*.load 구문 자체는 문제가 없어 보임. 

 

$ vi /etc/apache2/mods-enabled/php8.0.load

vi로 /etc/apache2/mods-enabled/php8.0.load 파일을 열어보니 아래와 같이 되어 있음

# Conflicts: php5
# Depends: mpm_prefork
LoadModule php_module /usr/lib/apache2/modules/libphp8.0.so

 

$ ls /usr/lib/apache2/modules

/usr/lib/apache2/modues 디렉토리를 살펴보니 libphp8.0.so 파일이 아니라 libphp8.1.so 파일이 존재함

ls /usr/lib/apache2/modules
httpd.exp               mod_dav_fs.so               mod_proxy_connect.so
libphp8.1.so            mod_dav_lock.so             mod_proxy_express.so
mod_access_compat.so    mod_dbd.so                  mod_proxy_fcgi.so
mod_actions.so          mod_deflate.so              mod_proxy_fdpass.so

config 파일은 libphp8.0.so 파일로 지정되어 있지만, 실제로 해당 파일은 없고 libphp8.1.so 파일이 존재해서 발생한 문제로 추정됨. 아무래도 ubuntu 업그레이드 과정에서 php 버전업이 되었는데, apache쪽 설정 파일은 변경되지 않은게 원인일 가능성이 높음. 

 

문제의 해결

설정 파일을 아래와 같이 바꿈.

$ vi /etc/apache2/mods-enabled/php8.0.load
기존 # Conflicts: php5
# Depends: mpm_prefork
LoadModule php_module /usr/lib/apache2/modules/libphp8.0.so
변경 # Conflicts: php5
# Depends: mpm_prefork
LoadModule php_module /usr/lib/apache2/modules/libphp8.1.so

 

$ apachectl configtest

apachectl configtest 명령으로 설정 파일의 무결성을 재확인함.

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

 

$ sudo service apache2 restart

아파치 웹서버 서비스를 재시작함

 

$ sudo service apache2 status

아파치 서비스가 정상적으로 재시작 된 것을 확인할 수 있음