Zum Inhalt springen

Dynamische VHOSTS mit Apache2 und mod_perl


 Teilen

Empfohlene Beiträge

Hallo Leute,

Ich bin jetzt schon seit einigen Tagen an folgender Sache dran.

Ich habe ein ein TSV-File in dem steht die Domain, der Pfad und der User des Vhosts.

Nun will Ich diese mithilfe von mod_perl in eine recht spezielle Standart-Konfiguraton pumpen.

Dazu habe Ich schonmal folgende Perl-Section geschrieben:


open(VHOSTS,"<","./scripts/vhosts_file");

my @lines = <VHOSTS>;
close(VHOSTS);

foreach(@lines)
{
my ($vhost_name, $vhost_path, $suexec_user) = split(/\t/);

# get the username (groupname = username)
$suexec_user = getpwuid($suexec_user);
#remove trailing / from path
$vhost_path =~ s/\/$//;

$VirtualHost{"$vhost_name:80"} = {
ServerAlias => "$vhost_name:80",
ServerName => "www.$vhost_name:80",
DocumentRoot => $vhost_path,
SuexecUserGroup => "$suexec_user $suexec_user",
Directory => {
$vhost_path => {
FCGIWrapper => "/srv/www/$suexec_user/conf_$suexec_user .php",
FilesMatch => {'\.php$' => {
SetHandler => 'fcgid-script',
},
},
Options => '+ExecCGI Indexes FollowSymLinks',
AllowOverride => 'AuthConfig Fileinfo',
DirectoryIndex => 'index.php',
order => 'deny,allow',
Allow => 'from all',
},
},
};

}

[/PHP]

Ein Restart bringt bei mir dann auch keine Fehler.

Und ein

[code]apache2 -S[/CODE]
liefert folgendes( hab die IP und die Domains verändert): DomainA ist eine Domain, welche normal durch ein statisches Config-File konfiguriert wurde. DomainB ist die Domain, welche in dem TSV-File steht (vorerst nur eine zum testen)
[CODE]1.2.3.4:80 is a NameVirtualHost default server DomainA.tld (/etc/apache2/sites-enabled/000-default.conf:149) port 80 namevhost DomainA.tld (/etc/apache2/sites-enabled/000-default.conf:149) port 80 namevhost www.DomainB.de (mod_perl:1) port 80 namevhost www.DomainB.de (mod_perl:1) port 80 namevhost dev.DomainA.tld (/etc/apache2/sites-enabled/evo_dev.conf:3) [I]...[/I] [/code]

Wenn Ich nun aber auf die DomainB zugreife, komme Ich immer nur auf den Standart-Vhost (DomainA) alle anderen(statisch konfigurierten) VHosts funktionieren einwandfrei.

Es scheint als würde er die Config der Perl Section nicht richtig ziehen...

Aber Ich komme einfach nicht dahinter woran es liegt...

Ich hänge etzt schon seit 3 Tagen an diesem Problem. nd hab mich dazu auch schon halb tot gegooglet.

Ich hoffe Ihr könnt mir vieleicht weiterhelfen und dass Ich das Problem genug beschrieben habe.

Schonmal Danke im vorraus.

Grüße Shogoki

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo axxis,

Danke erstmal für die Antwort.

Auch wenn diese mir nicht wirklich weiterhilft.

Ich kenne die von dir verlinkte Seite.

Das ist leider keine Alternative für mich, da mir da einige Funktionen fehlen.

Ganz wichtig z.B. Fällt mir da spontan die Einstellung des Suexec-Users ein, welcher für dast jeden VHOST ein anderer ist.

Vieleicht findet, sich ja noch jemand er mir bei meinem eigentlichen Problem weiterhelfen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

Versuch Nr.2 ;)

Du nutzt namensbasierte VHosts.

Ohne dein vhosts_file zu kennen, aber ein Name hat in der VirtualHost-Direktive (bei namensbasierten VHosts) imho nichts zu suchen.

