Apache не запускается

Вопрос или проблема

Когда я выполняю sudo service httpd reload, мой apache не запускается. Я проверил файл конфигурации с помощью sudo httpd -d, и все в порядке. У меня есть простой файл vhost. Вот из error_log

tail -f /var/log/httpd/error_log
AH00015: Невозможно открыть журналы
[Mon Mar 20 08:58:36.149840 2017] [core:notice] [pid 14136] Политика SELinux включена; httpd работает в контексте system_u:system_r:httpd_t:s0
[Mon Mar 20 08:58:36.152997 2017] [suexec:notice] [pid 14136] AH01232: механизм suEXEC включен (обертка: /usr/sbin/suexec)
[Mon Mar 20 08:58:36.237465 2017] [auth_digest:notice] [pid 14136] AH01757: генерация секрета для дигест-аутентификации ...
[Mon Mar 20 08:58:36.239799 2017] [lbmethod_heartbeat:notice] [pid 14136] AH02282: Нет slotmem от mod_heartmonitor
[Mon Mar 20 08:58:36.351308 2017] [mpm_prefork:notice] [pid 14136] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.6.30 настроен -- продолжается нормальная работа
[Mon Mar 20 08:58:36.351719 2017] [core:notice] [pid 14136] AH00094: Командная строка: '/usr/sbin/httpd -D FOREGROUND'
[Mon Mar 20 08:59:47.740872 2017] [mpm_prefork:notice] [pid 14136] AH00171: Запрошен плавный перезапуск, выполняем перезапуск
(13)Отказано в доступе: AH00091: httpd: не удалось открыть файл журнала ошибок /var/www/html/logs/error.log.
[Mon Mar 20 08:59:47.916267 2017] [:emerg] [pid 14136] AH00019: Невозможно открыть журналы, выходим
AH00019

Насколько я понимаю, проблема в том, что apache не может создать определенные файлы в файле vhost. Но я не вижу ничего плохого в конфигурации, ни в разрешениях пользователей указанной папки, и я тоже их не изменял. И я не уверен, связано ли это с испорченными правами в /var/www/html или с файерволом.

ll /var/www/
total 8
drwxr-xr-x. 2 root root 4096 Nov 14 18:05 cgi-bin
drwxr-xr-x. 3 root root 4096 Nov 14 18:05 html

Вот содержимое httpd.conf:

# Это основной файл конфигурации Apache HTTP сервера. Он содержит
# директивы конфигурации, которые дают серверу его инструкции.
# См. <URL:http://httpd.apache.org/docs/2.4/> для подробной информации.
# В частности, см.
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# для обсуждения каждой директивы конфигурации.
#
# Не просто читайте инструкции здесь, не понимая
# что они делают. Они здесь только как подсказки или напоминания. Если вы не уверены,
# проконсультируйтесь с онлайн-документацией. Вы предупреждены.
#
# Имена файлов конфигурации и журналов: Если имена файлов, которые вы указываете для многих
# из контрольных файлов сервера, начинаются с "https://unix.stackexchange.com/" (или "drive:/" для Win32), 
# сервер будет использовать этот явный путь. Если имена файлов *не* начинаются 
# с "https://unix.stackexchange.com/", значение ServerRoot будет добавлено -- так что 'log/access_log'
# с установленным в '/www' значением ServerRoot будет интерпретировано сервером как '/www/log/access_log', а '/log/access_log' будет
# интерпретировано как '/log/access_log'.

#
# ServerRoot: Вершина дерева каталогов, под которым находятся
# конфигурационные, ошибочные и журнальные файлы сервера.
#
# Не добавляйте слеш в конце пути директории. Если вы указываете
# ServerRoot на не локальный диск, обязательно укажите локальный диск в
# директиве Mutex, если используются основанные на файлах мьютексы. Если вы хотите поделиться
# тем же ServerRoot для нескольких демонов httpd, вам нужно будет изменить
# как минимум PidFile.
#
ServerRoot "/etc/httpd"

#
# Listen: Позволяет привязать Apache к определенным IP-адресам и/или
# портам, вместо по умолчанию. См. также директиву <VirtualHost>.
#
# Измените это, чтобы прослушивать определенные IP-адреса, как показано ниже, чтобы
# предотвратить Apache от захвата всех привязанных IP-адресов.
#
#Listen 12.34.56.78:80
Listen 80

#
# Поддержка динамических общих объектов (DSO)
#
# Чтобы иметь возможность использовать функциональность модуля, который был построен как DSO, вам 
# нужно разместить соответствующие строки `LoadModule` в этом месте, чтобы
# директивы, содержащиеся в нем, были фактически доступны _до_ их использования.
# Статически скомпилированные модули (те, что указаны в `httpd -l`) не нуждаются
# в загрузке здесь.
#
# Пример:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf

#
# Если вы хотите, чтобы httpd работал под другим пользователем или группой, вы должны сначала запустить
# httpd от имени root, и он переключится.
#
# Пользователь/Группа: Имя (или #номер) пользователя/группы, под которым будет работать httpd.
# Обычно хорошей практикой является создание выделенного пользователя и группы для
# запуска httpd, как и для большинства системных служб.
#
User apache
Group apache

# 'Главная' конфигурация сервера
#
# Директивы в этом разделе настраивают значения, используемые 'главным'
# сервером, который отвечает на любые запросы, которые не обрабатываются
# определением <VirtualHost>. Эти значения также обеспечивают значения по умолчанию для
# любых контейнеров <VirtualHost>, которые вы можете определить позже в файле.
#
# Все эти директивы могут появляться внутри контейнеров <VirtualHost>,
# в этом случае эти значения по умолчанию будут переопределены для
# определяемого виртуального хоста.
#

#
# ServerAdmin: Ваш адрес, куда следует отправлять сообщения о проблемах с сервером.
# Этот адрес появляется на некоторых страницах, сгенерированных сервером, таких как документы об ошибках. Например, [email protected]
#
ServerAdmin root@localhost

#
# ServerName задает имя и порт, которые сервер использует для своей идентификации.
# Это обычно можно определить автоматически, но мы рекомендуем явно указать
# его, чтобы избежать проблем при запуске.
#
# Если ваш хост не имеет зарегистрированного DNS имени, введите его IP-адрес здесь.
#
#ServerName www.example.com:80

#
# Запретить доступ ко всей файловой системе вашего сервера. Вы должны
# явно разрешить доступ к веб-контенту в других
# блоках <Directory> ниже.
#
<Directory />
    AllowOverride none
    Require all denied
</Directory>

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

#
# DocumentRoot: Директория, из которой вы будете обслуживать свои
# документы. По умолчанию все запросы берутся из этой директории, но
# могут использоваться символические ссылки и псевдонимы для указания на другие местоположения.
#
DocumentRoot "/var/www/html"

#
# Расслабьте доступ к содержимому в /var/www.
#
<Directory "/var/www">
    AllowOverride None
    # Разрешить открытый доступ:
    Require all granted
</Directory>

# Дальнейшее расслабление доступа к каталогу по умолчанию:
<Directory "/var/www/html">
    #
    # Возможные значения для директивы Options: "None", "All",
    # или любая комбинация из:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Обратите внимание, что "MultiViews" должно быть указано *явно* --- "Options All"
    # этого не даст.
    #
    # Директива Options сложна и важна. Пожалуйста, смотрите
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # для получения дополнительной информации.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride контролирует, какие директивы могут быть размещены в файлах .htaccess.
    # Это может быть "All", "None", или любая комбинация ключевых слов:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

    #
    # Контролирует, кто может получать информацию с этого сервера.
    #
    Require all granted
</Directory>

#
# DirectoryIndex: задает файл, который Apache будет обслуживать, если каталог
# запрашивается.
#
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

#
# Следующие строки предотвращают просмотр файлов .htaccess и .htpasswd
# веб-клиентами.
#
<Files ".ht*">
    Require all denied
</Files>

#
# ErrorLog: Место расположения файла журнала ошибок.
# Если вы не указываете директиву ErrorLog внутри контейнера <VirtualHost>,
# сообщения об ошибках, относящиеся к этому виртуальному хосту, будут
# записываться здесь. Если вы *определяете* файл журнала ошибок для контейнера <VirtualHost>,
# ошибки этого хоста будут записываться там, а не здесь.
#
ErrorLog "logs/error_log"

