Проверка конфига apache на ошибки

I’m looking for a command that checks the validity of the config files in Apache server on both Debian and RHEL distros. I need to do this prior to restart, so there will be no downtime.

ivanleoncz's user avatar

ivanleoncz

1,6335 gold badges19 silver badges32 bronze badges

asked Feb 7, 2011 at 10:14

Sigtran's user avatar

answered Feb 7, 2011 at 10:16

keatch's user avatar

keatchkeatch

4,4061 gold badge15 silver badges3 bronze badges

4

The Apache config test (apachectl configtest, or its equivalents) only tests the config file (and the files it recursively includes) for valid syntax. However, the original question asked for preventing downtime. Even when apachectl configtest does not return an error, an actual restart may still fail, causing downtime.

Common causes for such failures include missing or inaccessible SSL certificates, missing directories for log files or a missing website root directory. Often, such errors are caused by removing a vhost’s directory without removing the vhost Apache config file. It is highly recommended to use a tool like puppet or ansible to prevent such inconsistencies.

Seeing that this question is the number one hit when googling «apache config lint» I thought I’d mention this little detail…

answered Feb 19, 2019 at 11:39

BertD's user avatar

BertDBertD

2612 silver badges3 bronze badges

9

apachectl configtest is the correct answer.
Unfortunately I’ve got a windows installation where apachectl is missing.
Here calling httpd also helps.

answered Nov 16, 2015 at 6:09

Matthias M's user avatar

Matthias MMatthias M

2212 silver badges4 bronze badges

What I usually do is

apache2ctl -t && apache2ctl graceful

answered Jun 21, 2020 at 10:40

mivk's user avatar

mivkmivk

3,8312 gold badges37 silver badges32 bronze badges

2

There is always a good idea to take a look at the error logs.

less /var/log/httpd/error_log

— Paul

answered Dec 6, 2022 at 11:30

YateBTS's user avatar

1

I have actually tried before:

apachectl configtest

We can actually see the status code to know the error:

/etc/init.d/apache2 restart; systemctl status apache2.service

● apache2.service — The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2021-05-30 17:16:45 +08; 41ms ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 168391 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
CPU: 67ms

May 30 17:16:45 kali systemd[1]: Starting The Apache HTTP Server…
May 30 17:16:45 kali apachectl[168394]: AH00526: Syntax error on line
13 of /etc/apache2/mods-enabled/security2.conf

answered May 30, 2021 at 9:17

Alvin567's user avatar

Alvin567Alvin567

1111 silver badge7 bronze badges

11 января, 2018 1:44 пп
4 823 views
| Комментариев нет

Linux, VPS

Apache – это популярный веб-сервер с открытым исходным кодом, который отличается гибкостью, производительностью и широкой поддержкой. Данный мануал ознакомит вас с общими процедурами по поддержке Apache, включая управление сервисом, работу с виртуальными хостами и редактирование конфигураций.

Примечание: Мануал предназначен для пользователей, которые работают с Apache в Ubuntu. Если вы используете CentOS или другой дистрибутив RHEL, обратитесь к мануалу Установка LAMP stack на CentOS 7.

Каждый раздел может использоваться независимо от других, поэтому вы можете пропустить разделы, которые вам не нужны. Все условные значения в командах выделены красным; вместо этих значений вы можете подставить свои данные.

Каждый раздел предлагает ссылки на другие руководства, с которыми можно проконсультироваться.

Установка Apache

Чтобы установить сервис Apache, обновите индекс пакетов и запустите следующую команду:

sudo apt-get update
sudo apt-get install apache2

Читайте также: Установка веб-сервера Apache в Ubuntu 16.04

Автозагрузка Apache

Сервис Apache запускается автоматически. Если вы хотите изменить это поведение, введите:

sudo systemctl disable apache2.service

Чтобы снова добавить Apache в автозагрузку, введите:

sudo systemctl enable apache2.service

Управление сервисом Apache

Чтобы остановить сервер Apache, введите следующую команду:

sudo systemctl stop apache2

Чтобы запустить сервер Apache, введите:

sudo systemctl start apache2

Чтобы остановить сервис и запустить его снова, введите:

sudo systemctl restart apache2

Если вы изменили конфигурацию, вы можете перезагрузить Apache в текущей сессии. Введите следующую команду:

sudo systemctl reload apache2

