Мне нужно написать несколько скриптов для внесения изменений в файлы конфигурации Apache, а именно для добавления / обновления VirtualHosts. Я планирую сделать это на Ruby. прежде чем я напишу свой собственный, есть ли какие-либо скрипты / rubygems, которые позволяют Ruby анализировать / изменять файлы конфигурации Apache, в частности <VirtualHost>
директивы?
Я закончил тем, что просто написал свой собственный скрипт Ruby ... Не очень хорошо, но на случай, если кому-то это понадобится, вот его суть. Он ищет содержимое <VirtualHost></VirtualHost>
тег, чтобы он мог создать второй <VirtualHost>
с ServerName
который является поддоменом нашего сертификата SSL с подстановочными знаками ...
begin
logMsg "Updating apache config file for user #{user} (#{domain_httpd_conf})"
domain_httpd_conf_io = File.open(domain_httpd_conf,File::RDONLY)
ip_addr = ''
main_vhost_config = []
ssl_vhost_config = [" ServerName #{auto_ssl_domain}",' Include "conf/wildcard-ssl.conf"']
indent = 1
while line = domain_httpd_conf_io.gets
line_indented = ' '*indent+line.strip
if line =~ /^[[:space:]]*<VirtualHost ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(:[0-9]+)[^>]*>/
ip = $1
elsif line =~ /^[[:space:]]*<\/VirtualHost>/
break 2
elsif line =~ /^[[:space:]]*(ServerAlias|ServerName).*/
main_vhost_config.push line_indented
else
if line =~ /^[[:space:]]*<[^\/]/
indent += 1
elsif line =~ /^[[:space:]]*<[\/]/
indent = [1, indent-1].max
line_indented = ' '*indent + line.strip
end
main_vhost_config.push line_indented
ssl_vhost_config.push line_indented
end
end
main_vhost_config.push " Include #{extraconf_dir}/*.conf"
domain_httpd_conf_io.close
domain_httpd_conf_io = File.open(domain_httpd_conf,File::WRONLY||File::TRUNC)
domain_httpd_conf_io.puts "<VirtualHost #{ip}:80 #{ip}:8080>"
domain_httpd_conf_io.puts main_vhost_config
domain_httpd_conf_io.puts "</VirtualHost>"
domain_httpd_conf_io.puts
domain_httpd_conf_io.puts "<VirtualHost #{ip}:443 #{ip}:8888>"
domain_httpd_conf_io.puts ssl_vhost_config
domain_httpd_conf_io.puts "</VirtualHost>"
rescue SystemCallError => err
logErr "ERROR: Unexpected error: "+err
domain_httpd_conf_io.close
end
По-прежнему есть некоторые ошибки, но в основном он делает то, что я хочу.
Понятия не имею, но одна вещь, которая может вам помочь, - это поддержка apache для массового виртуального хостинга: http://httpd.apache.org/docs/2.2/vhosts/mass.html
Если вы можете обеспечить согласованность между своими vhosts, возможно, вам не понадобится Ruby для их создания / управления / редактирования. Соглашение важнее конфигурации - это правильно?