Apache VirtualHosts

Hallo alle zusammen,
heute widmen wir uns dem Thema – wie kann ich zwischen abgefragten Domains unterscheiden und unterschiedlichen Inhalt ausliefern. (bekanntlich gibt es einen Unterschied zwischen ‚www.schweissen.de‘ und der Seite ohne ‚w‘)

Apache VirtualHosts

Wieder einmal der Links zur entsprechenden Seite zum Apache Projekt, vielleicht erzähle ich hier ja auch nur  Stuss…
Apache – virtuelle Hosts
Tipp:
Grundsätzlich mal die Erinnerung, ’never touch a running system‘, also wenn dann würde ich nicht eine Konfiguration für alle vHosts schreiben, sondern für jede Website eine eigene Definition im Ordner ‚/etc/httpd/conf.d/‘ ablegen.
Standard-Beispiel der Konfiguration selbst:
Die erste Zeile würde ich in der ‚httpd.conf‘ unkommentieren und ggf. nur ‚<VirtualHost>‘ in die weiteren Konfigurationsdateien schreiben. (das SSL-Äquivalent ist in der ‚/etc/httpd/conf.d/ssl.conf‘ hinterlegt)

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
Also würde dies für die Seite: ‚www.example.com‘ wie folgt aussehen:
<VirtualHost Schnittstelle:Port>
    ServerAdmin deine@mail.tld
    DocumentRoot /var/www/vhosts/www.example.com
    ServerName www.example.com
    ErrorLog logs/www.example.com-error_log
    CustomLog logs/www.example.com-access_log common
</VirtualHost>
Problem am Rande:
Dies legt den Aufruf der Seite mit einem Verzeichnis über einen DNS-Namen fest, nicht aber die Berechtigungen falls der Ordnerpfad in der ‚httpd.conf‘ noch gar nicht hinterlegt ist…daher siehe unten!

Notiz am Rande:
Ggf. sollten die Logfiles dann als extra Job im Fail2ban hinterlegt werden!!!
Beispiel für vHosts mit Verzeichnis und SSL-Support:
<VirtualHost *:80>
        ServerName www.example.com
        ServerAdmin deine@mail.tld
        DocumentRoot /var/www/vhosts/www.example.com
        <Directory /var/www/vhosts/www.example.com>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        ErrorLog /var/log/httpd/www.example.com-error.log
        LogLevel warn
        CustomLog /var/log/httpd/www.example.com-access.log combined
        ServerSignature On
</VirtualHost>
<VirtualHost *:443>
ErrorLog /var/log/httpd/www.example.com-ssl_error.log
TransferLog /var/log/httpd/www.example.com-ssl_access.log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

SSLCertificateFile /etc/pki/tls/certs/www.example.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.example.com.key

<Files ~ „.(cgi|shtml|phtml|php?)$“>
SSLOptions +StdEnvVars
</Files>

<Directory /var/www/vhosts/www.example.com>
SSLOptions +StdEnvVars
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

SetEnvIf User-Agent „.*MSIE.*“
        nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log
        „%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x „%r“ %b“
</VirtualHost>


Standard der SSL-Konfiguration ’ssl.conf‘:

Falls eine Warnung bzgl. einer Überlappung der Konfigurationen kommt empfehle ich ‚_default_:443‘ in die lokale IP/den Loopback zu ändern…


<VirtualHost _default_:443>

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
<Files ~ „.(cgi|shtml|phtml|php3?)$“>
SSLOptions +StdEnvVars
</Files>
<Directory „/var/www/cgi-bin“>
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent „.*MSIE.*“
        nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log
        „%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x „%r“ %b“
</VirtualHost>

Artikel auf dem Testsystem verifiziert.