#
# LogLevel: Управляет количеством сообщений, записываемых в error_log.
# Возможные значения включают: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn

<IfModule log_config_module>
    #
    # Следующие директивы определяют некоторые форматы псевдонимов для использования с
    # директивой CustomLog (см. ниже).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # Вам нужно включить mod_logio.c, чтобы использовать %I и %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    #
    # Местоположение и формат файла журнала доступа (Формат обычного журнала).
    # Если вы не определяете никаких файлов архивов доступа внутри контейнера <VirtualHost>,
    # они будут записываться здесь. Напротив, если вы *определяете*
    # файлы журналов доступа для каждого <VirtualHost>, транзакции будут
    # записываться в них и *не* в этом файле.
    #
    #CustomLog "logs/access_log" common

    #
    # Если вы предпочитаете файл журнала с доступом, агентом и информированием
    # (Формат комбинированного журнала) вы можете использовать следующую директиву.
    #
    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
    #
    # Redirect: Позволяет вам сообщить клиентам о документах, которые раньше
    # существовали в пространстве имен вашего сервера, но больше не существуют. Клиент
    # сделает новый запрос на документ по его новому местоположению.
    # Пример:
    # Redirect permanent /foo http://www.example.com/bar

    #
    # Alias: Соединяет веб-пути с файловыми путями и используется для
    # доступа к содержимому, которое не находится под DocumentRoot.
    # Пример:
    # Alias /webpath /full/filesystem/path
    #
    # Если вы добавите слеш в конце /webpath, сервер будет
    # требовать его наличия в URL. Вы также, вероятно,
    # потребуется предоставить раздел <Directory>, чтобы разрешить доступ к
    # файловому пути.

    #
    # ScriptAlias: Это управляет, какие директории содержат скрипты сервера.
    # ScriptAliases по существу такие же, как Aliases, за исключением того, что
    # документы в целевой директории обрабатываются как приложения и
    # запускаются сервером по запросу, а не как документы, отправляемые клиенту. 
    # Теми же правилами о завершающем "https://unix.stackexchange.com/" руководствуются директивы ScriptAlias
    # как и потери Aliases.
    #
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>

#
# "/var/www/cgi-bin" следует изменить на то, что в вашей ScriptAliased
# директории CGI существует, если у вас это настроено.
#
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    #
    # TypesConfig указывает на файл, содержащий список сопоставлений
    # от расширения имени файла к MIME-типу.
    #
    TypesConfig /etc/mime.types

    #
    # AddType позволяет добавить или переопределить MIME конфигурацию
    # указанный в TypesConfig для определенных типов файлов.
    #
    #AddType application/x-gzip .tgz
    #
    # AddEncoding позволяет вам иметь определенные браузеры, которые распаковывают 
    # информацию на лету. Примечание: не все браузеры поддерживают это.
    #
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    #
    # Если директивы AddEncoding выше закомментированы, то вы
    # вероятно, должны определить эти расширения, чтобы указать медиаподобия:
    #
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    #
    # AddHandler позволяет вам сопоставлять определенные расширения файлов с "обработчиками":
    # действия, не относящиеся к типу файла. Эти действия могут быть как встроены в сервер,
    # так и добавлены с помощью директивы Action (см. ниже).
    #
    # Чтобы использовать CGI-скрипты за пределами ScriptAliased директорий:
    # (Вам также нужно будет добавить "ExecCGI" к директиве "Options".)
    #
    #AddHandler cgi-script .cgi

    # Для карты типов (согласованные ресурсы):
    #AddHandler type-map var

    #
    # Фильтры позволяют вам обрабатывать содержимое до его отправки клиенту.
    #
    # Чтобы обработать .shtml файлы для серверных включений (SSI):
    # (Вам также нужно будет добавить "Includes" к директиве "Options".)
    #
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

