Решение ошибки Invalid command ‘RewriteEngine’

Заметил однажды ошибку после установки FreePBX:

Invalid command ‘RewriteEngine’, perhaps misspelled or defined by a module not included in the server configuration

Для её решения нужно активировать модуль rewrite в apache2:

sudo a2enmod rewrite

И перезапустить apache2 чтобы применились изменения:

sudo service apache2 restart

Все.

Решение ошибки Invalid command ‘AuthGroupFile’

Заметил однажды следующую ошибку:

AH00526: Syntax error on line 26 of /etc/apache2/sites-enabled/000-default.conf:
Invalid command ‘AuthGroupFile’, perhaps misspelled or defined by a module not included in the server configuration
Action ‘configtest’ failed.
The Apache error log may have more information.

Решается она просто активацией модуля:

sudo a2enmod authz_groupfile

Перезапустим apache2 чтобы применить изменения:

sudo service apache2 restart

Все.

Решение ошибки «client denied by server configuration»

Заметил однажды в браузере ошибку открытия установленного GoIP SMS крипта:

[authz_core:error] [pid 23415] [client 192.168.56.1:50388] AH01630: client denied by server configuration: /usr/local/goip/

Как оказалось работа скрипта предполагалась в apache2 версии 2.2 и в файле /etc/apache2/conf-enabled/goip.conf были указаны параметры:

Order allow,deny
Allow from all

А в моем случае был установлен apache2 версии более новой 2.4, в котором управление доступом настраивается немного иначе, и чтобы устранить ошибку изменим указанные выше параметры на:

Require all granted

Либо чтобы ограничить доступ оп IP, разрешив локально и указанным адресам:

Require local
Require ip 192.168.56.1 192.168.22.10

И перезапустим apache2 чтобы применить изменения:

sudo service apache2 restart

Установка модуля PageSpeed

На тесте утановлю модуль PageSpeed в Ubuntu Server 14.04.5 LTS и CentOS

Страница загрузки с разными версиями модуля https://modpagespeed.com/doc/download
https://developers.google.com/speed/pagespeed/module/

И так, скачаем стабильную версию для Debian/Ubuntu:

sudo wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb

Или для CentOS/Fedora:

https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm

Установим в Ubuntu, модуль автоматически активируется:

sudo dpkg -i mod-pagespeed-*.deb
sudo apt-get -f install

В CentOS так:

sudo yum install at
sudo rpm -U mod-pagespeed-*.rpm

Перезапустим apache2 чтобы применить изменения:

sudo service apache2 restart
sudo /etc/init.d/apache2 restart

Все, модуль установлен.

Обновлять в дальнейшем он будет вместе с системой командами:

sudo apt-get update
sudo apt-get upgrade

При необходимости деактивировать/активировать модуль можно командами:

sudo a2dismod pagespeed
sudo a2enmod pagespeed

Либо полностью удалить:

sudo apt-get remove mod-pagespeed-stable
sudo yum remove mod-pagespeed-stable

Файлы конфигурации модуля находятся по адресам:
etc/apache2/mods-available/pagespeed.conf
/etc/httpd/conf.d/

Решение ошибки Permission denied: .htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable

Заметил как-то следующую ошибку:

[Mon Sep 05 10:24:38 2016] [crit] [client 192.168.1.1] (13)Permission denied: /home/user/public_html/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable

До появлением ошибки я перемещал файлы через sudo (от root пользователя) и чтобы вернуть права выполнил команду:

sudo chown user:user -R /home/user/public_html

Которая изменила владельца на указанного во всех подпапках и файлах, однако на саму директорию public_html (не её содержимое) должен был быть указан другой владелец, из-за чего apache2 и писал что доступ запрещен. По этому если указать на public_html пользователя и группу от которого работает apache2, то ошибка исчезнет.
Может также помочь указание прав 777 на эту папку, это даст полный доступ всем пользователям.

Мониторинг параметров Apache2 в Zabbix

Установим необходимые компоненты:

sudo apt-get install curl

Активируем модуль информации об apache2 (обычно он активирован изначально):

sudo a2enmod info

Откроем файл конфигурации модуля и укажем IP-адрес zabbix сервера чтобы разрешить ему просмотр информации об apache2 (если apache2 на локальной машине, то доступ обычно разрешен, указанием local или 127.0.0.1):

sudo nano /etc/apache2/mods-enabled/status.conf

В редакторе nano CTRL+X используются для выхода и y/n для сохранения или отмены изменений. Пример указания IP:

<Location /server-status>
    SetHandler server-status
    Require local
    Require ip 192.168.1.5
