IP-basierte vhosts mit php und MySQL-Unterstützung

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

IP-basierte vhosts mit php und MySQL-Unterstützung

Postby xhosch » 01. August 2005 07:06

IP-basierte vhosts mit php und MySQL-Unterstützungg einrichten

+++Mein Vorhaben:+++
Drei verschiedene Webprojekte (unabhängig voneinander) lokal mit jeweils php und MySql-Unterstützung unter einem Benuzternamen laufen lassen. Dazu aufsetzen von IP-basierender vhosts mit phpMyAdmin zur Datenbankverwaltung. Ich nennene diese Projekte mal webprojektsonne, webprojektmond, und webprojektsterne.

+++Meine System:+++
Suse 9.3 | Apache 2.0.53 | PHP 4.3.10 | MySQL 4.1.10a | phpMyAdmin 2.6.1-pl3

+++Mein Wissensstand+++ bzw. das was mir bei anderen Vorhaben bisher gelungen ist:
-Errichten und Betreiben des Hauptservers (Apache) mit php und mysql-Unterstützung
-Errichten von namensbasierten vhosts allerdings ohne php und mysql-Unterstützung

+++Meine abgeschlossenen Vorbereitungen+++ zum betreiben IP-basierter vhosts mit php und MySQL:
Hier Kurzfassung (weiter unten ausführliche Fassung meiner Arbeitsschritte)
1.) Laden der erforderlichen Pakete mit YAST
2.) (IP-Aliasing) Zuweisung mehrer IP-Adressen zu einer Netzwerkkarte
3.) Erstellen + Rechtevergabe der Verzeichnisse und Dateien
4.) VirtualHosts in Apache einrichten
5.) Editieren der Datei hosts
6.) phpMyAdmin-Konfigurationsdatei config.inc.php im Verzeichnis: /srv/www/htdocs/phpMyAdmin/<config.inc.php> anpassen
7.) Erstellen und ablegen der Datei phpinfo.php zu Testzwecken
8.) Erstellen und ablegen der Datei index.html zu Testzwecken
9.) Anlegen + Rechtevergabe der Datei .htaccess (Zwecks Zugriffbeschränkung von außerhalb meines Netzwerkes)
10.) Überprüfung Einstellung der Firewall

(bisher nicht erfolgreich)
11.) Testen der Gesamtkonfiguration

? Meine Fragen?
Im Buch "Apache für Dummies" steht auf Seite 123 im unteren Drittel ich Zitiere:

In der Konfiguration des Hauptservers haben Sie PHP4 als CGI konfiguriert, jedoch die Ausführung über die Anweisung ACTION deaktiert. Deaktierviert wurde auch der ScriptAlias für das zentrale Skriptverzeichnis cgi-bin im Apache. Dadurch können Sie jetzt benutzerdefinierte Verzeichnisse mit dem Namen cgi-bin für jeden virtuellen Host einrichten. Die Konfiguration des Hauptservers in der httpd.conf enthölt als folgende auskommentierte Zeilen:

###Section 2: 'Main' server configuration

#Action application/x-httpd-php /php4/php.exe

# ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

Zitatende

Die Zeile:
Code: Select all
# ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

habe ich in der Datei /etc/apache2/httpd.conf gefunden und auskommentiert also aus
Code: Select all
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

mache
Code: Select all
# ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"


+++Frage 1 +++ Wo aber bitte befindet sich die Zeile:
#Action application/x-httpd-php /php4/php.exe ?

+++ Frage 2 +++ Gebe ich in meinen Browser die Adresse:
www.webprojektsonne.local ein, so erscheint
Access forbidden! Error 403. Eigentlich sollte hier meine zuvor erstellte index.html-Seite erscheinen. Irgendwo scheine ich entsprechende Rechte noch nicht vergeben zu haben. Aber bitte wo?

Wo bitte steckt da noch mein Denkfehler?

