Как просмотреть полную конфигурацию httpd?

83

Я пытаюсь выяснить, какова полная полная конфигурация установки httpd.

Все файлы конфигураций разбросаны по разным файлам (/etc/httpd/conf.d, httpd.conf, различные конфигурации модов)

Есть ли способ указать окончательную конфигурацию httpd?
Как вся текущая конфигурация установки в одном файле?

Гнафу
источник
12
apachectl -Sдля запуска конфигурации, apachectl -Mчтобы показать загруженные модули
arco444
7
За исключением того, что это apachectl -Sне дает вам ни «полной полной конфигурации», ни «всей текущей конфигурации установки в одном файле».
Фредерик Норд
1
Stack Overflow - это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. Какие темы можно задать здесь, в Справочном центре. Возможно, лучше спросить Web Applications Stack Exchange , Webmaster Stack Exchange или Unix & Linux Stack Exchange .
jww
@imme Я нахожу забавным, что ваша первая «связанная» ссылка - это как раз этот вопрос. Мне также очень интересно, что вы скопировали / вставили один и тот же комментарий ко всем ссылкам, на которые вы ссылались. Забавно :)
Hickory420

Ответы:

50

Как отмечает arco444, вы можете использовать apachectl -Sдля отображения обзора VirtualHosts, запущенных в настоящее время из конфигураций, и apachectl -Mдля отображения всех загруженных в данный момент модулей - я не знаю инструмента для отображения подробного вывода всех проанализированных конфигураций (и в каком порядке они были проанализированы в) при запуске httpd, но я бы рекомендовал вам ознакомиться с общей структурой файлов конфигурации httpd :

Особо обратите внимание на ваш вопрос: «основной» файл конфигурации apache находится в /etc/httpd/conf/httpd.conf(в области строки 221 при установке httpd по умолчанию из репозиториев, включенных в CentOS 6, которые, как я полагаю, вы используете на основе своих тегов сообщений), а «дополнительные» файлы конфигурации находятся /etc/httpd/conf.dв главном файле конфигурации и должны быть явно включены в него. Например, если вы httpd.confвыполните поиск в файле по запросу ' Include', вы найдете строку, Include conf.d/*.confкоторая включает в себя все файлы расширения .confв подкаталоге conf.d- в алфавитном порядке, поэтому вы захотите ознакомиться с важностью синтаксического анализа файла конфигурации на какой-то момент, если возможно.

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

set nu
syntax on
BE77Y
источник
Мы используем apache 2.2 на CentOS. Однако apachectl недоступен.
user674669 01
17

Как описано в документации по HTTP-серверу Apache

Если установлено config define -DDUMP_CONFIG, mod_info будет сбрасывать предварительно проанализированную конфигурацию в stdout во время запуска сервера.

httpd -DDUMP_CONFIG -k start

DUMP_CONFIGтребуется mod_infoвключено a2enmod info:!

В Ubuntu сделайте следующее

sudo apache2ctl -DDUMP_CONFIG

Если вы хотите удалить номера строк, сделайте

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"

или перенаправить в файл

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$" > /path/to/dump.conf

Известные ограничения

mod_info предоставляет свою информацию путем чтения проанализированной конфигурации, а не чтения исходного файла конфигурации. Есть несколько ограничений, связанных с тем, как создается проанализированное дерево конфигурации:

  • Директивы, которые выполняются немедленно, а не сохраняются в проанализированной конфигурации, не перечислены. К ним относятся ServerRoot, LoadModule и LoadFile.
  • Директивы, которые управляют самим файлом конфигурации, например Include, не перечислены, но включены директивы конфигурации.
  • Комментарии не указаны. (Это можно рассматривать как особенность.)
  • Директивы конфигурации из файлов .htaccess не указаны (поскольку они не являются частью постоянной конфигурации сервера).
  • Директивы контейнера, такие как перечисленные в обычном порядке, но mod_info не может определить номер строки для закрытия.
  • Директивы, созданные сторонними модулями, такими как mod_perl, могут отсутствовать в списке.
Вольфрево
источник
15

Для этой цели используйте mod_info: http://httpd.apache.org/docs/2.2/mod/mod_info.html

Единственная обратная сторона заключается в том, что если вам нужно восстановить удаленную конфигурацию и еще не загрузить модуль, это вам не очень поможет.

r_3
источник
2

У меня есть сценарий (увы, на Perl; простите меня, он старый), который сглаживает файлы конфигурации, удаляет комментарии (по умолчанию) и включает # FILEкомментарии, чтобы вы могли выяснить, в каком файле содержится то, что вы, возможно, ищете.

Я написал его с помощью Apache httpd, хотя его также видели в Oracle OHS.

https://github.com/cameronkerrnz/scriptorium/blob/master/httpd-dump-config

Особенно полезно для сравнения конфигураций на разных машинах с SSH и diff / meld / etc.

Пример:

httpd-dump-config | grep -i -e '# FILE:' -e servername -e serveralias
# FILE: /etc/httpd/conf/maintenance-curtain.conf
# FILE: /etc/httpd/conf.d/proxy.conf
# FILE: /etc/httpd/otago/secure-www.alias.conf
# FILE: /etc/httpd/conf.d/proxy.conf
    ServerName www.otago.ac.nz
    ServerAlias otago.ac.nz

Вот пример использования diff (CLI) и meld (GUI):

diff -Bb <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config)

meld <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config) &

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

Кэмерон Керр
источник
0

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

awk -v pc=$APCALL '

  NR == 1 {
    if (pf != "") {
      print "### End of "  pf  " ###"
    }
    print "### "  FILENAME  " ###"
    pf = FILENAME
  }
  { if (pc || ( $1 !~ "^#" && $0 != "" ) ) {
       printf "%5d %s\n", NR, $0
    }
  }
  $1 ~ /^Include(Optional)?$/ {
    $1 = ""
    system("for ACF in " $0 "; do apache_config.sh $ACF; done" )
  }
  END {
      print "### End of "  pf  " ###"
  }
' "$@"

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

Джерард Х. Пилле
источник