Як я можу переглянути повну конфігурацію httpd?


83

Я намагаюся з'ясувати, якою є повна повна конфігурація налаштування httpd.

Усі файли конфігурацій розкидані по різних файлах (/etc/httpd/conf.d, httpd.conf, різні конфігурації модів)

Чи є спосіб перерахувати остаточну конфігурацію httpd?
Як і вся запущена конфігурація налаштування в одному файлі?


12
apachectl -Sдля запуску конфігурації, apachectl -Mщоб показати завантажені модулі
arco444

7
За винятком того, що apachectl -Sне дає вам ні "повну повну конфігурацію", ні "всю конфігурацію запущеного налаштування в одному файлі".
Фредерік Норд


1
Stack Overflow - це сайт для питань програмування та розробки. Здається, це питання не є темою, оскільки мова не йде про програмування чи розробку. Подивіться, які теми я можу запитати тут, у довідковому центрі. Можливо , веб - додатків Стек Обмін , веб - майстрів Стек Обмін або Unix і Linux Стек Обмін буде найкраще місце , щоб запитати.
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

Ми використовуємо apache 2.2 на CentOS. Однак apachectl недоступний.
user674669

17

Як описано в документації до сервера Apache HTTP

Якщо встановлено config -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.
  • Директиви, які керують самим файлом конфігурації, такі як Включити, і не перераховані, але включені директиви конфігурації є.
  • Коментарів у списку немає. (Це можна вважати особливістю.)
  • Директиви конфігурації з файлів .htaccess не перелічені (оскільки вони не є частиною постійної конфігурації сервера).
  • Директиви контейнера, такі як перераховані нормально, але mod_info не може зрозуміти номер рядка для закриття.
  • Директиви, генеровані сторонніми модулями, такими як mod_perl, можуть не бути в списку.

15

Будь ласка, використовуйте mod_info для цього: http://httpd.apache.org/docs/2.2/mod/mod_info.html

тільки знизу є те, що якщо вона вам потрібна для відновлення видаленої конфігурації і ви ще не завантажили модуль, це вам не сильно допоможе


2

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

Я писав це за допомогою Apache httpd, хоча його також можна використовувати з Oracle OHS

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

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

Приклад:

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.