Macro, modelo, função ou algo semelhante aos arquivos conf do apache

2

Seguindo outra pergunta Eu apenas resolvi , eu me pergunto: existe alguma coisa que possamos fazer dentro do Apache para evitar a repetição de linhas de configuração ? E quanto ao apache externo? No meu caso, seria o RHEL4 da AWS EC2, mas eu acredito que qualquer ** nix * teria uma solução semelhante. Talvez algo como sed , talvez usando .htaccess ... Não sei. Mas isso deve ser pré-processado, nada em tempo de execução ou algo assim: assim como os arquivos conf, uma vez que o apache é carregado, é isso.

Aqui vou copiar minha solução anterior apenas para ilustrar:

UseCanonicalNames off

NameVirtualHost *:8888
<VirtualHost *:8888>
  ServerName example1.com
  ServerAlias *.example1.com

  # below, stuff that will be repeated
  # redirect to HTTPS
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^login\.(.*)$
  RewriteRule ^(.*) https://%1/login$1 [L]
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^www\.([^.]+\.com)$
  RewriteRule ^/login(.*) https://%1/login$1 [L]
</VirtualHost>

<VirtualHost *:8888>
  ServerAlias *
  VirtualDocumentRoot /var/www/html/%-3

  # below, stuff that need to be repeated
  # redirect to HTTPS
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^login\.(.*)$
  RewriteRule ^(.*) https://%1/login$1 [L]
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^www\.([^.]+\.com)$
  RewriteRule ^/login(.*) https://%1/login$1 [L]
</VirtualHost>

E tenho certeza de que há muitas instâncias em que coisas como essa redirection_to_HTTPS poderiam ter sido uma função / procedimento / macro / modelo / incluir / etc.

    
por cregox 07.05.2011 / 22:52

4 respostas

2

Bem, obrigado por todas essas ótimas respostas, mas ... Provavelmente mod_macro seria o melhor para fazer o truque.

E os seus ideais estão alinhados com o benefícios Eu estava procurando:

  • arquivos de configuração menores para manter.
  • menos bugs devido a cópias-pastas parcialmente atualizadas.
  • melhor legibilidade. Por exemplo: Use AllowLocalAccess pode ser considerado mais claro do que %código%
  • tudo isso não ao preço de perl ou m4 programação.

Da próxima vez que eu tiver uma chance, tentarei todas as soluções, começando com essa, e adicionarei uma template do que eu usei ... A menos que alguém seja gentil o suficiente para fazer tudo isso primeiro! :)

    
por 21.05.2011 / 01:34
1

Eu posso ser chamado de "old school" apenas por postar isso, mas eu acho que a solução clássica para esse problema é usar um processador de macro como o M4, que é um padrão POSIX. Há uma implementação do GNU:

link

Essa página menciona o autoconf como seu usuário mais notável, mas eu acho que a maioria dos administradores acessam o M4 pela primeira vez através do sendmail também clássico.

Você poderia, por exemplo, manter versões M4 de seus arquivos de configuração e alguns Makefiles e então "compilá-los" em configurações reais através de um simples make .

    
por 08.05.2011 / 01:28
1

O Apache tem uma diretiva de inclusão . Algo como

UseCanonicalNames off

NameVirtualHost *:8888
<VirtualHost *:8888>
  ServerName example1.com
  ServerAlias *.example1.com

  Include /etc/apache2/redirect_to_https.conf    
</VirtualHost>

<VirtualHost *:8888>
  ServerAlias *
  VirtualDocumentRoot /var/www/html/%-3

  Include /etc/apache2/redirect_to_https.conf    
</VirtualHost>

com /etc/apache2/redirect_to_https.conf sendo

  # below, stuff that will be repeated
  # redirect to HTTPS
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^login\.(.*)$
  RewriteRule ^(.*) https://%1/login$1 [L]
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} ^www\.([^.]+\.com)$
  RewriteRule ^/login(.*) https://%1/login$1 [L]

As outras respostas são boas para o problema mais geral de converter código em arquivos de configuração.

    
por 08.05.2011 / 02:45
0

Coisas assim podem ser feitas com estruturas de gerenciamento como Puppet ou Capistrano. Nesses scripts são criados para gerar arquivos httpd.conf (e arquivos de inclusão associados) com base em condições definidas. Esses tipos de ações de rotina "faça isso de uma coisa que coloca X" podem ser funcionalizados. Eu não acredito que existem métodos prontos para fazer esse tipo de coisa, mas esses frameworks são projetados para permitir que você faça o seu próprio.

    
por 08.05.2011 / 00:17