Apache2 無任何明顯原因停止
今天早上我接到一個電話,說其中一台伺服器上的 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.1
Host
標頭。)這為您提供了幾種可能的解決方案:
- 正如日誌條目所建議的那樣,使用該
ServerName
指令顯式地為 Apache 提供 FQDN。那麼你不需要DNS。- 確保您的 DNS 保持正常執行。標準做法是使用至少兩台 DNS 伺服器,最好在地理上分開,這樣如果一台伺服器或通往該伺服器的路由出現故障,另一台仍然可用。
當發生這種情況時,DNS 會嚴重減慢速度,因為系統在嘗試第二個 DNS 數據包之前等待其第一個 DNS 數據包超時,但至少事情最終會繼續進行。DNS 記憶體在這裡有所幫助。
有許多公司只為您提供輔助 DNS,因此您不必建立一個完整的其他數據中心,或者租用整個 EC2 實例或 VPS 來建立輔助 DNS 伺服器。許多其他公司提供輔助 DNS 作為其通用 Internet 託管服務套件之一。 3. 使用作業系統的
/etc/hosts
文件將 IP 映射到域名,並告訴作業系統的名稱解析器優先使用該資訊到 DNS。這不僅比 DNS 快,而且它的生命週期本質上與 Apache 主機的生命週期相關。關於它“下降”的唯一方法是讓某人對/etc/hosts
.如果您選擇此選項,請考慮同時執行上述選項。無論如何,您都需要輔助 DNS,並且沒有特別的理由強制 Apache 對 IP 進行反向查找以首先找出主機名,因為它不是可能更改的資訊。