VestaCP mit nginx Reverse Proxy und HTTP/2 installieren

VestaCP ist ein kostenfreies Control Panel, mit dem schnell und einfach ein VPS oder ein Root Server konfiguriert und administriert werden kann. Per Default wird neben Apache als Webserver auch nginx installiert, der als Reverse Proxy statische Dateien sehr performant ausliefert. Der Apache Webserver wird dann für dynamische Inhalte hinzugezogen.

Einen weiteren Performanceschub erhält man durch das Aktivieren von HTTP/2. Allerdings hat VestaCP in der Version 0.9.8-22 einen Bug in den entsprechenden nginx-Templates, so dass HTTP/2 out of the box leider nicht funktioniert.

Dieses Tutorial beschreibt, wie man VestaCP installiert und anschließend die erforderlichen Templates anpasst, so dass anschließend HTTP/2 genutzt werden kann. Das Tutorial wurde auf einem Hetzner Cloud Server mit Ubuntu 18.04 erstellt.

Bevor die Installation von VestaCP beginnt, sollte das System aktualisiert werden:

apt-get update
apt-get upgrade

Anschließend muss das VestaCP-Installationsskript heruntergeladen werden:

curl -O http://vestacp.com/pub/vst-install.sh

Normalerweise würde man nun die Installation mit folgendem Befehl starten:

bash vst-install.sh

Ich empfehle allerdings, folgende Parameter hinzuzufügen:

bash vst-install.sh --vsftpd no --proftpd no --softaculous no

Die Parameter bewirken, dass kein FTP-Server installiert wird – besser ist, stattdessen auf SFTP zurückzugreifen. Außerdem wird die Softaculous-Bibliothek nicht installiert, eine sehr umfangreiche Bibliothek an Webanwendungen, die in den seltensten Fällen benötigt wird.

Die Installation läuft nun los, bittet um eine Bestätigung der durchzuführenden Schritte und verlangt eine Admin-E-Mailadresse. 

 _|      _|  _|_|_|_|    _|_|_|  _|_|_|_|_|    _|_|
 _|      _|  _|        _|            _|      _|    _|
 _|      _|  _|_|_|      _|_|        _|      _|_|_|_|
   _|  _|    _|              _|      _|      _|    _|
     _|      _|_|_|_|  _|_|_|        _|      _|    _|

                                  Vesta Control Panel



The following software will be installed on your system:
   - Nginx Web Server
   - Apache Web Server (as backend)
   - Bind DNS Server
   - Exim Mail Server + ClamAVSpamAssassin
   - Dovecot POP3/IMAP Server
   - MySQL Database Server
   - Iptables Firewall + Fail2Ban


Would you like to continue [y/n]:

Nach wenigen Minuten sollte die Installation mit folgendem Hinweis beendet sein:

 _|      _|  _|_|_|_|    _|_|_|  _|_|_|_|_|    _|_|   
 _|      _|  _|        _|            _|      _|    _| 
 _|      _|  _|_|_|      _|_|        _|      _|_|_|_| 
   _|  _|    _|              _|      _|      _|    _| 
     _|      _|_|_|_|  _|_|_|        _|      _|    _| 


Congratulations, you have just successfully installed Vesta Control Panel

https://example.com:8083
username: admin
password: YOUR_PASSWORD

We hope that you enjoy your installation of Vesta. Please feel free to contact us anytime if you have any questions.
Thank you.

--
Sincerely yours
vestacp.com team

Standardmäßig nutzt VestaCP ein selbstsigniertes Zertifikat, das im Browser zu einer Fehlermeldung führt. Um das zu vermeiden empfiehlt es sich, ein Let’s Encrypt-Zertifikat für den Admin-Bereich, den Mailserver, etc. zu hinterlegen. Wie das geht ist in diesem Beitrag beschrieben.

Nun ist VestaCP installiert und lauffähig – fehlen noch die erforderlichen Templates. In den mitgelieferten HTTP2-nginx-Templates sind leider falsche Pfade für error_log und access_log hinterlegt, was dazu führt, dass nginx nicht mehr startet. Aus diesem Grund muss der Inhalt der Datei http2.tpl (für HTTP) und http2.stpl (für HTTPS) angepasst werden. Beide Dateien liegen im Verzeichnis /usr/local/vesta/data/templates/web/nginx/. Um die http2.tpl-Datei anzupassen:

nano /usr/local/vesta/data/templates/web/nginx/http2.tpl

Und den vorhanden Inhalt gegen diese Konfiguration austauschen:

server {
    listen      %ip%:%proxy_port%;
    server_name %domain_idn% %alias_idn%;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;

    location / {
        proxy_pass      http://%ip%:%web_port%;
        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %docroot%;
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location @fallback {
        proxy_pass      http://%ip%:%web_port%;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include %home%/%user%/conf/web/nginx.%domain%.conf*;
}

Anschließend:

nano /usr/local/vesta/data/templates/web/nginx/http2.stpl 

Und den dort vorhandenen Inhalt gegen diese Konfiguration austauschen:

server {
    listen      %ip%:%proxy_ssl_port% ssl http2;
    server_name %domain_idn% %alias_idn%;
    # ssl         on;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;

    location / {
        proxy_pass      https://%ip%:%web_ssl_port%;
        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %sdocroot%;
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location @fallback {
        proxy_pass      https://%ip%:%web_ssl_port%;
    }

    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}

    include %home%/%user%/conf/web/snginx.%domain%.conf*;
}

Anschließend muss in VestaCP das gewünschte Package so angepasst werden, dass als nginx-Konfiguration HTTP2 hinterlegt ist. Nun sollte nginx mit HTTP2 als Reverse Proxy für Apache zu einer sehr guten Website-Performance führen.

Schreibe einen Kommentar