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.