Vielen Dank für mögliche Denkanstöße

Gruß
Holger




Es folgt die ausführliche Fassung meiner Arbeitsschritte:

------------------------------------------------------------------------------
1.) Laden der erforderlichen Pakete mit YAST
php
phpMyAdmin
Apache
MySQL

2.) (IP-Aliasing) Zuweisung mehrer IP-Adressen zu einer Netzwerkkarte:
YAST-Netzwerkgeräte-Netzwerkkarte-Bereits konfigurierte Geräte Ändern-<Gerät> Bearbeiten-Erweitert-Zusätzliche Adressen-Hinzufügen Aliasname = 0 IP-Adresse=192.168.178.11 - Netzmaske= 255.255.255.0 usw.

Neustart des Netzwerkes
Code: Select all
root:~ # rcnetwork restart


Test durch:
Code: Select all
root:~ # ifconfig

Ergebnis: (verkürzte Wiedergabe)
Code: Select all
eth1 192.168.178.10   (erste IP-Adresse)
eth1:0 192.168.178.11 (zusätzliche IP-Adresse)
eth1:1 192.168.178.12 (zusätzliche IP-Adresse)
eth1:2 192.168.178.13 (zusätzliche IP-Adresse)


Anmerkung:
Alle drei Webprojekte sollen nur im lokalen Netzwerk aufrufbar sein. Daher habe ich bewußt nur IP-Adressen aus dem privaten Adressbereich gewählt. Ferner habe ich derzeit in meinem PC zwei Netzwerkkarten eingebaut, daher anstatt eth0 ... eth1 Die zweite Netzwerkkarte spielt bei dieser Einrichtung jedoch keine Rolle.

-------------------------------------------------------------------------

3.) Erstellen + Rechtevergabe der Verzeichnisse und Dateien

