如何解決 Apache-2.4 AH02026:無法獲取 SSL 會話記憶體鎖定
我剛剛建立了一個新的 AWS Ubuntu 16.04 伺服器,執行 Apache2.4,PHP-FPM 5.6 和 7.1 通過不同的套接字可用。一切正常,但我在 Apache 錯誤日誌中收到以下錯誤:
[Mon Jun 19 05:48:06.158306 2017] [ssl:warn] [pid 18652:tid 140274127963904] (35)Resource deadlock avoided: AH02026: Failed to acquire SSL session cache lock
現在,我不是伺服器專家,這就是我在這裡的原因。我認為這可能是 ssl 套接字記憶體目錄的權限,但這超出了我的舒適區,所以我需要一些專家建議/指導。
cd
轉到 Apache 目錄並grep
ing 術語APACHE_RUN_DIR
給出以下內容:foo@bar:/etc/apache2# grep -R "APACHE_RUN_DIR" ./ ./mods-available/cgid.conf:ScriptSock ${APACHE_RUN_DIR}/cgisock ./mods-available/ssl.conf: #SSLSessionCache dbm:${APACHE_RUN_DIR}/ssl_scache ./mods-available/ssl.conf: SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000) ./mods-enabled/ssl.conf: #SSLSessionCache dbm:${APACHE_RUN_DIR}/ssl_scache ./mods-enabled/ssl.conf: SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000) ./envvars:export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
因此,我們不僅可以看到 mod_ssl 可用且已啟用,而且還可以執行配置,該配置聲明
SSLSessionCache
位於${APACHE_RUN_DIR}/ssl_scache
,相當於/var/run/apache2/ssl_scache
。我注意到該目錄不存在,所以我創建了它,
cd /var/run/apache2
後跟mkdir ssl_scache
. 在目錄上執行 als
會給出以下結果:foo@bar:/etc/apache2# ls -lsa /var/run/apache2/ total 4 0 drwxr-xr-x 3 root root 80 Jun 19 15:34 . 0 drwxr-xr-x 25 root root 1060 Jun 19 14:44 .. 4 -rw-r--r-- 1 root root 6 Jun 19 15:46 apache2.pid 0 drwxr-xr-x 2 root root 40 Jun 19 15:34 ssl_scache foo@bar:/etc/apache2# ls -lsa /var/run/apache2/ssl_scache/ total 0 0 drwxr-xr-x 2 root root 40 Jun 19 15:34 . 0 drwxr-xr-x 3 root root 80 Jun 19 15:34 ..
此外,我們在使用
ps aux
尋找 apache 時有這個:foo@bar:/etc/apache2# ps aux | grep "apache" root 16506 0.0 0.1 109328 9104 ? Ss Jun18 0:03 /usr/sbin/apache2 -k start root 17387 0.0 0.0 22780 4808 pts/0 T 15:22 0:00 nano apache.error.log www-data 18652 0.4 0.3 2044052 23388 ? Sl 15:46 0:04 /usr/sbin/apache2 -k start www-data 18720 0.4 0.3 2044728 24104 ? Sl 15:48 0:03 /usr/sbin/apache2 -k start www-data 18839 0.4 0.2 2043272 22480 ? Sl 15:50 0:02 /usr/sbin/apache2 -k start root 18913 0.0 0.0 12944 964 pts/0 S+ 16:01 0:00 grep --color=auto apache
所以我可以看到 Apache 程序正在以 user 身份執行
www-data
。我猜它可能無法訪問折疊/var/run/apache2/ssl_scache
?但正如我所說,我不是大師。有沒有人能夠深入了解為什麼我不斷收到
AH02026
錯誤?
所以我找到了問題的根本原因和解決方案。事實證明,Ubuntu 14.04 和 16.04 上的 Apache2.4 中存在錯誤(請參閱https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/1565744)。
預設情況下,文件中的這一行
/etc/apache2/apache.conf
未註釋:Mutex file:${APACHE_LOCK_DIR} default
按權利,這個配置指令應該使互斥文件使用預設機制。如果在 Apache2 的普通安裝中,您從命令提示符執行以下命令:
apache2ctl -t -D DUMP_RUN_CFG
…它應該給出以下輸出:
Mutex default: dir="/var/lock/apache2" mechanism=default
相反,由於該錯誤,它會產生以下結果:
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
有兩種可能的修復方法:
- 長期的解決方法是使用 fcntl 機製而不是預設機制,這將包括創建互斥文件,授予它們權限,設置套接字,監視它們,以及我不會在這裡討論的一大堆痛苦(主要是因為它高於我的工資等級)
- 簡單的解決方法是在 中註釋掉 mutex 行
/etc/apache2/apache.conf
,如下所示:
#Mutex file:${APACHE_LOCK_DIR} default
…然後導致 Apache 使用預設機制。