Я только что установил новый сервер 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
ing в каталог Apache и grep
термин 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
. Запуск ls
по каталогам дает следующее:
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 выполняется как пользователь www-data
. Я предполагаю, что он не может получить доступ к папке /var/run/apache2/ssl_scache
? Но, как я уже сказал, я не гуру.
Может ли кто-нибудь понять, почему я продолжаю AH02026
ошибки?
Итак, я нашел первопричину проблемы и решение. Оказывается, есть ошибка в Apache2.4 на Ubuntu 14.04 и 16.04 (см. 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
Есть два возможных исправления:
Простое решение - закомментировать строку мьютекса в /etc/apache2/apache.conf
, вот так:
#Mutex file:${APACHE_LOCK_DIR} default
... что затем приводит к тому, что Apache использует механизм по умолчанию.