VirtualHosts auf Apache unterschiedlich konfigurieren

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hey Leute,

    ich habe mal eine Frage. Kann mir jemand verraten, ob ich VirtualHosts beim Apachen so konfigurieren kann, dass ich manche Webseiten nur Local aufrufen kann und manche auch aus dem WWW erreichbar ist.

    Also ich meine es so etwa die Seite für Local:

    Code
    <VirtualHost *:80>
    
    
        ServerName www.otherdomain.tld
        DocumentRoot /www/otherdomain
    
    
    </VirtualHost>


    Und das fürs WWW:

    Code
    <VirtualHost *:80>
    
    
        ServerName local.otherdomain.tld
        DocumentRoot /www/otherdomain
    
    
    </VirtualHost>


    Wenn jemand mir helfen kann wäre super.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

  • VirtualHosts auf Apache unterschiedlich konfigurieren? Schau mal ob du hier fündig wirst!

  • Ja, dass es 2 Verschiedene Root Verzeichnisse sein sollen ist mir schon irgendwie klar.

    Nur es geht dadrum wie kann ich verhindern, dass der Locale VirtuelHost nur Local aufgerufen wird? Weil wenn ich das als "Subdomain" nutze den Vorsatz vor der Domain wie z.B. local vor dem .server.selfhost.bz? Weil bei meinem DynDNS Anbieter bekomme ich die Subdomain server.selfhost.bz für meinen Server und wenn ich vor dem noch ein weiteren "Domainteil" anfüge, erhalte ich grob gesprochen eine SubSubDomain.

    Und da ich 3 Seiten auf dem Pi am laufen habe und verhindern möchte, dass z.B. phpmyadmin von extern per http://server.selfhost.bz/phpmyadmin da dran kommt möchte ich dies als "locale" subdomain aufbauen.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

  • Mit " aus dem WWW " meinst du übers Internet?

    Da würde ich dir empfehlen folgendes zu machen:

    Spoiler anzeigen

    cd /etc/apache2/sites-available/
    cp default public
    nano public

    nano /etc/apache2/ports.conf

    Code
    NameVirtualHost *:80
    NameVirtualHost *:808
    Listen 80
    Listen 808


    a2ensite public
    /etc/init.d/apache2 restart

    mkdir /var/publicwww
    chown www-data:www-data /var/publicwww



    Der neue Ordner ist dann über " http://IP:808 " ansprechbar. Die HTML/PHP Dateien usw musst du dann aber in /var/publicwww/ ablegen

    Der alte is weiterhin wie gehabt über " http://IP " erreichbar

    Dann richtest du in deinem Router eine Portweiterleitung ein und leitest den Externen/Public/von Port als zB 8808 ein, an die IP deines RPI's Port 808

    Wenn dann ein Freund (oder du von unterwegs) auf den RPI gehen möchte muss er deine Internet-IP (oder dyndns) zuzüglich dem Port 8808 ansurfen

  • Hallo RaspiDo,

    dein Raspberry Pi muss unter beiden Domainnamen erreichbar sein. Das Problem dabei ist, dass einmal die externe IP-Adresse und einmal die interne IP-Adresse aufgelöst werden muss. Das denke ich ist bei dir nicht der Fall. Daher solltest du entweder einen internen DNS-Server in deinem Netzwerk betreiben welcher eine eigene Domain nutzt und auch die Namensauflösung für die interne IP-Adresse macht. Eventuell könntest du für die internen Anfragen die IP-Adresse verwenden.

    Gruß Georg

  • Man kann auch über die .htaccess nur bestimmten IPs den Zugriff erlauben, allerdings muss man die dann in jedes untergeordnete Verzeichniss kopieren (vllt reicht auch ein symlink)

    Code
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.0/8
    Allow from 192.168.0.0/16

    Wenn du also nicht willst das jemand übers Internet auf http://IP/phpmyadmin zugreifen kann, musst du in dem phpmyadmin Verzeichnis eine .htaccess mit Dateirechnetn 600 anlegen.. Beachte aber das phpmyadmin höchst warscheinlich nicht direkt in /var/www/ liegt sondern ein Alias genutzt wird, also über eine seperate apache2 konfiguration: /etc/apache2/conf.d/phpmyadmin.conf
    Bei mir liegt phpmyadmin tatsächlich in /usr/share/phpmyadmin/ also müsstest du die .htaccess dort anlegen..


    Vielleicht kann man diese Regelung aber auch in die Directory Klausel einfügen (hab ich noch nicht getestet)

    Hier steht dazu zB was: http://stackoverflow.com/questions/1002…ed-to-local-lan

  • Das ist ganz einfach.
    Ich nehmen mal an du hast eine dynip für den zugriff auf das Internet.
    Sagen wir raspi.dyndns.com.

    Als erstes benötigen wir ein Verzeichnis für den VHost

    Code
    mkdir /var/www2
    chown www-data:www-data /var/www2

    Jetzt machen wir folgendes ( alles als Root oder Sudo vorneweg)

    Code
    cp /etc/apache2/sites-available/default /etc/apache2/sites-available/raspi

    Jetzt haben wir eine Kopie der default welche wir für die Dynip bearbeiten

    nun erstellen wir einen Symbolischen Link nach /etc/apache2/sites-enable welcher den VHOST aktiviert.

    Code
    ln -s /etc/apache2/sites-available/raspi /etc/apache2/sites-enable/002-raspi

    den Apache neu starten

    Code
    /etc/init.d/apache2 restart

    Das war's


    Gruß
    Peter

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Der Ordnunghalber würd ich die Datei aber nicht "raspi" nennen sondern "public" , dann weiss man anhand des dateinamens gleich um was es sich handeln könnte :)

    Und der Symlink wird auch mit " a2ensite " angelegt, wäre kürzer ;)


    Eine Portweiterleitung wäre dann aber auch bei dem Weg von Der_Imperator benötigt
    Also zum Beispiel " Von-Port " 80 " Auf-Port " 80

    Von-Port ist der externe Port, der übers Internet angesprochen wird und An-Port ist der LAN interne Port auf dem apache2 lauscht


  • Der Ordnunghalber würd ich die Datei aber nicht "raspi" nennen sondern "public" , dann weiss man anhand des dateinamens gleich um was es sich handeln könnte :)

    ja, besser noch den Kompletten Domainnamen verwenden, macht es bei mehreren VHOST übersichtlich.

    Und der Symlink wird auch mit " a2ensite " angelegt, wäre kürzer ;)

    Yepp !

    Eine Portweiterleitung wäre dann aber auch bei dem Weg von Der_Imperator benötigt
    Also zum Beispiel " Von-Port " 80 " Auf-Port " 80

    Von-Port ist der externe Port, der übers Internet angesprochen wird und An-Port ist der LAN interne Port auf dem apache2 lauscht


    Wichtig wäre auch noch die Default wie von dir geschrieben auf die lokale IP Range zu beschränken.
    Bei Aufruf über das Internet über die Public IP wird die Default ausgeliefert, nicht der VHOST !

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • Wichtig wäre auch noch die Default wie von dir geschrieben auf die lokale IP Range zu beschränken.
    Bei Aufruf über das Internet über die Public IP wird die Default ausgeliefert, nicht der VHOST !

    Hmm, bist du dir da sicher?


    Ich hab die Seite so eingerichtet wie von dir beschrieben, mit dem Unterschied das ich bei ServerName meine t3st.dyndns.info Host eingetragen, meinen Ordner /var/publicwww/ genannt habe und dort drin liegt eine index.php mit folgendem Inhalt:

    PHP
    <?php
    exec("cat /sys/class/thermal/thermal_zone0/temp",$cputemp);
    exec("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq",$cpufreq);
    $cputemp = $cputemp[0] / 1000;
    $cpufreq = $cpufreq[0] / 1000;
    echo "$cputemp\n";     
    echo "$cpufreq\n";     
    ?>


    Jetzt führe ich über einen Internet-Server ( vps ) folgenden Befehl aus:

    Code
    root@free4me:~# wget -q -O- http://t3st.dyndns.info:801
    44.388
    900
    root@free4me:~#


    Es wird also /var/publicwww/index.php angesprochen, aber nicht die default Vhost

  • Hmm, bist du dir da sicher?

    Ja.
    Die Default wird immer ausgeliefert wenn kein anderer VHOST matched.

    Ich hab die Seite so eingerichtet wie von dir beschrieben, mit dem Unterschied das ich bei ServerName meine t3st.dyndns.info Host eingetragen, meinen Ordner /var/publicwww/ genannt habe und dort drin liegt eine index.php mit folgendem Inhalt:

    PHP
    <?php
    exec("cat /sys/class/thermal/thermal_zone0/temp",$cputemp);
    exec("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq",$cpufreq);
    $cputemp = $cputemp[0] / 1000;
    $cpufreq = $cpufreq[0] / 1000;
    echo "$cputemp\n";     
    echo "$cpufreq\n";     
    ?>


    Jetzt führe ich über einen Internet-Server ( vps ) folgenden Befehl aus:

    Code
    root@free4me:~# wget -q -O- http://t3st.dyndns.info:801
    44.388
    900
    root@free4me:~#


    Es wird also /var/publicwww/index.php angesprochen, aber nicht die default Vhost

    Mach mal ein :

    Code
    ping t3st.dyndns.info

    dann

    Code
    wget -q -O- http://IPADRESSE:801

    Und dann sollte die default (/var/www) ausgeliefert werden.

    Was ich nicht verstehe ist :801.
    Läuft dein Webserver auf Port 801 oder hast du das PAT im Router so eingetragen ?

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Einmal editiert, zuletzt von Der_Imperator (18. August 2013 um 13:57)

  • Code
    wget -q -O- http://IPADRESSE:801

    Und dann sollte die default (/var/www) ausgeliefert werden.

    hm stimmt hast recht, also müsste man das dann tatsächlich noch extra schützen :-/

    Zitat von Der_Imperator

    Was ich nicht verstehe ist :801.
    Läuft dein Webserver auf Port 801 oder hast du das PAT im Router so eingetragen ?

    Der Weiterleitungsport ist Extern 801 auf Intern 80 ;)

  • hm stimmt hast recht, also müsste man das dann tatsächlich noch extra schützen

    Ja,

    die /etc/apache2/sites-available/default so ändern :

    Code
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order Deny,Allow
            Deny from all
            Allow from 192.168.78.0/24   # hier dein Lokales Netzwerk
            Allow from 127.0.0.1
    </Directory>

    Das ganze auch mit PHPMYADMIN so machen, sonst ist der auch über den VHOST erreichbar
    Raspberry Pi als Webserver - phpMyAdmin Installation

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Das mit dem Allow from könnte ich doch auch in der Config Datei bei manchen Vhosts packen oder? Also wenn ich noch eine Locale Seite mehr bauen möchte?

    Aber sonst vielen Dank. Es läuft.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:


  • Das mit dem Allow from könnte ich doch auch in der Config Datei bei manchen Vhosts packen oder? Also wenn ich noch eine Locale Seite mehr bauen möchte?

    Aber sonst vielen Dank. Es läuft.


    Michael


    Ja, das kannst du in jede VHOST packen.
    Ist Lokal nur etwas schwierig.
    Du müsstest einen DNS Server haben und mehrer Alias dort anlegen.

    Code
    pi1.local
    pi2.local
    pi3.local
    ....

    Dann kommst du aud unterschiedliche Lokale seiten. Oder dem PI mehrere IP Adressen geben, das ginge auch.
    Aber das ist was für Fortgeschrittene.

    Vergiss den "Erledigt" button nicht ;.)

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • Das mit dem Allow from könnte ich doch auch in der Config Datei bei manchen Vhosts packen oder? Also wenn ich noch eine Locale Seite mehr bauen möchte?


    Wenn du nicht möchtest, dass jemand Fremdes übers Internet auf sowas wie phpmyadmin zugreifen kann, musst du das bei allen Vhost-Dateien eintragen..
    Wichtig sind aber nicht nur die " Allow from " Zeilen sondern auch die "Order" und "Deny" Zeile und die Anordnung ;)

    Code
    Order Deny,Allow
    Deny from All
    Allow from 192.168.0.0/16
    Allow from 127.0.0.1

    Beim installieren von phpmyadmin wird eine extra conf für apache2 angelegt:

    /etc/apache2/conf.d/phpmyadmin.conf

    Also sicherstellen das du alle erwischst


    Wenn dir das zu viel Aufwand ist kannst du auch den von mir im Post#4 beschriebenen Weg benutzen.

    Das kannst du auch so abändern das der Externe-Port 80 wäre und Intern auf 808 zeigt.. Dann kann jemand wirklich nur auf diesen einen Port zugreifen und wäre somit sauber von der default VirtualHost *:80 getrennt

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!