É possível escrever uma configuração compartilhada para vários VirtualHosts?

1

Minha intenção aqui é evitar muitos códigos repetitivos.

Essencialmente, o que estou tentando fazer é usar o mesmo bloco de configuração SSL para várias entradas do VirtualHost ...

<IfModule mod_ssl.c>

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn

CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

SSLCertificateFile    /usr/share/ssl/certs/example/host.pem
SSLCertificateKeyFile /usr/share/ssl/certs/example/host.key
SSLCertificateChainFile /usr/share/ssl/certs/example/host.cert

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory /usr/lib/cgi-bin>
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-6]" \
   nokeepalive ssl-unclean-shutdown \
   downgrade-1.0 force-response-1.0

# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

<VirtualHost 999.99.9.999:443>
    ServerName subdomain1.example.com
    DocumentRoot /var/www/subdomain1
</VirtualHost>

<VirtualHost 999.99.9.999:443>
    ServerName subdomain2.bonfirehub.com
    DocumentRoot /var/www/subdomain2
</VirtualHost>

</IfModule>

Agora, essa configuração não funciona para mim, mas acho que isso ilustra o que estou tentando alcançar. O próximo passo ideal seria abstrair esta configuração comum para cada VirtualHost em um arquivo separado e apenas carregá-lo através de uma diretiva Include.

Se não, talvez alguém possa sugerir outro método de configuração.

O objetivo para mim é ter uma configuração comum compartilhada, já que pretendo adicionar várias entradas do VirtualHost a um determinado IP que varia apenas por DocumentRoot e ServerName. Especificamente, o subdomínio ServerName é a única coisa que muda (note que estou usando um certificado curinga) e é por isso que quero configurar uma configuração compartilhada.

Eu descobri isso, mas deixarei isso no caso de alguém achar isso útil.

# VirtualHost
<IfModule mod_ssl.c>

<VirtualHost 999.99.9.999:443>
    ServerName subdomain1.example.com
    DocumentRoot /var/www/subdomain1
    Include example.com-ssl.conf
</VirtualHost>

<VirtualHost 999.99.9.999:443>
    ServerName subdomain2.example.com
    DocumentRoot /var/www/subdomain2
    Include example.com-ssl.conf
</VirtualHost>

</IfModule>

# Shared Config File
ServerAdmin webmaster@localhost

<Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn

CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
</Directory>

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   A self-signed (snakeoil) certificate can be created by installing
#   the ssl-cert package. See
#   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
#   If both key and certificate are stored in the same file, only the
#   SSLCertificateFile directive is needed.
SSLCertificateFile /usr/share/ssl/certs/*.example.com/host.pem
SSLCertificateKeyFile /usr/share/ssl/certs/*.example.com/host.key

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convinience.
SSLCertificateChainFile /usr/share/ssl/certs/*.example.com/host.cert

<FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
</FilesMatch>

<Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-6]" \
       nokeepalive ssl-unclean-shutdown \
       downgrade-1.0 force-response-1.0

# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

Percebi que meu bloco de configuração original no topo não tinha código. Minha única outra pergunta de acompanhamento seria, em vez de ter que escrever

Include example.com-ssl.conf

Em cada VirtualHost não existe uma maneira de incluir todos eles nesse arquivo?

    
por Alexander Millar 12.12.2012 / 21:19

0 respostas