Virtualhost Container -> benutzerdefinierte Einträge ablegen und automatisiert mit in die httpd.conf aufnehmen können

  • Ich habe immer wieder mal das Problem, das ich einzelne vhost Container mit benutzerdefinierten Einträgen ergänzen müsste, die ich aber so nicht ohne viel Aufwand einbinden kann, das die httpd_vhosts.pl die Änderungen immer wieder überschreibt.


    Ich würde mir daher eine Erweiterung der httpd_vhosts.pl in der Form wünschen, das man die benutzerdefinierten Einträge in einem Ordner ablegen könnte und diese von der httpd_vhosts.pl zusätzlich mit eingelesen werden.


    Beispiel:

    /opt/pdadmin/etc/vhosts_custom

    -> <domain-name>.ini


    Der Vorteil wäre, das man zum Beispiel benutzerdefinierte Proxy-Einträge oder Spezialeinstellungen für Module hier ergänzen könnte.


    In der Vergangenheit gab es schon mal aus der Community ein Plugin hierzu, das aber zum einen nicht weitergepflegt wurde und zum anderen das mehrfache Schreiben der httpd.conf (einmal durch die httpd_vhosts.pl, einmal durch das Modul-Addon) bedingte, was nicht unbedingt optimal für die Funktionsweise des Apache Webservers ist.

  • Ueber die Konfigurationsvariable $httpd_vhost_module kann ein Skript festgelegt werden, mit dem individuelle Eintraege gesetzt werden koennen. Der Hostname wird dem Skript als erster Parameter uebergeben.


    Das Skript wiederum uebergibt des Inhalt des VirtualHost-Containers auf STDOUT. Wird "#httpd_vhost_module: incremental" ausgegeben, wird die Ausgabe zusaetzlich zu den von pd-admin generierten Eintraegen in den VirtualHost eingebaut, ansonsten wird nur die Ausgabe verwendet. Bei leerer Ausgabe bleibt der VirtualHost unveraendert.

  • An welcher Stelle muss denn die Konfigurationsvariable $httpd_vhost_module hinterlegt werden, die auf ein Script geht?

    Ich würde zum Testen mal gerne eine TXT-Datei anlegen die die zusätzlichen Einstellungen hat und dann das Script die Textdatei mit cat auslesen lassen.

  • Ich habe nun versucht eine Datei mit folgendem Inhalt zu einem virtualhost-eintrag zu ergänzen, aber der unten stehen fehler meint das es zwei virtualhost-einträge gibt.



    /opt/pdadmin/bin/httpd_vhosts.pl

    Writing /usr/local/pd-admin2/conf/httpd.conf

    Writing /usr/local/pd-admin2/httpd-2.4/conf/httpd.conf

    webserver = <AP24>

    Apache 24 is already selected

    AH00526: Syntax error on line 476 of /usr/local/pd-admin2/httpd-2.4/conf/httpd.conf:

    <VirtualHost> cannot occur within <VirtualHost> section


    An welcher Stelle findet die Zuordnung zu einem bestimmten virtualhost-eintrag aus dem pdadmin statt?

  • Ich denke du darfst den VirtualHost nicht mit angeben. Es dürfte genügen, wenn du es wie folgt angibst


    Apache Configuration
    #httpd_vhost_module: incremental
    <IfModule mod_proxy_http.c>
    SSLProxyEngine on
    RewriteEngine on
    RewriteRule "^/test_test(.*)$" "https://module.kartenanbieter.tld/test_test$1" [P]
    ProxyPassReverse "/test_test" "https://module.kartenanbieter.tld/test_test"
    RewriteRule "^/_global(.*)$" "https://module.kartenanbieter.tld/_global$1" [P]
    ProxyPassReverse "/_global" "https://module.kartenanbieter.tld/_global"
    </IfModule>
  • Ich habe mir das jetzt mal näher angeschaut und bin zu folgender Erkenntnis gekommen:

    a) Der Übergabeparameter $1 übergibt den Hostnamen und nicht die IP-Adresse oder die Port-Adresse

    b) Das führt dazu, das jede Domäne in der Regel zweimal übergeben wird (einmal für den Port 80 und einmal für den Port 443).

    c) Es gibt leider keine Unterscheidungsmöglichkeit, ob es der Container für Port 80 oder der Container für Port 443 ist.


    Das führt dann dazu, das ich ohne großen Aufwand für beide Container nur den gleichen Inhalt hinterlegen kann.


    Wenn ich also eine Proxy-Umleitung nur für SSL anlegen möchte, aber nicht für HTTP, dann müsste ich im Prinzip auch noch einen Zähler einbauen, um hier unterschiedliche Inhalte übergeben zu können.


    Wäre es nicht möglich, den Port als Übergabeparameter $2 mit zu übergeben, damit man das direkt unterscheiden kann?

  • Non TLS Hosts sollten sich ja eigentlich langsam erledigt haben, so dass man praktisch per HSTS nur einen Durchlauf pro Domain erzwingen kann .


    Zudem habe ich noch herausgefunden, dass es eine ggf. nützliche Umgebungsvariable gibt: PDA_VHOST_USER


    Ich habe es nun doch nicht gebraucht, aber ggf. nützt das Jemandem.
    Ein recht unschönes Script, um noch fast am Ende (oder an einer bestimmten Position) der httpd.conf etwas hinzuzufügen, indem man die restlichen nötigen Zeilen im VirtaulHost selbst schreibt, diesen schließt und dann seine Einträge macht und dann einen fake Virtualhost öffnet.


    #!/bin/bash

    if [ "$1" == "letztedomain.example.org" ]

    then

    echo "#httpd_vhost_module: incremental"

    echo "ErrorLog /home/errorlogs/$PDA_VHOST_USER/error_log"

    echo "Header set Strict-Transport-Security \"max-age=15768000\""

    echo "</VirtualHost>"


    cat /root/vhost-add.txt


    echo "<VirtualHost xxx.xxx.xxx.xxx:443>"

    echo "ServerName fake.example.org"

    fi