본문 바로가기

main/Server

[CentOS 7] Apache SSL 적용 중 에러 해결 과정

systemctl restart httpd
systemctl status httpd -l

아파치 시작이 안 돼서 상태를 봐도 로그에 당장 이유는 알려주지 않고 일단 안될 경우

httpd.service: main process exited, code=exited, status=1/FAILURE

Failed to start The Apache HTTP Server.

Unit httpd.service entered failed state.

httpd.service failed.

 

어이없게도 자체 로그는 이게 다임...

차근차근 이유를 찾아보자. 구글링해보며 시도해본 것들

 

문법 검사

apachectl configtest

Syntax OK.

 

httpd.conf의 VirtualHost 내에서 기록하는 error_log 확인하기

확인해보니

AH01892: Illegal attempt to re-initialise SSL for server (SSLEngine On should go in the VirtualHost, not in global scope.)

라는 에러가 발생하고 있었다.

 

Get error "[error] Illegal attempt to re-initialise SSL for server" in httpd error logs - Red Hat Customer Portal

I see errors similar to below in my httpd error_log: [error] Illegal attempt to re-initialise SSL for server (theoretically shouldn't happen!) The server will not listen on port 443 I have confirmed that SElinux is disabled and that the firewall is not a f

access.redhat.com

포트 443이 열려있는지 확인 <방화벽, Listen 443, (클라우드 사용시) ACG 등>

SSLEngine On < 을 VirtualHost 내부에서 설정

하여 해결

 

httpd.conf의 error_log 확인하기

확인해보니

(28)No space left on device: AH00023: Couldn't create the rewrite-map mutex

AH00016: Configuration Failed

라는 에러가 발생하고 있었다.

 

아파치가 종료되어도 메모리 점유를 하고 있는 경우 공유메모리의 사용량을 먹고 있어서 이 문제가 발생한다고 하는 글을 보았다.

ipcs | grep apache(username)
ipcs -s -t | grep apache(username) | grep -v sem | cut -f1 -d' ' | awk '{print "ipcrm sem",$1}'

위 명령어를 입력하면 공유메모리의 사용량을 확인해볼 수 있는데

이거 뭐 이렇게만 나와서 봐도 뭔진 모르겠더라.

for i in `ipcs -s | grep apache(username) | awk '{print $2}'`;do ipcrm -s $i;done;

이 명령어로 삭제해준 후 다시 httpd restart 하니 해결되었다.

 

하지만 이 문제는 계속해서 발생할테니 스크립트로 만들어서 주기적으로 실행해주거나

커널 파라메터를 튜닝하라고 하는데.. [echo 250 32000 100 512 > /proc/sys/kernel/sem]

https://www.enteroa.com/tag/no-space-left-on-device/

추후에 SSL cron 하면서 얘도 해봐야겠다.

 

포트 제대로 열려 있나 확인하기

netstat -anp | grep LISTEN

netstat는 네트워크 상태를 확인하는 명령어이고 옵션을 여러 가지 붙일 수 있다.

-a: 모든 네트워크 상태 출력

-n: 도메인 숫자를 숫자로 출력

-p: PID와 사용중인 프로그램명 출력

정도를 사용하여 확인했다