</Location>

Перезапустим web-сервер чтобы применить изменения:

sudo service apache2 restart

Теперь информация об apache2 доступна через браузер по ссылке http://ХОСТ/server-status

Перейдем к Zabbix. Создадим папку для скриптов если ее нету:

mkdir /etc/zabbix/scripts/
chown root:zabbix -R /etc/zabbix/scripts/
chmod 750 /etc/zabbix/scripts/

В файле конфигурации zabbix сервера укажем путь к этой папке:

sudo nano /etc/zabbix/zabbix_server.conf
ExternalScripts=ПУТЬ

Теперь приведу содержимое самого скрипта:

#!/bin/bash
if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
  exit 1
fi
##### PARAMETERS #####
RESERVED="$1"
METRIC="$2"
URL="$3"
STATSURL="${URL}?auto"
#
CACHE_TTL="55"
CACHE_FILE="/tmp/zabbix.apache2.`echo ${URL} | md5sum | cut -d" " -f1`.cache"
EXEC_TIMEOUT="2"
NOW_TIME=`date '+%s'`
##### RUN #####
if [ -s "${CACHE_FILE}" ]; then
  CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
else
  CACHE_TIME=0
fi
DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
#
if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
  sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
  echo "" >> "${CACHE_FILE}" # !!!
  DATACACHE=`curl -sS --insecure --max-time ${EXEC_TIMEOUT} "${STATSURL}" 2>&1`
  echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
  echo "URL=${URL}"  >> "${CACHE_FILE}" # !!!
  chmod 640 "${CACHE_FILE}"
fi
#
if [ "${METRIC}" = "accesses" ]; then
  cat "${CACHE_FILE}" | grep -i "accesses" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "kbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "kbytes" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "cpuload" ]; then
  cat "${CACHE_FILE}" | grep -i "cpuload" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "uptime" ]; then
  cat "${CACHE_FILE}" | grep -i "uptime" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgreq" ]; then
  cat "${CACHE_FILE}" | grep -i "ReqPerSec" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgreqbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "BytesPerReq" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "avgbytes" ]; then
  cat "${CACHE_FILE}" | grep -i "BytesPerSec" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "busyworkers" ]; then
  cat "${CACHE_FILE}" | grep -i "BusyWorkers" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "idleworkers" ]; then
  cat "${CACHE_FILE}" | grep -i "idleworkers" | cut -d':' -f2 | head -n1
fi
if [ "${METRIC}" = "totalslots" ]; then
  cat "${CACHE_FILE}" | grep -i "Scoreboard" | cut -d':' -f2 | sed -e 's/ //g' | wc -c | awk '{print $1-1}'
fi
#
exit 0

Сделаем файл скрипта исполняемым:

chown root:zabbix /etc/zabbix/scripts/apache2-status.sh
chmod 550 /etc/zabbix/scripts/apache2-status.sh

Пример проверки скрипта:

sudo -u zabbix /etc/zabbix/scripts/apache2-status.sh none accesses http://ХОСТ/server-status

Откроем файл конфигурации zabbix агента в редакторе:

sudo nano /etc/zabbix/zabbix_agentd.conf

И укажем следующие параметры:

UserParameter=apache2[*],/etc/zabbix/scripts/apache2-status.sh "none" "$1" "$2"

Перезапустим zabbix агент чтобы применить изменения:

sudo /etc/init.d/zabbix-agent restart

Проверим:

zabbix_get -s 127.0.0.1 -k "apache2[accesses,http://ХОСТ/server-status]"

Теперь создадим шаблон и добавим элементы данных, пример создаваемых элементов данных:

apache2[КЛЮЧ,http://ХОСТ/server-status]

Экспортировал готовый шаблон — apache2-status

К наблюдаемому хосту также обязательно добавим макрос:

Макрос: {$APACHE_STATS_URL}
Значение: http://ХОСТ/server-status

Все.

Понижение версии Apache 2.4 до 2.2

Пришлось как-то раз понизить чтобы заработал веб-интерфейс биллинга ABillS.

Для начала любой из команд удалим apache2 если он установлен:

sudo aptitude remove apache2
sudo apt-get remove apache2

Создадим файл в папке /etc/apt/sources.list.d/:

sudo nano /etc/apt/sources.list.d/ubuntu1204.list

Вставим в него текст:

deb http://ru.archive.ubuntu.com/ubuntu/ precise main

Создадим еще файл:

sudo nano /etc/apt/preferences.d/apache22

Вставим в него содержимое:

Package: apache*
Pin: release a=precise
Pin-Priority: 500

Выполним:

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install apache2

Все.