설정을 고친 뒤 검사 없이 재기동하지 않는다. 문법 오류가 있으면 httpd 가 내려간 채로 올라오지 못해, 무중단으로 끝났을 작업이 장애가 된다.
apachectl configtest
# 또는
httpd -t
Syntax OK
문법 검사는 구문만 본다. 인증서 파일이 실제로 있는지, 지정한 포트를 다른 프로세스가 쓰고 있는지까지는 보지 않으므로 함께 확인한다.
ss -lntp | grep -E ':(80|443)\b'
reload (graceful) |
restart |
|
|---|---|---|
| 동작 | 부모 프로세스를 유지한 채 설정을 다시 읽고, 자식 프로세스를 처리 중인 요청이 끝난 뒤 교체한다 | 프로세스를 모두 내리고 새로 띄운다 |
| 서비스 | 끊기지 않는다 | 짧게 끊긴다 |
| 쓰는 때 | VirtualHost · 프록시 규칙 · 헤더 · 제한값 등 설정 변경 | 모듈 추가 · 삭제, Listen 포트 변경, 프로세스가 꼬였을 때 |
운영 중인 서버에서는 reload 를 기본으로 쓴다. 둘을 연달아 실행할 이유는 없다. restart 로 이미 새로 떴다면 뒤따르는 reload 는 아무 일도 하지 않는다.
systemctl reload httpd
systemctl restart httpd
apachectl 로는 다음이 대응한다.
apachectl graceful # reload
apachectl graceful-stop # 처리 중인 요청을 끝내고 정지
apachectl restart # 즉시 재시작
reload 로 반영되지 않는 것들이 있다. Listen 이 바뀌어 소켓을 다시 열어야 하는 경우, LoadModule 로 모듈이 추가 · 제거된 경우, MPM 을 바꾼 경우다. 이때는 restart 가 필요하다. reload 후에도 바뀐 것이 적용되지 않았다면 이 부류를 의심한다.
systemctl status httpd --no-pager
journalctl -u httpd --since '-5 min' --no-pager
tail -n 50 /var/log/httpd/error_log
실제로 새 설정으로 돌고 있는지는 httpd 자신이 인식한 값으로 확인하는 것이 확실하다.
httpd -S # VirtualHost 구성과 설정 파일 위치
httpd -M # 로드된 모듈
apachectl -V # MPM 과 컴파일 기본값
Debian 계열에서는 명령이 apache2ctl 이고 서비스 이름은 apache2 다.
LimitRequestBody 조정.