Web-Server

HTTP(S)-Server, HTML, CGI(PERL, C), PHP, LAMP(Linux, Apache, MySQL, Perl/PHP)
HTTP 1.0(IP-Adresse, nur 1 index.html), 1.1
www.apache.org
Version 1.3 oder 2.0(schwerer zu konfigurieren)
Windows-Versionen: Indigo-Perl(Perl+Apache)
 
Server(HTTPD)Port 80 -> Port 1024höher Client(browser)
Server(HTTPS)Port 80,443 -> Port 1024höher Client(browser)
/srv/www SuSE Voreinstellung für Hauptverzeichnis
/srv/www/cgi-bin CGI-Programme
/srv/www/htdocs HTML-Dateien(index.html)
/var/log/httpd error_log, access_log(webalyser)

Pakete: apache1.3.28(Basispaket, rpm empfohlen), apache-doc(für 1.3), Perl, mod_php4, selfphp, mysql, phpMyAdmin, Perl-Mysql-modules
/etc/init.d/apache start/stop/restart/reload
/etc/init.d/rc?.d/???apache LevelVerwaltung
/etc/httpd/httpd.conf zentrale KonfigurationsDatei für Apache
DocumentRoot "/srv/www/htdocs" hier sind die WebSeiten
DirectoryIndex index.html index.htm suchen und ausführen in jedem Verzeichnis
ErrorLog "/var/log/httpd/error.log"
LogFormat "....%h %1 ....." common Format für CustomLog definieren
CustomLog /var/log/httpd/access_log common StandardFormat-siehe LogFormat
ServerName "www.local" virtuelle Domains
ServerAdmin
webmaster@local erhält Fehlermeldungen, Standard root
User wwwrun httpd läuft als user wwwrun
Group www httpd läuft als group www
 
 
/var/log/httpd/error_log LogDateien, siehe httpd.conf
/var/log/httpd/access.log LogDateien, siehe httpd.conf
/var/lib/named/*.zone.de DNS-Zone
IN A 122.148.6.130 im Internet erreichbar, auch ohne www
dcserver CNAME dcserver.firma.de. auf diesem Rechner läuft alles
www CNAME dcserver als www. im Internet erreichbar
 
vituelle Hosts

benötigt http1.1-Browser
Client-Browser: www.firma.de -> DNS-Server
DNS-Server -> 192.122.6.130 -> Client-Browser
Client-Browser -> Port80 -> 192.122.6.130(http1.1:www.firma1.de) -> Web-Server
Web-Server -> apache -> /srv/www/www.firma1.de/htdocs -> index.htm -> Client-Browser
Bei mehreren Domänen:
/srv/www/htdocs wird ignoriert
/srv/www/www.firma1.de/htdocs wird bei NurAngabe der IP-Adresse gezeigt(default)
/srv/www/www.firma1.de/log Verzeichnis muß per Hand erstellt werden, nicht per Browser erreichbar
/srv/www/www.firma2.de/htdocs braucht IP und Adresse 192.122.6.130(www.firma2.de)
/etc/httpd/httpd.conf
#VirtualHost
NameVirtualHost * hört auf VirtualHost, * für alle Ip's, alle Ports, alle Host
<VirtualHost *> hört auf allen Schnittstellen
ServerName
www.firma1.de der 1. Eintrag ist Default-Server für alle Anfragen, die falsch sind
DocumentRoot "/svr/www/firma1.de/htdocs" der Rest wird vererbt
ErrorLog /srv/www/www.firma1.de/log/error_log eigene LogDateien pro Domain
CustomLog /srv/www/www.firma1.de/log/access_log common
ServerAdmin webmaster@firma1.de
</VirtualHost>
<VirtualHost *>
ServerName
firma1.de trotz DNS-Eintrag muß hier ohne www nochmal definiert werden
DocumentRoot "s/vr/www/firma1.de/htdocs"
ErrorLog /srv/www/www.firma1.de/log/error_log eigene LogDateien pro Domain
CustomLog /srv/www/www.firma1.de/log/access_log common

ServerAdmin webmaster@firma1.de

</VirtualHost>
<VirtualHost *> pro Domain mindestens diese 4 Zeilen
ServerName
www.firma2.de
DocumentRoot "/svr/www/firma2.de/htdocs"
ServerAdmin
webmaster@firma2.de
</VirtualHost>
 
oder NameVirtualHost 192.122.6.130 diese Version ist wegen Komplexität nicht zu empfehlen
NameVirtualHost 192.122.6.131
NameVirtualHost 127.0.0.1
<VirtualHost 192.122.6.130>
ServerName www.firma1.de
ServerName firma1.de
ServerName www.firma2.de
</VirtualHost>
<VirtualHost 192.122.6.131>
ServerName www.firma1.de
ServerName firma1.de
ServerName www.firma2.de
</VirtualHost>
 
mkdir -p /srv/www/www.firma1.de/htdocs/log Verzeichnisse incl. Unterverzeichnisse erstellen
mkdir -p /srv/www/www.firma1.de/log
mkdir -p /srv/www/www.firma2.de/htdocs/log
mkdir -p /srv/www/www.firma2.de/log
vi /srv/www/www.firma1.de/htdocs/index.html eine Index braucht man schon
vi /srv/www/www.firma2.de/htdocs/index.html

Fehlersuche

ps ax Ist der Prosess tatsächlich gestartet?
tail -f /var/log/messages zuerst logfiles anschauen
/var/log/error_log
/srv/www/domain/log/error_log
dig, nslookup DNS-Probleme, Client braucht DNS, Apache nicht
Proxy testweise ausschalten
Caching im Browser

cgi-bin

Scripte: alle Sprachen, die in Standard Output schreibt, nur der Interpreter hierfür muß da sein.
Zum Ansprechen von
www.firma1.de/cgi-bin/logview.sh oder den logs brauchts ein ScriptAlias:
<VirtualHost *>
ServerName
www.firma1.de
DocumentRoot /srv/www/www.firma1.de/htdocs
CustomLog /srv/www/www.firma1.de/log/access_log common
ScriptAlias /cgi-bin/ "/srv/www/www.firma1.de/cgi-bin/"
ScriptAlias /log/ "/srv/www/www.firma1.de/log/"
</VirtualHost>
 
touch logview.sh; vi logview.sh
#!/bin/bash
Leerzeile wird benötigt
echo "Content-type:text/plain"
echo
tail -n 50 ../log/error_log


Formular

<html>
<form action="/cgi-bin/script1.sh" method="post">
# action was soll passieren
# method=get Variable-query_string
# method=post Eingabe per Hand
<input type="text" name="Datei" size=3 Maxlength=3> Eingabefeld
<input type="submit" value="Absenden"> Absendebutton
<input type="text" name="Zeilen"> Eingabefeld
<input type="submit" value="Absenden"> Absendebutton
</form>
</html>


script von Tastatur lesen

vi script1.sh
#!/bin/bash
..............
read EINGABE read für method="post"
echo "EINGABE = '$EINGABE'" Ausgabe: 'Datei=dhgghj&Zeilen=100'
read EINGABE read für method="gett"
echo "EINGABE' = '$QUERY_STRING'" Ausgabe: 'Datei=dhgghj&Zeilen=100'
read EINGABE andere Methode
echo "DATEI = '$Datei'"
echo "Zeilen = '$Zeilen'"
vi script2.sh
#!/bin/bash
echo "Content-type: text/plain"
echo
read EINGABE
Paar1=`echo $EINGABE | cut -d '&' -f 1`
Paar2=`echo $EINGABE | cut -d '&' -f 2`
Datei=`echo $Paar1 | cut -d '=' -f 2`
Zeilen=`echo $Paar2 | cut -d '=' -f 2`
tail -n $Zeilen ../log/$Datei
vi script2.pl Perl-Version gibt Datei und Zeilen getrennt aus, Methode
#!/usr/bin/perl
use CGI;
$CGI = new CGI;
print "Content-type: text/plain\n";
print "\n";
$Datei = $CGI->param('Datei');
$Zeilen = $CGI->param('Zeilen');
print "Datei = '$Datei'\n";
print "Zeilen = '$Zeilen'\n";


css

test.htm
<b>beliebiger Text</b>
test2.htm
<head>
<link rel=stylesheet type="text/css" href="/oks..css">
</head>
<p class="datei.css">beliebiger Text</p>
stylesheet.css
a:link {
color:#000066;
text-decoration:none;
}

Basic Authentication

Client(Browser) fordert Seite an -> Server
Server(Seite ist gesschützt) -> 401Seite ist geschützt -> Client(Popup:Name, Kennwort)
Client Name, Kennwort -> Server
Server html-Datei -> Client
.htaccess und password-Datei kann man lokal erzeugen und mit FTP übertragen
Logout gibts nicht, Browser muß Fenster schließen
mkdir /srv/www/www.firma.de/auth hier liegent die Passwörter, sollte man mit .htaccess, htgroup schützen
htpasswd -c /srv/www/www.firma1.de/auth/pw username -c nur beim 1. Mal, sonst Überschreibmodus
htpasswd /srv/www/www.firma1.de/auth/pw user2 password für user2 wird erzeugt
in der httpd.conf braucht man kein ScriptAlias für Verzeichnis /auth/(Name ist frei wählbar), da nur Text, wie /log/
vi .htaccess Web-Server schaut beim Öffnen eines Verzeichnisses nach dieser Datei
AuthType Basic
AuthName "geschützter Mitarbeiterbereich" Bezeichnung
AuthUserFile /srv/www/www.firma.de/auth/.passwords Dateiname für Username und Kennwort
Require user peter gabi micha peter gabi micha dürfen zugreifen
Require valid-user jetzt dürfen alle aus der passwordsDatei
AuthGroupFile /srv/www/www.firma.de/auth/.htgroup Dateiname für Gruppen und deren user
Require group mitarbeiter technik hiermit dürfen user der Gruppen ...
.passwords peter:djsgktrhj
gabi:jsglhöetuioqg
micha:euilaghseig
lola:suihglwi
fritz:fagklhg
vi .htgroup oder wie sie auch immer heißen soll, siehe .htaccess
technik: peter gabi micha
mitarbeitet: lola fritz
vi /etc/httpd/httpd.conf normalerweise wird .htaccess ignoriert
<VirtualHost *> oder als globale Einstellung in Zeile 439
ServerName
www.firma1.de firma1 wird definiert, firma2 braucht weitere <VirtualHost *>
........
ScriptAlias /cgi-bin/ "/srv/www.firma1.de/cgi-bin/" Zugriff auf cgi-bin(neben htdocs)
<Directory /> /=htdocs
AllowOverride All none muß ausgeschaltet werden, zum Auslesen der .htaccess
</Directory>
<Directory /srv/www/www.firma.de/cgi-bin> cgi-bin liegt neben /=htdocs
AllowOverride All
</Directory>
</VirtualHost>
oder Include "/etc/httpd/www.firma1.conf" Datei, anstatt <VirtualHost>, Definition wird ausgelagert
oder Include "/etc/httpd/vhosts/" Verzeichnis, Name wählbar, Definitionen werden ausgelagert
oder beide IncludeAnweisungen hintereinander, wobei die Erste die Voreinstellung für NurIP im Browser ist.
vi /etc/httpd/www.firma1.conf bei Include "/etc/httpd/www.firma1.conf" in httpd.conf
<VirtualHost *> alle Einstellungen jetzt hier rein
</VirtualHost>

mkdir /etc/httpd/vhosts; vi /etc/httpd/vhosts/www.firma1 bei Include "/etc/httpd/vhosts/" in httpd.conf
<VirtualHost *>
ServerName
www.firma1.de firma1 wird definiert, firma2 braucht weitere <VirtualHost *>
DocumentRoot /srv...
CustomLog /srv/..
ErrorLog /srv...
ScriptAlias ......
cp /etc/httpd/vhosts/www.firma1 /etc/httpd/vhosts/www.firma2; vi /etc/httpd/vhosts/www.firma1
firma1 mit firma2, etc. ersetzen
 
 
</VirtualHost>
vi /srv/www/www.firma1.de/cgi-bin/.htaccess
.....
AuthUserFile braucht man nicht, wenn nur vernünftige scripte drin sind
.....
 

Hauptseite