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

36

Я пытаюсь настроить виртуальные хосты в Mac OS X. Я изменял httpd.conf и перезагружал сервер, но мне не повезло заставить его работать. Кроме того, я заметил, что он не обслуживает файлы в DocumentRoot, упомянутом в httpd.conf (Libraries / WebServer / Documents), а в другом каталоге (/ usr / local / apache2 / htdocs). Я не вижу нигде упомянутой папки в httpd.conf. Кроме того, PHP работает, но строка «LoadModule php5_module» закомментирована. Это заставляет меня думать, что он использует другой файл .conf. Как я могу выяснить, какая конфигурация на самом деле загружается?

Обновление: я только что удалил, что httpd.conf и apache ведут себя одинаково после перезапуска, поэтому он определенно не использовал его!

Клаудиу
источник

Ответы:

45

В любом приложении * nix самый простой способ - запросить сам двоичный файл. В случае httpd, я думаю, что процесс будет примерно таким:

$ whereis httpd
/usr/sbin/httpd
$ /usr/sbin/httpd -V
Server version: Apache/2.2.11 (Unix)
Server built:   Jun 17 2009 14:55:13
Server's Module Magic Number: 20051115:21
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/private/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

Как вы можете видеть - мой OS X говорит, что двоичный файл, если не указано иное, будет использовать файл конфигурации: /private/etc/apache2/httpd.conf

Если это не поможет, возможно, предложение Кристофера о поиске - следующий шаг.

Зейн С Халсолл
источник
2
Это не будет работать, если вы используете Apache через Server.app. В этом случае вам понадобится список процессов в ответе от @msanford serverfault.com/a/155114/187798, который показывает, что Server.app запускает httpd с другим файлом конфигурации, как показано здесь из моей установки (Mavericks)/usr/sbin/httpd -D FOREGROUND -f /Library/Server/Web/Config/apache2/httpd_server_app.conf -D WEBSERVICE_ON
Джейсон S
также не работает при использовании apache, установленного через macports - у меня работает ответ от msandord!
pgee70
10

Пытаться

ps ax | grep httpd

и вы должны (возможно) получить вывод, как

1633   ??  Ss     0:00.21 /usr/sbin/httpd -f /etc/httpd.conf

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

msanford
источник
хм, там нет -fфлага
Клаудиу
1
+1 Так как это единственный ответ, который работает для всех случаев, то есть, если вы настраиваете Apache самостоятельно или используете Apache через Server.app
Jason S
2

Потому что некоторые конфиги используют серверное приложение, варево или что-то еще, и потому что один лайнер FTW:

$(ps ax -o comm | grep -m 1 httpd) -V | grep SERVER_CONFIG_FILE

Эта команда делает следующее:

  • Найти активный процесс httpd
  • Информация о конфигурации вывода
  • Grep файл конфигурации

Проверено на Сьерра и Эль Капитан

Creaforge
источник
$Важно (это не из командной строки в данном случае). If преобразует оператор в паранах в команду, которой мы передаем -Vфлаг. В противном случае: "синтаксическая ошибка рядом с неожиданным токеном` -V '".
Том Оже
0

Сначала проверьте, какой скрипт запускается для Apache. Для macOS это должно быть / Library / LaunchDaemons. Это может включать рабочий каталог или аналогичную информацию.

Вы также можете отладить сам запущенный процесс с помощью dtruss. Вы можете подключиться к запущенному процессу, используя dtruss -p <pid>. Затем, если вы подключитесь к нему, вы, вероятно, сможете просмотреть выходной файл, чтобы узнать, откуда он берет свою конфигурацию. Либо просто запустите Apache, вызвав напрямую dtruss dtruss start_apache_command.

Вы всегда можете просто выполнить общесистемный поиск по httpd.conf find / -name httpd.conf.

Кристофер Карел
источник