Apache-Httpd

Apache2 無任何明顯原因停止

  • February 7, 2017

今天早上我接到一個電話,說其中一台伺服器上的 Web 伺服器不工作。重新啟動 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 實例。我每隔幾個小時就會在日誌中看到這種優雅的重啟,但沒有問題 - Web 伺服器執行了好幾個月,同時沒有配置更改。

AH00020: Configuration Failed, exiting是我無法對自己解釋的線。

我沒有想法,任何人都可以建議崩潰的原因是什麼?

日誌中的前幾行顯示您的 DNS 不可用,Apache 需要可用,以便它可以根據您告訴它綁定的 IP 地址查找您站點的FQDN 。(除其他外,它需要來處理 HTTP/1.1Host標頭。)

這為您提供了幾種可能的解決方案:

  1. 正如日誌條目所建議的那樣,使用該ServerName指令顯式地為 Apache 提供 FQDN。那麼你不需要DNS。
  2. 確保您的 DNS 保持正常執行。標準做法是使用至少兩台 DNS 伺服器,最好在地理上分開,這樣如果一台伺服器或通往該伺服器的路由出現故障,另一台仍然可用。

當發生這種情況時,DNS 會嚴重減慢速度,因為系統在嘗試第二個 DNS 數據包之前等待其第一個 DNS 數據包超時,但至少事情最終會繼續進行。DNS 記憶體在這裡有所幫助。

有許多公司只為您提供輔助 DNS,因此您不必建立一個完整的其他數據中心,或者租用整個 EC2 實例或 VPS 來建立輔助 DNS 伺服器。許多其他公司提供輔助 DNS 作為其通用 Internet 託管服務套件之一。 3. 使用作業系統的/etc/hosts文件將 IP 映射到域名,並告訴作業系統的名稱解析器優先使用該資訊到 DNS。這不僅比 DNS 快,而且它的生命週期本質上與 Apache 主機的生命週期相關。關於它“下降”的唯一方法是讓某人對/etc/hosts.

如果您選擇此選項,請考慮同時執行上述選項。無論如何,您都需要輔助 DNS,並且沒有特別的理由強制 Apache 對 IP 進行反向查找以首先找出主機名,因為它不是可能更改的資訊。

引用自:https://unix.stackexchange.com/questions/343075