#
# Укажите кодировку по умолчанию для всего обслуживаемого контента; это позволяет
# интерпретировать весь контент как UTF-8 по умолчанию. Чтобы использовать
# выбор браузера по умолчанию (ISO-8859-1), или разрешить тегам META
# в HTML-контенте переопределить этот выбор, закомментируйте эту
# директиву:
#
AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    #
    # Модуль mod_mime_magic позволяет серверу использовать различные подсказки из
    # содержимого самого файла, чтобы определить его тип. Директива MIMEMagicFile
    # сообщает модулю, где находятся определения подсказок.
    #
    MIMEMagicFile conf/magic
</IfModule>

#
# Настраиваемые ответы на ошибки бывают в трех вариантах:
# 1) простой текст 2) локальные перенаправления 3) внешние перенаправления
#
# Некоторые примеры:
#ErrorDocument 500 "Сервер совершил ошибку."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#

#
# EnableMMAP и EnableSendfile: На системах, которые поддерживают это,
# память-отображение или системный вызов sendfile могут использоваться для доставки
# файлов. Обычно это улучшает производительность сервера, но должно
# быть отключено при обслуживании с сетевых монтированных
# файловых систем или если поддержка этих функций иначе
# нарушена на вашей системе.
# Значения по умолчанию, если закомментированы: EnableMMAP On, EnableSendfile Off
#
#EnableMMAP off
EnableSendfile on

# Дополнительная конфигурация
#
# Загружать файлы конфигурации в каталоге "/etc/httpd/conf.d", если такие имеются.
IncludeOptional conf.d/*.conf

IncludeOptional sites-enabled/*.conf

А это мой файл vhost:

<VirtualHost *:80>

    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html
    ErrorLog /var/www/html/logs/error.log
    CustomLog /var/www/html/logs/requests.log combined
</VirtualHost>

Попробуйте создать файл "/var/www/html/logs/error.log" и после перезапуска добавьте свой собственный путь Errorlog.

Ответ или решение

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

(13)Permission denied: AH00091: httpd: could not open error log file /var/www/html/logs/error.log.
[Mon Mar 20 08:59:47.916267 2017] [:emerg] [pid 14136] AH00019: Unable to open logs, exiting

Этот фрагмент указывает на то, что сервер Apache не может открыть файл журнала ошибок /var/www/html/logs/error.log из-за недостатка прав доступа.

Шаги для устранения неполадок:

  1. Проверка прав доступа:
    Убедитесь, что директория /var/www/html/logs существует и Apache имеет необходимые права для записи в нее. Если директория отсутствует, вы можете создать ее следующей командой:

    sudo mkdir -p /var/www/html/logs

    После этого проверьте права доступа:

    sudo chown -R apache:apache /var/www/html/logs
    sudo chmod -R 755 /var/www/html/logs

    Это устанавливает пользователя apache (по умолчанию, в зависимости от конфигурации вашей системы) как владельца директории и дает ему права на запись.

  2. Проверка SELinux:
    Вы упомянули, что контекст SELinux активирован. Если у вас включен SELinux, он может блокировать доступ к ресурсам. Проверьте статус SELinux:

    sestatus

    Если он включен, вы можете временно установить его в режим разрешения:

    sudo setenforce 0

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

    sudo service httpd start

    Если это решит проблему, вам необходимо будет настроить политику SELinux для разрешения доступа к нужным ресурсам, а не оставлять SELinux в режиме разрешения.

  3. Проверка конфигурации Apache:
    Вы уже проверили конфигурацию Apache с помощью команды sudo httpd -d, и она показала, что с ней все в порядке. Однако полезно еще раз убедиться в том, что в вашей конфигурации нет опечаток, особенно в путях к логам в вашем виртуальном хосте.

    Ваша конфигурация для виртуального хоста выглядит следующим образом:

    <VirtualHost *:80>
       ServerName www.example.com
       ServerAlias example.com
       DocumentRoot /var/www/html
       ErrorLog /var/www/html/logs/error.log
       CustomLog /var/www/html/logs/requests.log combined
    </VirtualHost>

    Убедитесь, что вы указали правильный путь к логам и что папка logs действительно доступна для записи.

  4. Проверка наличия других ошибок:
    Если ни один из вышеуказанных вариантов не дал результата, просмотрите другие лог-файлы Apache:

    sudo tail -f /var/log/httpd/access_log

    Часто в этих логах можно найти подсказки о том, что может вызвать проблемы.

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...