$VirtualHost{"$vhost_name:80"} = { 

Habs kurz statisch getestet, sowie du einen Namen in der Direktive setzt, wird die Anfrage durch den Default-VHost beantwortet.

Gruß

axxis

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Danke für die erneute Antwort.

Leider hilft mir diese auch nicht weiter.

Hier mal ein Blick in mein vhosts_file wie es in meinem Beispiel von oben aussehen würde:

DomainB.de  /pfad/zur/docroot/DomainB       5002

Also die Domain, der Pfad und dann eine UID.

Und eine Domain in einer VHOST-conf wird aufgelöst.

Also in meinen statischen VHOST-Configs siehts auch so aus überall und es klappt.

also vorraussetzung ist dann natürlich, dass die Domains vom Server aus auch auf die eigenen IP aufgelöst werden können.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

Leider hilft mir diese auch nicht weiter.

Dumm gelaufen ;)

Dass der Apache DNS kann ist zwar richtig, aber dennoch sollte man davon absehen! Issues Regarding DNS and Apache - Apache HTTP Server

Ansonsten bin ich raus, in der Theorie reicht Apache eine Anfrage nur an den Default-VHost, wenn ServerName/-Alias matchen (was passieren kann, wenn eben die restlichen VHosts nicht matchen).

Wenn du die Lösung hast, würde sie mich dennoch brennend interessieren.

Gruß

axxis

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, da Ich ja nichts unversucht lasse (und es wie du auch erwähnt hast nciht gerade Best Practiceist ), habe Ich auch mein Skript mal auf die IP umgemünzt.

Leider hat das auch nicht den gewünschten Erfolg gebracht.

Des weiteren habe Ich auch noch versucht den mit mod_perl konfigurierten VHOST als default Host zu setzen.

Im apache2 -S passt das dann auch.

Aber in der Realität greift die Einstellung auch nicht...

Es scheint tatsächlich als würde mein Apache, die Konfiguration ignorieren...

Und das, obwohl im apache2 -S alles korrekt angezeigt wird.

Das ist schon alles sehr merkwürdig...

Link zu diesem Kommentar
Auf anderen Seiten teilen

jaa, Ich habe die Einstellungen ja aus einem statisch konfiguriertem VHOST übernommen.

Also soweit wie ich weiß kann Apache auch VHost aus einem LDAP einbinden, wäre es evtl sinnvoller die ganzen Daten in das LDAP zu schieben und von dort dann einzubinden. Und via Script kannst Du auch direkt in den LDAP schreiben. Das Modul dazu müsste "mod_vhost_ldap" heißen.

Das setzt aber ein bestehendes LDAP vorraus. Ich nutze auf meinem Webserver kein LDAP.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

Ich hoffe, das stört jetzt niemanden wenn Ich hier auf den alten Thread antworte.

Aber, da Ich mich heute nochmal mit dem Thema befasst habe und beim googlen meinen eigenen Thread (diesen hier) gefunden habe hab ich mir gedacht Ich poste mal meine Lösung hier. So hilft es hoffentlich jemanden der ein ähnliches Problem hat.

Also Ich habe jetzt eine fuktionierende Lösung für mich gefunden. Die ist zwar noch nicht top ausgereift aber naja..

Also eine wichtige Rolle spielt dabei das Modul mod_macro womit man Makros in der Apache Konfig definieren kann.

Dann kann man damit ein Makro für die VHOSTS mit den entsprechenden variablen definieren.

Damit Ich dann noch das TSV-File als Basis nehmen kann habe Ich ein kleines perlscript gebastelt, welches dieses ausliest und für jeden VHOST eine zeile mit dem aufruf für das Macro erstellt.


Use vhost vhost_name vhost_path suexec_user_id

Diese Zeilen schreibt das Script dann in ein Apache-Config file.

Das Skript wird dann per Cron alle 5min ausgeführt.

Wer es noch ein wenig genauer möchte kann es demnächst auch hier nachlesen.

Ich hoffe das war ein wenig hlfreich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine Meinung

Schreibe jetzt und erstelle anschließend ein Benutzerkonto. Wenn Du ein Benutzerkonto hast, melde Dich bitte an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

Fachinformatiker.de, 2021 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung