CentOS에서 Rocky 9으로 포팅하면서, 디렉토리 구조 변경 요청으로 엔진 및 서버의 주요 설정 파일을 /etc로 옮겨야 했습니다.
이 과정에서 Apache의 httpd.conf 파일도 옮겨야 했는데, 이에 대한 구체적인 정보를 블로그에서 찾기 어려웠습니다. 그래서 해당 내용을 블로그를 통해 공유하고자 합니다.
설명의 편의를 위해 Apache가 /usr/local/ 에 설치되었다고 가정하고 시작하겠습니다.
httpd.conf 파일을 /etc 디렉토리로 이동시키는 것은 mv 명령어를 사용하여 간단히 할 수 있습니다. 다만 중요한 점은 Apache를 실행할 때, Apache가 /etc/httpd.conf 파일의 변경된 위치를 인식할 수 있냐는 점입니다.
Apache의 공식 문서(https://httpd.apache.org/docs/2.4/configuring.html)에 따르면, -f 옵션을 사용하여 httpd.conf 파일의 위치를 Apache에게 알려줄 수 있다고 합니다.

Apache를 실행하고 종료하는 것은 apachectl입니다. Apache의 실행 및 종료시 httpd.conf를 참조해야 하므로 apachectl에서 httpd.conf의 위치 설정을 해줘야 합니다.
vim 명령어를 통해 apachectl의 내부를 확인해보면

HTTPD 변수가 Apache의 실행 파일을 정의하는 부분을 확인 할 수 있습니다. (수정 후 캡처로 인해 -f 설정이 되어 있습니다. )
HTTPD 변수의 초기 모습은 아래와 같습니다.
HTTPD='/usr/local/apache/bin/httpd'
여기서 -f 옵션 + httpd.conf의 디렉토리 위치를 추가해서 Apache 실행파일인 httpd에게 httpd.conf의 위치를 알려줄 수 있습니다.
예를 들어, httpd.conf 파일이 /usr/local/etc에 있다면, HTTPD 변수를 다음과 같이 변경해야 합니다:
HTTPD='/usr/local/apache/bin/httpd -f /usr/local/etc/httpd.conf'
apachectl 설정까지 마진 후 httpd.conf의 여러 모듈과 httpd-ssl.conf, httpd-vhost.conf 같은 Include 파일들의 위치도 새로운 디렉토리 위치에 맞춰 수정해야 한다고 생각했습니다.
하지만 Apache는 파일 경로를 httpd.conf 파일의 위치가 아닌 ServerRoot 기준으로 찾기 때문에, httpd.conf 파일의 위치가 변경되더라도, ServerRoot 기반의 경로 설정은 변함없으므로, 모듈등의 위치를 별도로 수정해줄 필요가 없었습니다.
그러나 로그 파일의 경우, 새로운 위치인 /usr/local/log로 이동시켜야 했기 때문에 Define 명령어와 상대 경로를 사용하여 새로운 경로를 지정해줬습니다.
다만, Define을 사용할 때 기억해야 할 점은 httpd.conf에서 상대 경로의 기준이 httpd.conf 파일의 위치가 아닌 ServerRoot라는 것입니다.

위 그림에서
Define LOG_PATH ../log/apache를 절대경로로 변경해보자면
httpd.conf의 위치인
/usr/local/etc 를 상대경로로 하는 /usr/local/log/apache가 아닌
ServerRoot의 위치인
/usr/local/apache 를 상대경로로 하는 /usr/local/log/apache 입니다.
Define으로 정의한 LOG PATH 설정은 ${}를 톻애 사용이 가능합니다.

Apache 실행 시 httpd.conf에 문제가 있다면, {저장된 위치}/apache/logs/error_log 파일에서 오류를 확인할 수 있습니다.
저는 로그를 확인할 때 tail 명령어를 사용합니다.
예를 들어,
tail -1000f /usr/local/apache/logs/error_log 명령어는 최근 1000줄의 로그를 실시간으로 보여줘 라는 의미입니다.
로그를 참고하면 실수를 찾기 훨씬 수월합니다.
httpd.conf의 디렉토리 위치를 변경하는 방법
mv /usr/local/apache/conf/httpd.conf /usr/local/etc
vi /usr/local/apache/bin/apachectl
apachectl 변경
HTTPD='/usr/local/apache/bin/httpd'
->
HTTPD='/usr/local/apache/bin/httpd -f /usr/local/etc/httpd.conf'
:wq
vi /usr/local/etc/httpd.conf
Define LOG_PATH ../log/apache
...
CustomLog ${LOG_PATH}/httpd_access_log commo
...
감사합니다.