Назад | Перейти на главную страницу

Как решить 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, но это вне моей зоны комфорта, поэтому мне нужен совет / руководство эксперта.

cding в каталог 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

Есть два возможных исправления:

  1. Долгое исправление заключается в использовании механизма fcntl вместо механизма по умолчанию, который будет включать создание файлов мьютексов, предоставление им разрешений, настройку сокетов, их мониторинг и целую кучу боли, о которой я не буду вдаваться здесь (в основном потому, что это выше моей зарплаты)
  2. Простое решение - закомментировать строку мьютекса в /etc/apache2/apache.conf, вот так:

    #Mutex file:${APACHE_LOCK_DIR} default

... что затем приводит к тому, что Apache использует механизм по умолчанию.