Apache-2.4

如何解決 Apache-2.4 AH02026:無法獲取 SSL 會話記憶體鎖定

  • December 28, 2020

我剛剛建立了一個新的 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 目錄並greping 術語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

有兩種可能的修復方法:

  1. 長期的解決方法是使用 fcntl 機製而不是預設機制,這將包括創建互斥文件,授予它們權限,設置套接字,監視它們,以及我不會在這裡討論的一大堆痛苦(主要是因為它高於我的工資等級)
  2. 簡單的解決方法是在 中註釋掉 mutex 行/etc/apache2/apache.conf,如下所示:

#Mutex file:${APACHE_LOCK_DIR} default

…然後導致 Apache 使用預設機制。

引用自:https://serverfault.com/questions/856561