Вопрос или проблема
Когда я выполняю 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
из-за недостатка прав доступа.
Шаги для устранения неполадок:
-
Проверка прав доступа:
Убедитесь, что директория/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
(по умолчанию, в зависимости от конфигурации вашей системы) как владельца директории и дает ему права на запись. -
Проверка SELinux:
Вы упомянули, что контекст SELinux активирован. Если у вас включен SELinux, он может блокировать доступ к ресурсам. Проверьте статус SELinux:sestatus
Если он включен, вы можете временно установить его в режим разрешения:
sudo setenforce 0
После этого попробуйте снова запустить Apache с помощью команды:
sudo service httpd start
Если это решит проблему, вам необходимо будет настроить политику SELinux для разрешения доступа к нужным ресурсам, а не оставлять SELinux в режиме разрешения.
-
Проверка конфигурации 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
действительно доступна для записи. -
Проверка наличия других ошибок:
Если ни один из вышеуказанных вариантов не дал результата, просмотрите другие лог-файлы Apache:sudo tail -f /var/log/httpd/access_log
Часто в этих логах можно найти подсказки о том, что может вызвать проблемы.
Заключение
В случае если использование указанных методов не помогло, возможно, стоит перезапустить сервер с полными правами в отчете или проверить системные журналы, используя dmesg
или journalctl
, чтобы получить больше информации о ошибках, которые могут вызывать неудачу Apache при запуске.
Подводя итог, проблемы с запуском Apache часто возникают из-за неправильных прав доступа или конфигурации. Убедитесь, что все необходимые директории существуют и что права настроены правильно, а также принимайте во внимание возможные блокировки со стороны SELinux.