Читайте также: Основы Systemd: управление сервисами и журналирование

Проверка состояния Apache

Чтобы проверить состояние Apache, введите команду:

sudo systemctl status apache2

Эта команда сообщит, работает ли Apache и покажет вам последние несколько строк логов.

Создание корневого каталога для статического сайта

При создании сайтов на Apache разработчики часто используют виртуальные хосты – это хосты, которые обслуживают отдельные сайты или домены. Для этого нужно создать document root, каталог верхнего уровня, который Apache проверяет при обслуживании контента.

sudo mkdir -p /var/www/example.com/public_html

Передайте права на каталог пользователю с доступом к sudo.

sudo chown -R $USER:$USER /var/www/example.com/public_html

Предоставьте остальным пользователям права на чтение контента:

find /var/www -type d -exec chmod 775 {} ;

Читайте также: Привилегии в Linux: что это и как с этим работать

Помните, что права доступа должны меняться в соответствии с ситуацией.

Создание корневого каталога для динамических файлов

Если ваш сайт использует динамические модули типа PHP, создайте каталог document root для этих файлов:

sudo mkdir -p /var/www/example.com/public_html

Передайте права на каталог пользователю sudo и группе www-data:

sudo chown -R 8host:www-data /var/www/example.com/public_html

Изменение конфигурации

При работе с виртуальными хостами необходимо изменить параметры конфигурации и добавить данные о домене, чтобы сервер Apache мог правильно реагировать на запросы.

Откройте файл виртуального хоста:

sudo nano /etc/apache2/sites-available/example.com.conf

Измените следующие строки:

ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html

После изменения файл будет выглядеть так:

<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Прежде чем сохранить файл, убедитесь, что в директивах нет ошибок.

Читайте также: Настройка виртуальных хостов Apache в Ubuntu 16.04

Включение и отключение конфигурационных файлов

Виртуальные хосты

Чтобы включить виртуальный хост, введите:

sudo a2ensite example.com.conf

Чтобы отключить конфигурационный файл (в данном примере это стандартный виртуальный хост):

sudo a2dissite 000-default.conf

Модули

Чтобы включить модули из каталога /etc/apache2/mods-available, введите:

sudo a2enmod example_mod

Чтобы отключить конкретный модуль:

sudo a2dismod example_mod

Конфигурационные файлы

Чтобы включить конфигурационные файлы из каталога /etc/apache2/conf-available (файлы, не связанные с виртуальными хостами), введите:

sudo a2enconf example-conf

Чтобы отключить файл, введите:

sudo a2disconf example-conf

Тестирование конфигурации

Каждый раз, когда вы вносите изменения в конфигурационные файлы Apache, обязательно выполните следующую команду, чтобы проверить наличие синтаксических ошибок:

sudo apache2ctl configtest

Важные файлы и каталоги Apache

Контент

Каталог /var/www/html хранит весь контент сайта (это корневой каталог сайта). Вы можете изменить стандартные настройки Apache и указать другие каталоги в var/www.

Конфигурация сервера

  • /etc/apache2: конфигурационный каталог Apache (здесь хранятся все конфигурационные файлы веб-сервера).
  • /etc/apache2/apache2.conf: главный конфигурационный файл веб-сервера, в котором находятся все глобальные параметры. Все остальные файлы загружаются через этот файл. Также тут хранятся директивы FollowSymLinks, которые отвечают за включение и отключение конфигурационных файлов.
  • /etc/apache2/sites-available/: здесь находятся все виртуальные хосты (в том числе и отключенные). В этом каталоге происходят все изменения в настройке виртуального хоста. Эти файлы включаются с помощью команды a2ensite.
  • /etc/apache2/sites-enabled/: здесь хранятся файлы включенных виртуальных хостов. При запуске или перезагрузке Apache читает конфигурационные файлы и ссылки в этом каталоге, чтобы собрать полную конфигурацию.
  • /etc/apache2/conf-available и /etc/apache2/conf-enabled: работают по тому же принципу, что и sites-available и sites-enabled. Эти каталоги предназначены для хранения фрагментов конфигурации, которые не входят в виртуальные хосты.
  • /etc/apache2/mods-available и /etc/apache2/mods-enabled: эти каталоги работают аналогичным образом. Они предназначены для хранения модулей. В них находятся файлы двух типов: файлы с расширением .load загружают модули, а файлы .conf хранят их конфигурации.

Логи

  • /var/log/apache2/access.log – это лог, который регистрирует все запросы Apache (если в конфигурации веб-сервера не сказано другого).
  • /var/log/apache2/error.log – это лог ошибок. Настроить уровень логирования можно с помощью параметра LogLevel в /etc/apache2/apache2.conf.

Другой способ доступа к информации о компонентах Apache – через journald. Этот инструмент собирает информацию логов приложений и ядра. Чтобы просмотреть записи для модуля Apache, введите:

sudo journalctl -u apache2

Заключение

Данный мануал перечислил общие процедуры по поддержке сервера Apache. Чтобы узнать больше о работе с Apache, ознакомьтесь со следующими руководствами:

  • Установка стека LAMP в Ubuntu 16.04
  • Перемещение корневого каталога Apache в Ubuntu 16.04
  • Создание сертификата Let’s Encrypt для Apache в Ubuntu 16.04
  • Использование файла .htaccess
  • Перезапись URL-адресов на Apache в Ubuntu 16.04
  • Настройка Apache как обратного прокси-сервера с помощью mod_proxy в Ubuntu 16.04

Tags: Apache

С помощью опции -t вы можете проверить правильность конфигурации веб-сервера без запуска Apache:

c:ServerbinApache24binhttpd.exe -t

Пример вывода:

Syntax OK

Он означает, что с точки зрения синтаксиса в конфигурационном файле всё в порядке и веб-сервер может быть успешно запущен.

Кроме проверки дефолтного конфигурационного файла можно проверить файл настроек расположенной в любом месте в системе. Для этого используйте опцию -f, после которой укажите файл для проверки:

c:ServerbinApache24binhttpd.exe -f c:ServerbinApache24conftest_httpd.conf -t

Пример вывода, если в конфигурации обнаружена ошибка:

AH00526: Syntax error on line 60 of C:/Server/bin/Apache24/conf/test_httpd.conf:
Invalid command 'Lis7ten', perhaps misspelled or defined by a module not included in the server configuration

Как узнать, какие конфигурационные файлы использует Apache

Чтобы узнать, какой файл настроек использует Apache, а также где находится конфигурационный файл Apache, используйте сочетание опций -t -D DUMP_INCLUDES:

c:ServerbinApache24binhttpd.exe -t -D DUMP_INCLUDES

Пример вывода:

Included configuration files:
  (*) C:/Server/bin/Apache24/conf/httpd.conf

Как узнать все виртуальные хосты на сервере

Для показа всех настроенных на сервере виртуальных хостов Apache, запустите с опцией -t -D DUMP_VHOSTS:

c:ServerbinApache24binhttpd.exe -t -D DUMP_VHOSTS

Как узнать, с какими настройками запущен Apache

Для показа всех значений директив веб-сервера, запустите его с опциями -t -D DUMP_RUN_CFG:

c:ServerbinApache24binhttpd.exe -t -D DUMP_RUN_CFG

Пример вывода:

ServerRoot: "C:/Server/bin/Apache24"
Main DocumentRoot: "C:/Server/data/htdocs/"
Main ErrorLog: "C:/Server/bin/Apache24/logs/error.log"
Mutex default: dir="C:/Server/bin/Apache24/logs/" mechanism=default
Mutex rewrite-map: using_defaults
PidFile: "C:/Server/bin/Apache24/logs/httpd.pid"
Define: DUMP_RUN_CFG
Define: SRVROOT=c:/Server/bin/Apache24

Кстати, можно использовать опцию -S, которая является сокращением для сочетаний -t -D DUMP_VHOSTS -D DUMP_RUN_CFG.

Как узнать все загруженные модули Apache

Чтобы вывести список модулей веб-сервера (например, чтобы узнать, подхватились ли настройки включающие PHP модуль) запустите программу с опциями -t -D DUMP_MODULES:

c:ServerbinApache24binhttpd.exe -t -D DUMP_MODULES

Пример вывода:

Loaded Modules:
 core_module (static)
 win32_module (static)
 mpm_winnt_module (static)
 http_module (static)
 so_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 asis_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 dir_module (shared)
 env_module (shared)
 include_module (shared)
 isapi_module (shared)
 log_config_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 php7_module (shared)

Вместо длинной записи -t -D DUMP_MODULES можно использовать сокращение -M.

