2

Привет мне нужно извлечь каждый VirtualHosts из моего httpd.conf для отдельных файлов для более удобного управления.

Оригинальный httpd.conf.

..
<VirtualHost *:XXXX>
  SuexecUserGroup user1 groupX
  ...
</VirtualHost>
<VirtualHost *:XXXY>
  SuexecUserGroup user2 groupY
  ...
</VirtualHost>
<VirtualHost *:XXYY>
  SuexecUserGroup user3 groupZ
  ...
</VirtualHost>
...

И я хотел бы иметь такие файлы, как:- XXXX_user1.conf, содержащий:

Listen XXXX
<VirtualHost *:XXXX>
  SuexecUserGroup user1 groupX
  ...
</VirtualHost>

- XXXY_user2.conf, содержащий:

Listen XXXY
<VirtualHost *:XXXY>
  SuexecUserGroup user2 groupY
  ...
</VirtualHost>

Звучит немного сложно, но у меня есть около 500, чтобы сделать вручную;(

Большое спасибо за ответы

2 ответа2

1

Попробуйте это:

#!/usr/bin/gawk -f
BEGIN {
    RS = "</VirtualHost>\n"
}
{
    prefix = gensub("*:([^>]*)>", "\\1", "1", $2)
    filename = prefix "_" $4 ".conf"
    print "Listen " prefix "\n" $0 "\n" RS > filename
}

Сохраните его в файле с именем, возможно, "httpdsplit" и выполните:

$ chmod u+x httpdsplit
$ ./httpdsplit httpd.conf
0

Хотя вы не упомянули об этом, это похоже на apache httpd.conf. Хотя я рекомендую существующий ответ, который разделяет файлы, есть другой вариант.

Если сервер apache построен с mod_perl и если вы знаете (или готовы изучать) Perl, помните, что mod_perl связывается со всеми аспектами apache, включая config. Вы можете написать конфигурацию в разделе Perl и сгенерировать конфигурацию VirtualHost в самом Perl.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .