Virtual Hosts mit Apache auf CentOS

Wofür braucht man überhaupt Virtual Hosts? Ich habe einen Server und drei Domains. Mittels Virtual Hosts, kann ich Apache so konfigurieren, das er anhand der Domain auf das passende DocumentRoot verweist. Ich kann also alle Domains über den gleichen Port (80 oder 443) erreichen und auch verschiedene Inhalte verweisen. Im Endeffekt spare ich mich dadurch Server.

httpd.conf

Wir fangen mit der Konfiguration der httpd.conf an. Diese findet ihr unter /etc/httpd/conf/httpd.conf. An das Ende fügt ihr folgende Zeilen an:

 NameVirtualHost *:443  
 NameVirtualHost *:80  

Dadurch weiß der Apache das für Port 80 und Port 443 VirtualHosts konfiguriert werden. Am Ende der httpd.conf gibt es bereits einen Eintrag VirtualHosts, den ihr euren Bedürfnissen anpassen könnt. Ich habe darauf jedoch verzichtet.

Individuelles conf-File

Je nachdem wie euer Apache konfiguriert ist, passt ihr die httpd.conf und/oder die ssl.conf an. In der ssl.conf unter /etc/httpd/conf.d/ssl.conf müsste ihr den ServerName ebenfalls anpassen. Nun weiß euere Apache wie euer DNS-Name für die erste Domain ist. Um nun die zweite zu kennen, erstellen wir einen neue .conf-Datei in der für Diesen Server alle gesonderten Einstellungen verwaltet werden.

Die beste Methode ist es jedoch, für jeden Host eine eigene .conf anzulegen. Dadurch habt ihr einen verbesserten überblick und findet Fehler schneller.

Ich nenne diese Datei mal html2.conf und lege sie unter /etc/httpd/conf.d ab.

 <VirtualHost *:80>  
 ServerAdmin info@neuedomain.de  
 ServerName www.neuedomain.de
 ServerAlias www.neuedomain.de neuedomain.de  
 RewriteEngine On  
 RewriteCond %{HTTPS} !=on  
 RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,NE,R=permanent]  
 </VirtualHost> 
 
 <VirtualHost *:443>  
 ServerAdmin info@neuedomain.de  
 ServerName www.neuedomain.de
 ServerAlias www.neuedomain.de neuedomain.de  
 DocumentRoot /var/www/html2  
 ErrorLog /var/log/httpd/http2/http2-error.log  
 CustomLog /var/log/httpd/http2/http2-common.log common  
 SSLEngine on  
 SSLProtocol all -SSLv2 -SSLv3  
 SSLHonorCipherOrder On  
 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4:AES256+EECDH:AES256+EDH  
 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"  
 SSLCertificateFile /etc/letsencrypt/live/www.neuedomain.de/cert.pem  
 SSLCertificateKeyFile /etc/letsencrypt/live/www.neuedomain.de/privkey.pem  
 SSLCertificateChainFile /etc/letsencrypt/live/www.neuedomain.de/chain.pem  
 </VirtualHost>  

Im ersten abschnitt für den Port 80 lege ich fest, dass immer auf https verwiesen wird, und kein http angeboten wird. Im zweiten Abschnitt für Port 443 (https), sind die rot markierten Einträge wichtig. Hier müsst ihr natürlich eure Domain anpassen und die Verweise zu den SSL-Zertifikaten. Die Log Verzeichnisse sind nicht notwendig, machen es aber bei einer Fehlersuche einfacher. Wenn ihr Logfiles in einen nicht vorhandenen Ordner ablegen wollt, muss dieser vorher erstellt werden, ansonsten startet der Apache nicht mehr.

Anschließend startet ihr euren Apache neu und könnt mittel apachectrl -S schauen ob der Apache eure Konfig verstanden hat.

Schreibe einen Kommentar