Eingabe an der Shell als root:
Code: Select all
mkdir /home/Benutzername/webprojektsonne
mkdir /home/Benutzername/webprojektsonne/htdocs
mkdir /home/Benutzername/webprojektsonne/htdocs/logs
mkdir /home/Benutzername/webprojektsonne/htdocs/cgi-bin
chmod 664 /home/Benutzername/webprojektsonne/htdocs
chmod 777 /home/Benutzername/webprojektsonne/htdocs/cgi-bin
vi /home/Benutzername/webprojektsonne/htdocs/logs/error.log
:wq (legt die Datei error.log an und schließt den Editor vi wieder)
vi /home/Benutzername/webprojektsonne/htdocs/logs/access.log
:wq (legt die Datei error.log an und schließt den Editor vi wieder)
chomd 664 /home/Benutzername/webprojektsonne/htdocs/logs/*

mkdir /home/Benutzername/webprojektmond
mkdir /home/Benutzername/webprojektmond/htdocs
mkdir /home/Benutzername/webprojektmond/htdocs/logs
mkdir /home/Benutzername/webprojektmond/htdocs/cgi-bin
chmod 664 /home/Benutzername/webprojektmond/htdocs
chmod 777 /home/Benutzername/webprojektmond/htdocs/cgi-bin
vi /home/Benutzername/webprojektmond/htdocs/logs/error.log
:wq (legt die Datei error.log an und schließt den Editor vi wieder)
vi /home/Benutzername/webprojektmond/htdocs/logs/access.log
:wq (legt die Datei error.log an und schließt den Editor vi wieder)
chomd 664 /home/Benutzername/webprojektmond/htdocs/logs/*

mkdir /home/Benutzername/webprojektsterne
mkdir /home/Benutzername/webprojektsterne/htdocs
mkdir /home/Benutzername/webprojektsterne/htdocs/logs
mkdir /home/Benutzername/webprojektsterne/htdocs/cgi-bin
chmod 664 /home/Benutzername/webprojektsterne/htdocs
chmod 777 /home/Benutzername/webprojektsterne/htdocs/cgi-bin
vi /home/Benutzername/webprojektsterne/htdocs/logs/error.log
:wq (legt die Datei error.log an und schließt den Editor vi wieder)
vi /home/Benutzername/webprojektsterne/htdocs/logs/access.log
:wq (legt die Datei error.log an und schließt den Editor vi wieder)
chomd 664 /home/Benutzername/webprojektsterne/htdocs/logs/*

-------------------------------------------------------------------------------

4.) VirtualHosts in Apache einrichten

Jeder vhost hat bei mir eine eigene Datei erhalten. Abgelegt sind diese Dateien unter: /etc/apache2/vhost.d
Die Datei wurde von mir benannt in:
webprojektsonne.conf, webprojektmond.conf, und webprojektsterne.conf

Eintrag in die Datei webprojektsonne.conf :

Code: Select all
### vhost webprojektsonne.local ###

<VirtualHost 192.168.178.11:80>
    ServerAdmin webmaster@webprojektsonne.local
    DocumentRoot /home/benutzername/webprojektsonne/htdocs
    ServerName www.webprojektsonne.local
    ErrorLog /home/benutzername/webprojektsonne/htdocs/logs/error.log
    CustomLog /home/benutzername/webprojektsonne/htdocs/logs/access.log common
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
         AccessFileName .htaccess
         <Location /cgi-bin>
         Options +ExecCGI
         Action application/x-httpd-php /php4/php.exe
         Order allow,deny
         Allow from all
         </Location>
</VirtualHost>


Die beiden anderen Dateien entsprechend...


Apach2-Server neustarten
Code: Select all
root:~ # /etc/init.d/apache2 restart


-------------------------------------------------------------------------------
5.) Editieren der Datei hosts
Ein DNS-Server ist bei nicht in Betrieb. Die Namensauflösung erfolgt über die Datei hosts im Verzeichnis: /etc/
Datei mit Editor geöffnet und folgende Zeilen hinten dran gehängt:

Code: Select all
192.168.178.11 www.webprojektsonne.local
192.168.178.12 www.webprojektmond.local
192.168.178.13 www.webprojektsterne.local

------------------------------------------------------------------------------
5. Datenbank mit Passwort schützen (Vergabe eines eigenen/neuen Passwortes)
Shellkommando als root:
Code: Select all
root:~ # mysqladmin -u root password eigenespassworthierfestlegen


------------------------------------------------------------------------------
6.) phpMyAdmin-Konfigurationsdatei config.inc.php im Verzeichnis: /srv/www/htdocs/phpMyAdmin/<config.inc.php> anpassen

Dort befinden sich in der

Zeile 39 folgende Zeilen:
Code: Select all
$cfg['PmaAbsoluteUri'] = '';

Diese ändern in:
Code: Select all
$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin/';


Zeile 69 sollte folgende Zeile stehen (überprüfen):
Code: Select all
$cfg['Servers'][$i]['host']          = 'localhost'; // MySQL hostname or IP address


Zeile 84 folgende Zeilen eintragen/überprüfen:
Code: Select all
$cfg['Servers'][$i]['user']          = 'root';      // MySQL user
$cfg['Servers'][$i]['password']      = '';          // MySQL password (only needed


Anmerkung: Da nur ich allein für alle drei Webprojekte Zugriff haben möchte reicht mir die Einrichtung von phpMyAdmin in nur diesem Verzeichnis völlig aus. Würde ich verschiedenen Benutzern einen Zugriff auf die MySQL-Datenbank gewähren wollen, so würde ich in jedem htdocs-Verzeichnis der entsprechenden Webprojekte phpMyAdmin einmal hinterlegen und entsprechend anpassen müssen. Dies ist hier meines Wissens nach für mein Vorhaben jedoch nicht erforderlich.

-------------------------------------------------------------------------------
7.) Erstellen und ablegen der Datei phpinfo.php zu Testzwecken

Editor geöffnet, neue Datei mit folgenden Zeilen erstellt:

Code: Select all
<?php
phpinfo();
?>


Anschließend festgelegt:
Berechtigung = 644
Gruppe = users
Benutzer= Benutzername

Anschließend diese Datei jeweils in folgenden Verzeichnissen abgelegt

/home/Benutzername/webprojektsonne/htdocs
/home/Benutzername/webprojektmond/htdocs
/home/Benutzername/webprojektsterne/htdocs

-------------------------------------------------------------------------------
8.) Erstellen und ablegen der Datei index.html zu Testzwecken

Editor geöffnet, neue Datei mit folgenden Zeilen erstellt:

Code: Select all
<html>
<head>
<title>Sonne</title>
</head>
<body bgcolor= "Lightblue">
<h1 align="center">
Webprojekt Sonne
</h1>
</body>
</html>


Datei als index.html abgespeichert
Folgende Rechte vergeben:
Rechte 664
Benutzer: Benutzername
Gruppe: users

Datei mit entsprechend jeweilig korrgiertem Titel in die Verzeichnisse:
/home/Benutzername/webprojektsonne/htdocs
/home/Benutzername/webprojektmond/htdocs
/home/Benutzername/webprojektsterne/htdocs
abgelegt.

-------------------------------------------------------------------
9.) Anlegen + Rechtevergabe der Datei .htaccess (Zwecks Zugriffbeschränkung von außerhalb meines Netzwerkes)

Code: Select all
Order deny, allow

deny from all

allow from 192.168.178.10 192.168.178.12 192.168.178.13


Rechte 664
Benuter: Benutzername
Gruppe: users

Ablegen dieser Datei in den drei Verzeichnissen:

/home/benutzername/webprojektsonne/htdocs
/home/benutzername/webprojektmond/htdocs
/home/benutzername/webprojektsterne/htdocs

-------------------------------------------------------------------
10.) Überprüfung Einstellung der Firewall
YAST-Sicherheit und Benutzer-Firewall-Schnittstellen:

Es sind folgende Schnittstellen eingetragen:
Gerät----------------------Schnittstelle oder String----------------------Konfiguriert in
DSL-Verbindung--------------------dsl0-------------------------------Keine Zone zugewiesen
Meine Netzwerkkarte-----------eth-id-00----------------------------------Externe Zone

Erlaubte Dienste:
Es sind folgende Dienste erlaubt:
HTTP-Server

-------------------------------------------------------------------
11.) Testen der Gesamtkonfiguration
Eingabe in die Adresszeile des Browsers:
www.webprojektsonne.local # Es sollte die index.html-Seite mit dem Webprojekt Sonne im Titel erscheinen (bisher ohne Erfolg)
www.webprojektsonne.local/phpinfo.php # Es sollte die phpinfo-Seite ausgegeben werden. (bisher ohne Erfolg)

(Für Webprojektmond und Webprojektsterne entsprechend...)

-------------------------------------------------------------------
Suse 10.3 / 2.6.22.9-0.4-default | Apache/2.2.4 (Linux/SUSE) | PHP 5.2.4 | MySQL 4.1.10a | phpMyAdmin - 2.11.0 | Firefox/2.0.0.8
xhosch
 
Posts: 5
Joined: 31. July 2005 11:59
Location: Bremerhaven

Postby Wiedmann » 01. August 2005 10:18

+++Mein Wissensstand+++ bzw. das was mir bei anderen Vorhaben bisher gelungen ist:
-Errichten und Betreiben des Hauptservers (Apache) mit php und mysql-Unterstützung
-Errichten von namensbasierten vhosts allerdings ohne php und mysql-Unterstützung

Hm, IP based VHosts sind doch auch nichts anderes als namebases. Also wen es da ging... BTW. Wenn du PHP im Hauptserver richtig konfiguriert hast, tut das in den VHosts automatisch. MySQL ist eh ein eigener Server und hat mit dem Apachen nichts zu tun. Also wenn du einen läuffähigen Server hast, musst doch nur noch die VHosts hinzufügen.

+++Frage 1 +++ Wo aber bitte befindet sich die Zeile:
#Action application/x-httpd-php /php4/php.exe ?

Zumindest hast du sie wohl weiter unteren in die vhost.conf eingetragen. Abgesehen davon wirst du diese Zeile so nur unter Windows finden (EXE). Willst du denn PHP als CGI einrichten oder als Modul? (Den AddType hast du irgendwo in der conf versteckt?)

### vhost webprojektsonne.local ###

Fehlt da nicht ein Directory - Block für das DocumentRoot? Für das cgi nimmt man kein Location, sondern macht einen ScriptAlias. Den Directory-Block für's cgi kannst du dir fast sparen, da unterhalb von DocumentRoot.

$cfg['PmaAbsoluteUri'] = '';

Genau so lassen und nicht ändern.

$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed

Hier hast du dann das neue Passwort rein? Oder hast den AuthType geändert?

Würde ich verschiedenen Benutzern einen Zugriff auf die MySQL-Datenbank gewähren wollen, so würde ich in jedem htdocs-Verzeichnis der entsprechenden Webprojekte phpMyAdmin einmal hinterlegen und entsprechend anpassen müssen.

Nein. Man installiert den phpMyAdmin nur einmal auf dem Server.

allow from 192.168.178.10 192.168.178.12 192.168.178.13

Dann mal hoffen das dein Browser seine Anfragen nicht von "192.168.178.11" macht ;-) BTW: Ohne diese Datei tut es wohl auch nicht?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby xhosch » 02. August 2005 16:26

Aha! Ich merke, das ich auf dem Holzweg schon ein ganzes Stück zurück gelegt habe... also wieder zurück und den richtigen Weg eingeschlagen...

Alles entsprechend korrigiert, Kiste läuft.

Meine Änderungen/Erläuterungen und zwischendurch auch ein paar Fragen:

Zu 1 und 2

.... Ich zermartere mir hin und wieder den Kopf über die Abkürtzung "BTW" Wahrscheinlich schütteln jetzt 25ig Mann den Kopf und weiter 30 brechen in schallendes Gelächter aus :\ ?

Mir war wohl irgendwie bekannt, das man PHP in zwei unterschiedlichen Varianten einrichten kann. Leider ist mir der Unterschied zwischen PHP als CGI und PHP als Modul nicht geläufig. Abgesehen davon, das ich hier nochmal nachschlagen muß sage ich aus dem Bauch heraus das es sich bei meiner Variante wohl um PHP als Modul handelt. Ich habe mich beim anlegen meiner VHosts nach dem Buch "Apache für Dummies" wie bereits oben erwähnt gerichtet. Leider war mir dort (selbe Seite) entgangen, das auf diese Weise nicht nur PHP-Skripte sondern auch Perl-Skripte zum laufen gebracht werden sollen. Daher meine bis dahin darauf abgestimmte Konfiguration meiner VHosts. Ein "AddType" konnte ich weder in der default-server.conf noch in der httpd.conf zum Zwecke der Einrichtung von PHP als CGI auffinden. Ist auch nicht weiter tragisch. Ich habe vorerst nicht vor Perl-Skripte laufen zu lassen. Natürlich hat sich dann auch die von mir gesuchte Zeile: #Action application/x-httpd-php /php4/php.exe erledigt.


Zu 3 Meine überarbeitete VHost
Code: Select all
<VirtualHost 192.168.178.11>
    ServerAdmin webmaster@webprojektsonne.local
    ServerName www.webprojektsonne.local
    DocumentRoot /home/Benutzername/webprojektsonne/htdocs
    ErrorLog /home/Benutzername/webprojektsonne/htdocs/logs/error.log
    CustomLog /home/Benutzername/webprojektsonne/htdocs/access.log common
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
<Directory "/home/Benutzername/webprojektsonne/htdocs">
        AllowOverride all
</Directory>
</VirtualHost>


Die beiden anderen VHosts natürlich entsprechend...

Zu 4/5/6 (PHP-MyAdmin)
Bei mir ist phpMyAdmin auf dem Hauptserver abgelegt unter /srv/www/htdocs/<phpMyAdmin>
lasse ich folgende Zeile leer:

Code: Select all
$cfg['PmaAbsoluteUri'] = '';


bekomme ich nichts angzeigt. Ändere ich die Zeile entsprechend ab in:

Code: Select all
$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin';


so klappt alles. Eingestellt habe ich ferner: auth_type = http. Ich muß mich halt noch anmelden.

Was ich dabei nicht verstehe ist, warum sollte ich die Variable leer lassen?

Zu 7 .htaccess
Wenn ich das alles richtig verstanden habe, so dürften schon aufgrund meiner aus dem privaten Adressbereich gewählten IP-Adressen aus dem Internet heraus keiner diese Bereiche öffenen können. Oder habe ich da was falsch verstanden? Angenommen ich würde innerhalb eines kleinen privaten Netzwerkes (mehrere Personen) nicht wollen das auf entsprechende Projekte zugeriffen wird dann besteht ja die Möglichkeit diese mit einer Datei .htaccess zu schützen. Bei mir schaut diese Datei die abgelegt ist unter /home/Benutzername/webprojektsonne/htdocs/<.htaccess> wiefolgt aus:

Code: Select all
Order deny,allow
deny from all
allow from 192.168.178.10 192.168.178.11 192.168.178.12 192.168.178.13 192.168.178.14


Die in der VHost eingetragene Zeile:

Code: Select all
AllowOverride all

erledigt dann den Rest. (siehe oben)
Auch an dieser Stelle funktioniert also alles :)


Weitere Korrekturen:
Die überflüssigen Verzeichnisse cgi-bin in den Verzeichnissen siehe Beitrag oben wieder gelöscht.

Die Rechte der htdocs-Verzeichnisse geändert:
chmod 755
Eigentümer: Benutzername
Gruppe: users
Hierin lag im übriegen meine Fehlermeldung Error 403 begründet.

Vom Holzweg zurück den Weg entlang und nun an einer Waldlichtung mit dem Blick auf Kommendes.... :)

Vielen Dank zunächst...

Gruß
Holger
Suse 10.3 / 2.6.22.9-0.4-default | Apache/2.2.4 (Linux/SUSE) | PHP 5.2.4 | MySQL 4.1.10a | phpMyAdmin - 2.11.0 | Firefox/2.0.0.8
xhosch
 
Posts: 5
Joined: 31. July 2005 11:59
Location: Bremerhaven

Postby deepsurfer » 02. August 2005 16:34

.... Ich zermartere mir hin und wieder den Kopf über die Abkürtzung "BTW" Wahrscheinlich schütteln jetzt 25ig Mann den Kopf und weiter 30 brechen in schallendes Gelächter aus :\ ?


http://de.wikipedia.org/wiki/Liste_der_ ... argon%29#B
etwas runter scrollen (alphabetisch sortiert)

Wenn du unter diesem LINK ist im entdefekt alles gesammelt was es so an Abkürzungen gibt :)
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby xhosch » 02. August 2005 17:16

OIC :) Danke!
Suse 10.3 / 2.6.22.9-0.4-default | Apache/2.2.4 (Linux/SUSE) | PHP 5.2.4 | MySQL 4.1.10a | phpMyAdmin - 2.11.0 | Firefox/2.0.0.8
xhosch
 
Posts: 5
Joined: 31. July 2005 11:59
Location: Bremerhaven


Return to Apache

Who is online

Users browsing this forum: No registered users and 17 guests