명백한 이유 없이 Apache2가 중지되었습니다.

명백한 이유 없이 Apache2가 중지되었습니다.

오늘 아침에 서버 중 하나의 웹 서버가 작동하지 않는다는 전화를 받았습니다. apache2 프로세스를 다시 시작하면 문제가 해결되었지만 충돌 원인을 이해할 수 없습니다.

모든 로그를 확인했는데 사건에 대한 유일한 관련 정보는 다음 위치에 있습니다 error.log.

[Tue Feb 07 06:25:39.804775 2017] [mpm_prefork:notice] [pid 16376] AH00171: Graceful restart requested, doing restart
AH00557: apache2: apr_sockaddr_info_get() failed for ourdomain.com
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
[Tue Feb 07 06:25:59.749847 2017] [unique_id:alert] [pid 16376] (EAI 2)Name or service not known: AH01564: unable to find IPv4 address of "ourdomain.com"
[Tue Feb 07 06:26:09.760784 2017] [:emerg] [pid 16376] AH00020: Configuration Failed, exiting
[Tue Feb 07 11:44:50.000663 2017] [:notice] [pid 4841] ModSecurity for Apache/2.8.0 (http://www.modsecurity.org/) configured.
[Tue Feb 07 11:44:50.001311 2017] [:notice] [pid 4841] ModSecurity: APR compiled version="1.5.1"; loaded version="1.5.1"
[Tue Feb 07 11:44:50.001317 2017] [:notice] [pid 4841] ModSecurity: PCRE compiled version="8.35 "; loaded version="8.39 2016-06-14"
[Tue Feb 07 11:44:50.001324 2017] [:warn] [pid 4841] ModSecurity: Loaded PCRE do not match with compiled!
[Tue Feb 07 11:44:50.001326 2017] [:notice] [pid 4841] ModSecurity: LUA compiled version="Lua 5.1"
[Tue Feb 07 11:44:50.001328 2017] [:notice] [pid 4841] ModSecurity: LIBXML compiled version="2.9.1"
[Tue Feb 07 11:44:50.001330 2017] [:notice] [pid 4841] Original server signature: Apache/2.4.10 (Debian) OpenSSL/1.0.1t
[Tue Feb 07 11:44:50.001364 2017] [:notice] [pid 4841] ModSecurity: StatusEngine call: "2.8.0,StanSoftWeb 6.22,1.5.1/1.5.1,8.35/8.39 2016-06-14,Lua 5.1,2.9.1,82"
[Tue Feb 07 11:44:51.420554 2017] [:notice] [pid 4841] ModSecurity: StatusEngine call successfully sent. For more information visit: http://status.modsecurity.org/
[Tue Feb 07 11:44:52.000688 2017] [core:warn] [pid 4848] AH00098: pid file /var/run/apache2/apache2.pid overwritten -- Unclean shutdown of previous Apache run?

우리는 의도적으로 재부팅을 요청한 것이 아닙니다. 중요한 경우 서버는 AWS EC2 인스턴스입니다. 몇 시간마다 아무런 문제 없이 로그가 정상적으로 다시 시작되는 것을 볼 수 있습니다. 웹 서버는 그 기간 동안 구성 변경 없이 몇 달 동안 정상적으로 실행되었습니다.

AH00020: Configuration Failed, exiting나로서는 도저히 설명할 수 없는 대사다.

아이디어가 없습니다. 충돌의 원인이 무엇인지 제안할 수 있는 사람이 있습니까?

답변1

로그의 처음 몇 줄에는 DNS를 사용할 수 없다는 내용이 표시됩니다. Apache가 웹 사이트를 찾는 데 필요한 DNS입니다.정규화된 도메인 이름바인딩하도록 지시한 IP 주소가 제공됩니다. (그리고 그것은 필요합니다저것HostHTTP/1.1 헤더 등을 처리하기 위해 )

이는 여러 가지 가능한 솔루션을 제공합니다.

  1. ServerName로그 항목에 표시된 대로 이 지시어를 사용하여 Apache에 FQDN을 명시적으로 제공합니다. 그러면 DNS가 필요하지 않습니다.

  2. DNS가 계속 실행되고 있는지 확인하세요. 표준 관행은 다음을 사용하는 것입니다.최소 2개의 DNS 서버, 이상적으로는 지리적으로 분리되어 있으므로 한 서버 또는 해당 서버에 대한 경로가 실패하더라도 다른 서버를 계속 사용할 수 있습니다.

    이런 일이 발생하면 시스템은 두 번째 DNS 패킷을 시도하기 전에 첫 번째 DNS 패킷이 시간 초과될 때까지 기다리기 때문에 DNS 속도가 심각하게 느려지지만 적어도 결국에는 계속 작동하게 됩니다. 여기서는 DNS 캐싱이 도움이 됩니다.

    보조 DNS만 제공하는 회사가 많기 때문에 완전히 다른 데이터 센터를 설정하거나 보조 DNS 서버를 설정하기 위해 전체 EC2 인스턴스 또는 VPS를 임대할 필요가 없습니다. 다른 많은 회사에서는 일반 인터넷 호스팅 서비스 제품군의 일부로 보조 DNS를 제공합니다.

  3. 운영 체제의 /etc/hosts파일을 사용하여 IP를 도메인 이름에 매핑하고 운영 체제의 이름 확인자에게 알려줍니다.이 정보의 사용을 우선시하세요DNS에. 이는 DNS보다 빠를 뿐만 아니라 수명 주기가 본질적으로 Apache 호스트의 수명 주기와 연결되어 있습니다. 그것을 "내려가게" 만드는 유일한 방법은 누군가가 /etc/hosts.

    이 옵션을 선택하는 경우 위 옵션을 수행하는 것을 고려하세요. 어쨌든 보조 DNS가 필요하며 호스트 이름을 먼저 찾기 위해 Apache가 IP 역조회를 수행하도록 강제할 특별한 이유는 없습니다. 변경될 수 있는 정보가 아니기 때문입니다.

관련 정보