Как узнать настройки, с которыми скомпилирован Apache

При компиляции веб-сервера Apache устанавливаются некоторые параметры, в том числе значение некоторых настроек по умолчанию. Чтобы увидеть их все, используйте опцию -V:

c:ServerbinApache24binhttpd.exe -V

Пример вывода:

Server version: Apache/2.4.39 (Win64)
Apache Lounge VC15 Server built:   May 29 2019 11:22:50
Server's Module Magic Number: 20120211:84
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     WinNT
  threaded:     yes (fixed thread count)
    forked:     no
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/apache"
 -D SUEXEC_BIN="/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error.log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

Как узнать скомпилированные модули Apache

Для показа скомпилированных модулей Apache сделайте запуск с опцией -l:

c:ServerbinApache24binhttpd.exe -l

Пример вывода:

Compiled in modules:
  core.c
  mod_win32.c
  mpm_winnt.c
  http_core.c
  mod_so.c

Связанные статьи:

  • Как узнать путь до конфигурационного файла Apache (100%)
  • Как запустить два экземпляра Apache (100%)
  • Настройка веб-сервера Apache для запуска программ Perl на Windows (100%)
  • Настройка веб-сервера Apache для запуска программ Ruby на Windows (100%)
  • Виртуальный хост Apache по умолчанию. _default_ и catch-all в Apache (100%)
  • Установка Apache, PHP, MySQL и phpMyAdmin на Windows XP (RANDOM — 65.3%)

You need to restart your Apache service for any changes you made to the config file to be effective. You must then test your Apache config for errors before restarting the service, as it could fail to start and disrupt the availability of the websites it is hosting.

Apache has a built-in feature to test the validity of the config file that you can use to catch errors or warnings. You can repeatedly check the configuration files until all the errors and warnings are gone before restarting the service.

You can use both apachectl and httpd tools to test your Apache configuration from the terminal.

Steps to test Apache configuration without restarting service:

  1. Launch your preferred terminal application.

  2. Edit Apache configuration file using your preferred text editor.

    $ sudo vi /etc/apache2/apache2.conf
  3. Test Apache configuration file syntax using apachectl or similar binaries.

    $ sudo apachectl configtest
    AH00543: apache2: bad user name username
    Action 'configtest' failed.
    The Apache error log may have more information.

    Use -t option instead of configtest if you’re using httpd or apache and not apachectl

  4. Continue editing and testing your Apache configuration until the configtest option reports no error.

    $ sudo apachectl configtest
    Syntax OK
  5. Restart Apache service for the changes to take effect.

    $ sudo systemctl restart apache2 #Ubuntu, Debian, openSUSE and SLES
    $ sudo systemctl restart httpd # CentOS and Red Hat

Discuss the article:

Comment anonymously. Login not required.

HTTP-сервер Apache — самый популярный веб-сервер в мире. Это бесплатный кроссплатформенный HTTP-сервер с открытым исходным кодом, обеспечивающий мощные функции, которые могут быть расширены с помощью самых разных модулей.

Если вы разработчик или системный администратор, скорее всего, вы регулярно имеете дело с Apache.

В этом руководстве мы рассмотрим наиболее важные и часто используемые команды Apache, включая запуск, остановку и перезапуск Apache.

Подготовка

Мы предполагаем, что вы вошли в систему как root или пользователь с привилегиями sudo. Команды в этом руководстве должны работать в любом современном дистрибутиве Linux, таком как Ubuntu 18.04, CentOS 7 и Debian 9 .

В Ubuntu и Debian служба Apache называется apache2 , тогда как в системе на основе Red Hat, такой как CentOS, имя службы Apache — httpd .

Если вы используете CentOS, просто замените apache2 на httpd в приведенных ниже командах.

Запустите Apache

Запустить Apache довольно просто. Просто введите следующую команду.

sudo systemctl start apache2

В случае успеха команда не производит никакого вывода.

Если вы используете более старый дистрибутив Linux без systemd, для запуска Apache введите:

sudo service apache2 start

Вместо того, чтобы вручную запускать службу Apache, рекомендуется настроить ее запуск при загрузке системы:

sudo systemctl enable apache2

Остановить Apache

Остановка Apache позволяет быстро завершить основной процесс Apache и все дочерние процессы, даже если есть открытые соединения.

Чтобы остановить Apache, выполните одну из следующих команд:

sudo systemctl stop apache2sudo service apache2 stop

Перезагрузите Apache

Параметр перезапуска — это быстрый способ остановить, а затем запустить сервер Apache.

Используйте одну из следующих команд для перезапуска:

sudo systemctl restart apache2sudo service apache2 restart

Это команда, которую вы, вероятно, будете использовать наиболее часто.

Перезагрузить Apache

Вам необходимо перезагрузить или перезапустить Apache всякий раз, когда вы вносите изменения в его конфигурацию.

При перезагрузке основной процесс apache завершает работу дочерних процессов, загружает новую конфигурацию и запускает новые дочерние процессы.

Чтобы перезагрузить Apache, используйте одну из следующих команд:

sudo systemctl reload apache2sudo service apache2 reload

Проверить конфигурацию Apache

Каждый раз, когда вы вносите изменения в файл конфигурации сервера Apache, рекомендуется протестировать конфигурацию перед перезапуском или перезагрузкой службы.

Используйте следующую команду, чтобы проверить конфигурацию Apache на наличие синтаксических или системных ошибок:

sudo apachectl -t

Результат будет выглядеть так:

Syntax OK

Если есть ошибки, команда выводит подробное сообщение.

Просмотр статуса Apache

Чтобы проверить статус службы Apache, используйте следующую команду:

sudo systemctl status apache2

Результат будет выглядеть примерно так:

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: 
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Wed 2019-05-29 21:16:55 UTC; 6s ago
  Process: 938 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
  Process: 956 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCES
 Main PID: 997 (apache2)
    Tasks: 55 (limit: 1152)
   CGroup: /system.slice/apache2.service
           ├─ 997 /usr/sbin/apache2 -k start
           ├─ 999 /usr/sbin/apache2 -k start
           └─1000 /usr/sbin/apache2 -k start

Проверить версию Apache

Иногда вам может потребоваться узнать версию вашего Apache, чтобы вы могли отладить проблему или определить, доступна ли определенная функция.

Вы можете проверить свою версию Apache, запустив:

sudo apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2019-04-03T13:22:37

Параметр -V (верхний регистр) показывает версию Apache вместе с параметром конфигурации.

sudo apache2 -V

Выводы

В этом руководстве мы показали вам некоторые из наиболее важных команд Apache. Если вы хотите узнать больше о командной строке Apache, посетите документацию Apache.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

How do I check for syntax errors in the configuration of my apache server without having to restart or reload the rules? This would be preferably done from the terminal/command line.

asked Jul 11, 2012 at 23:36

Cosmin Atanasiu's user avatar

Cosmin AtanasiuCosmin Atanasiu

2,4723 gold badges21 silver badges26 bronze badges

If syntax is ok:

sudo apache2ctl configtest

Will reply with:

Syntax OK

answered Oct 29, 2019 at 2:17

Nahid's user avatar

You can use this as well if you don’t have httpd.

apachectl configtest

answered Aug 3, 2018 at 5:49

prashant's user avatar

prashantprashant

2,6785 gold badges25 silver badges40 bronze badges

On linux, you use

/usr/sbin/httpd -t

On windows, you would use the equivalent command to the httpd.exe file

answered Jul 11, 2012 at 23:36

Cosmin Atanasiu's user avatar

Cosmin AtanasiuCosmin Atanasiu

2,4723 gold badges21 silver badges26 bronze badges

After making changes to the Apache configuration file, testing the configuration before implementing it is a good practice.


To test the Apache configuration file for errors, use the following command:

apachectl configtest

If the configuration file is fine, this command will return Syntax Ok. Otherwise, it will return detailed information about the error discovered.

If apachectl is not in your PATH and you do not know where it is, refer to the tech recipe Find a file by name to find the location of apachectl, then run it with the fully qualified path. Note the following example:

/usr/local/apache/bin/apachectl configtest

Quinn McHenry

Quinn McHenry

Quinn was one of the original co-founders of Tech-Recipes. He is currently crafting iOS applications as a senior developer at Small Planet Digital in Brooklyn, New York.

Понравилась статья? Поделить с друзьями:
  • Проверка контроллера домена на ошибки
  • Проверка компьютера на ошибки через cmd
  • Проверка компьютера на ошибки командная строка
  • Проверка компьютера на ошибки и неисправности
  • Проверка компьютера на ошибки windows 10 программа