Configuration of multiple local websites

Alles, was den Apache betrifft, kann hier besprochen werden.

Configuration of multiple local websites

Postby mertl » 12. March 2022 13:33

Hello everyone,

I hosted various websites on my home server and I'd like to be able to call them (only locally) via the host name. I don't want to use subdomains for the requests in browsers, but directories. This saves me having to edit the HOSTS file on every computer.

All websites are located in /var/www/vhosts directory (except for two sites that are provided as a service through a port)

http://homeserver/ should point to the main page in /var/www/vhosts/homer
http://homeserver/dokuwiki should point to/var/www/vhosts/dokuwiki
... and so on.

My Apache configuration currently looks like this:

Code: Select all
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName localhost

        DocumentRoot /var/www/vhosts/homer

        Alias /homer /var/www/vhosts/homer
        <Directory /var/www/vhosts/homer>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        Alias /heimdall /var/www/vhosts/heimdall/public
        <Directory /var/www/vhosts/heimdall/public>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        Alias /dokuwiki /var/www/vhosts/dokuwiki
        <Directory /var/www/vhosts/dokuwiki>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        Alias /nextcloud /var/www/vhosts/nextcloud
        <Directory /var/www/vhosts/nextcloud>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>
        Redirect permanent /nextcloud https://homeserver/nextcloud

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet


All in all, this works, but there are problems. E.g. Heimdall wants to access a file (http://homeserver/storage/backgrounds/UjNSBO5kajlX3e0iB2lOG4J15GH2XHbYy3Iz3H46.jpg), but the path is not correct, it should be "http://homeserver/heimdall/storage/backgrounds/UjNSBO5kajlX3e0iB2lOG4J15GH2XHbYy3Iz3H46.jpg". I suspect there is a fundamental problem in my configuration.

Can anyone help with a tip?
mertl
 
Posts: 5
Joined: 12. March 2022 13:09
XAMPP version: -
Operating System: Ubuntu 20.04.4 LTS

Re: Configuration of multiple local websites

Postby Nobbie » 12. March 2022 18:41

Thats not a Xampp issue, probably you installed WordPress or similar and renamed the server after having it installed. But as you do not tell anything, we dont know anything. This in not a Wordpress/Joomla etc. support forum anyway.

And/or you have an .htaccess file with certain redirects, going wrong. Same problem - we dont know anything.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Configuration of multiple local websites

Postby mertl » 13. March 2022 12:33

Sorry, that was actually little information. The installation runs without XAMPP on an Ubuntu 20.04.4 LTS machine and Apache/2.4.41 (Ubuntu). I suspect the vhosts configuration is wrong, but I don't know where the error could be either. That's why I wanted to ask in general whether the configuration seems plausible or whether it already contains obvious errors. The problem I described above relates to a dashboard called "Heimdall". But asI said, I guess it's not a problem of a specific web service, but rather the vhosts/apache configuration.

The public web folder of the dashboard contains following .htaccess file:
Code: Select all
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
mertl
 
Posts: 5
Joined: 12. March 2022 13:09
XAMPP version: -
Operating System: Ubuntu 20.04.4 LTS

Re: Configuration of multiple local websites

Postby mertl » 13. March 2022 13:05

Addendum: If I set DocumentRoot for test purposes as follows:
DocumentRoot /var/www/vhosts/heimdall/public
Heimdall works fine. But unfortunately that doesn't solve the configuration problem in general.
mertl
 
Posts: 5
Joined: 12. March 2022 13:09
XAMPP version: -
Operating System: Ubuntu 20.04.4 LTS

Re: Configuration of multiple local websites

Postby Nobbie » 13. March 2022 17:45

Thats still not enough information. We need to know which tools are running in the folders and more important: how did you install these tools? I still assume that you installed them somewhere, and AFTER you created VirtualHosts for them, Or you did copy an existing installation from the web to your local PC?

We dont know, but we need to know.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Configuration of multiple local websites

Postby mertl » 14. March 2022 12:57

Hallo Nobbie,

erstmal danke für deine Hilfe! Ich habe gesehen, dass du in anderen Beiträgen auch auf deutsch antwortest, also switche ich auch mal auf deutsch. Was genau meinst du mit tools? Die gehosteten Webseiten? Das wären: NextCloud, Homer (einfaches Dashboard), Heimdall (ebenfalls ein Dashboard), DokuWiki und HomeAssistant (läuft aber als Docker Container, befindet sich somit also auch nicht in der Verzeichnisstruktur aller anderen Seiten). Jede Seite befindet sich in einem Unterverzeichnis von /etc/www/vhosts/. Im Falle von Heimdall befinden sich die zugänglichen Web-Daten in einem weiteren Unterverzeichnis (/etc/www/vhosts/heimdall/public).

Installiert habe ich die Seiten "ganz klassisch" immer nach der jeweiligen Anleitung, also entweder über den Download eines git repositorys oder über den Download eines tar/gz/zip. Anschließend dann noch die Berechtigungen gesetzt (chown, chmod) und nach bestem Wissen und Gewissen in die Apache Konfiguration eingetragen. Die .htaccess Dateien habe ich nicht angefasst.
mertl
 
Posts: 5
Joined: 12. March 2022 13:09
XAMPP version: -
Operating System: Ubuntu 20.04.4 LTS

Re: Configuration of multiple local websites

Postby Nobbie » 16. March 2022 10:32

Das ist hier doch auch ein deutsches Forum ("Grundlagen und Wissenswertes" - Apache), ich wunder mich immer, warum Deutsche hier auf Englisch fragen. Es gibt auch englische Subforen hier, aber das hier ist ein deutsches Forum.

Ja, ich meine diese Dinge wie NextCloud und Co. (die meisten fragen hier nach WordPress und Joomla). Zum Problem selbst, da lese ich diesen Satz, den Du noch weiter beschreiben musst, ich vermute nämlich, dass da der Hund begraben ist: "Anschließend dann noch die Berechtigungen gesetzt (chown, chmod) und nach bestem Wissen und Gewissen in die Apache Konfiguration eingetragen."

Das klingt genau danach, was ich vermutet habe. Was auch immer Du "anschließend" in Apache eingetragen hast, das ist die falsche Reihenfolge. Im Grunde gesehen musst Du erst Apache vollständig einrichten und in das vollständig eingerichtete Apache die Scripts installieren und zwar auch genau unter der URL, wie sie nachher auch aufgerufen werden sollen.

Also wenn Du beispielsweise WordPress (ich weiß, das ist nicht dabei, aber ich nehme mit Absicht einen neutralen Namen, damit Du Dich nicht an konkreten Namen orientierst, sondern das Prinzip verstehst) installierst und dafür einen Ordner WordPress angelegt hast (im DocumentRoot), dann würdest Du wahrscheinlich erst einmal WordPress unter http://localhost/WordPress installiert haben. Dann gehst Du in Apache, baust einen VirtualHost "WordPress" und verweist den DocumentRoot auch auf den WordPress Ordner, so dass Du am Ende Deine Installation unter http://WordPress aufrufen kannst.

Wenn Du das so oder ähnlich gemacht hast, DANN IST DAS FALSCH! Sämtliche dieser Scripts merken sich in Konfigurationsdateien oder in einer Datenbank, WO sie installiert wurden und generieren Redirects o.ä. auf den Installationsort. Und das geht schief, weil sie dazu den Laufzeitnamen der Installation (http://WordPress) mit dem Installationsort "vermischen", der war aber http://localhost/WordPress. Da kann dann beispielsweise herauskommen, dass eine Datei in http://WordPress/Wordpress gesucht wird, den Ordner gibt es aber nicht. Das ist genau Dein Problem. Und wenn ich mit meiner Vermutung recht habe (und Du schreibst ja auch, dass Du NACH der Installation noch Apache geändert hast), dann ist da das grundsätzliche Problem zu suchen. Genauer kann ich mangels exakter Kenntnis Deiner Umgebung nicht spezifizieren, was da schief geht. Das musst Du selbst herausfinden.

Aber am besten ist es eigentlich, wenn Du so vorgehst, wie ich es beschrieben habe, Du installierst alles neu, aber erst richtest Du Apache und alle Ordner ein und DANN installierst Du alles und immer so, wie Du es nachher auch aufrufen willst. Das sollte dann funktonieren.

P.S.:
mertl wrote:Installiert habe ich die Seiten "ganz klassisch" immer nach der jeweiligen Anleitung, also entweder über den Download eines git repositorys oder über den Download eines tar/gz/zip. Anschließend dann noch die Berechtigungen gesetzt (chown, chmod) und nach bestem Wissen und Gewissen in die Apache Konfiguration eingetragen. Die .htaccess Dateien habe ich nicht angefasst.


Das ist ja genau genommen noch NICHT die vollständige Installation, Bis hier hast Du erst die notwendigen Dateien auf Deinen Rechner gebracht. Die eigentliche Installation dieser Scripts geschieht meistens erst danach, indem man die entsprechende URL in einem Browser aufruft und da wird dann eine Installation gestartet. Da wird dann meistens eine Datenbank bestückt usw., ein Admin wird angelegt usw. etc. pp. Dieser Installationsaufruf im Browser ist EIGENTLICH die sog. "Installation". Der Download aus git oder sonstwo ist keine Installation, sondern erst einmal nur das Bereitsstellen der Dateien. Und dieser erste Installationsaufruf, der muss mit der gleichen URL geschehen wie nachher der Aufruf, wenn alles fertig ist und Du damit arbeiten willst.

Und deswegen frage ich ja auch, ob Du ggf. eine fertige Installation von irgendwo her kopiert hast (statt die Installationsroutine aufzurufen). Dann hast Du da das gleiche Problem, der Installationsort ist nicht der Ausführungsort. In diesem Fall musst Du ggf. bestimmte Konfigurationsdateien anpassen, das geht aber über dieses Forum hier hinaus, da müßtest Du in entsprechenden Foren nachfragen, wie man eine fertige Installation (von Nextcloud oder sonstwas) von einem Server auf einen anderen Server umziehen kann. Das ist noch ein Kapitel für sich.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Configuration of multiple local websites

Postby mertl » 01. April 2022 18:31

Hallo Nobbie,

herzlichen Dank für deine ausführliche Antwort und für die Tipps! Ich verstehe was du meinst mit der falschen Reihenfolger der Installation, aber darauf habe ich schon geachtet, dass die "Erstinstallation/Konfiguration der Webseite" erst nach der Apache Konfiguration passiert. Ich habe inzwischen zumindest mal grob in die php Skripte gesehen. Dort findet man schlicht relative Pfade (z.B. style="background-image: url(storage/'.$bg_image.')") und keine Variablen mit vorangestellten absoluten oder relativen Pfadangaben, die in irgend einer Config oder Datenbank stehen.

Nach ein wenig ausprobieren, verstehe ich das Problem jetzt etwas besser: Das background-image im o.g. Beispiel wird im DOCUMENT_ROOT (aktuell "/var/www/vhosts/homer", da dies meine Startseite beim Aufruf von http://homeserver/ sein soll) gesucht und nicht im Verzeichnis meiner Heimdall-Installation. Mein Wunsch wäre quasi, dass DOCUMENT_ROOT jeweils auf den Pfad zeigt, der zu meinem Aufruf im Browser gehört, z.B.:

http://homeserver/heimdall -> DOCUMENT_ROOT = /var/www/vhosts/heimdall/public
http://homeserver/nextcloud -> DOCUMENT_ROOT = /var/www/vhosts/nextcloud
http://homeserver/homeassistant -> DOCUMENT_ROOT = /var/www/vhosts/homeassistant
usw.

Wahrscheinlich bekomme ich das nur mit einer .htaccess gelöst, aber meine bisherigen Versuche haben leider nicht funktioniert
mertl
 
Posts: 5
Joined: 12. March 2022 13:09
XAMPP version: -
Operating System: Ubuntu 20.04.4 LTS

Re: Configuration of multiple local websites

Postby Altrea » 01. April 2022 21:18

DocumentRoot ist in diesem Zusammenhang der falsche Begriff, denn Apache sieht nicht vor, diese Einstellung auf Verzeichnispfadebene zu verwenden. Der DocumentRoot bezeichnet immer die oberste aus dem Web zugreifbare Ebene pro Apache Instanz oder Virtual Host.

Es gibt aber die Direktive Alias bzw. AliasMatch was etwas in der Art tut, was du dir vorstellst.
Hauptaufgabe dieser Direktiven ist aber eigentlich Ressourcen zugreifbar zu machen, die außerhalb des DocumentRoot des Webzugriffs liegen, also zum Beispiel wenn du ein zentrales Verzeichnis für Bilddateien hättest.

Beachte aber, dass einige Webanwendungen nicht ohne Anpassungen über eine Verzeichnispfadebene funktionieren.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11936
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64


Return to Apache

Who is online

Users browsing this forum: No registered users and 204 guests