ABSTRACT: der apache server wird vorgestellt. moeglichkeiten fuer dynamsiche seiten und fuer modulare site strukturen werden kurz diskutiert. AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt typische anwendung einer linux oder *BSD kiste ist der betrieb eines webservers. das macht in unix natuerlich ein daemon programm. der beliebteste web server ist sicherlich apache. er wird mit praktisch allen distributionen mitgeliefert. wenn apache noch nicht auf deiner maschine laeuft: zum starten des apache liefern die meisten distributionen start scripts mit. in debian z.b.: /etc/init.d/apache start oder man verwendet das apachectl programm um den apache zu starten: apachectl start oder apachectl restart wenn man ihn neu starten will apachectl configtest testet das apache configurations file ob es fehlerfrei ist. (das empfiehlt sich nach konfigurationsaendrungen auf production server bevor man ein restart macht.. damit der server dann nicht lange down ist weil man erst die fehler im config file beheben muss) die apache configuration sagt dem apache wo er die html files findet die er im web verfuegbar machen soll, wo scripts ausgefuehrt werden sollen oder wo verzeichnisse mit passwoerter geschuetzt werden sollen. ein locate httpd.conf sag einem meist wo man das httpd.conf das haupt confiugrationsfile vom apache findet. debian z.b. hat es dort wo man es erwarten wuerde, naehhmlich unterhalb von: /etc/apache dort findetn sich auch access.conf (fuer zugrifssrechte) und srm.conf die configfiles sind ueblicherweise gut kommentiert und mit auskommentierente beispeilen ausgestattet sodass man sich relativ leicht zurecht findet. mit "LoadModule" zeilen kann der apache server mit zusaetzlichen funktionen ausgetattet werden (z.b. mod_perl zum direkten ausfuehren von perl scripts im apache) web anfragen kommen, wenn im browser nicht anders angegeben ueber tcp port 80. auf welchen ports der server arbeite koennte man z.b. hier verstellen. ein oft benoetigte funktion ist das einrichten von "virutal hosts" (oft kurz vhost genannt). hat ein rechner mehrere namen die alle auf seine IP addresse zeigen, zb.: office.irgendwo.at www.irgendwo.at www.bliblablo.org so kann der apache server verschiedenen seiten zurueckliefern je nachdem mit welcher addresse eine http (http ist das protokoll das definiert wie web zugriffe auf einen server zu erfolgen haben) abfage kommt verschiedene seiten fuer jede domain zurueckliefern. (ganz ganz ganz alte browser haben den namen den sie zum abfragen benuetzten nicht mitgeschickt da waren vhosts nur moeglich in dem man jeder web addresse eine eigenen IP addresse zugeordnet hat und der web server verschieden ja nach IP addresse geantwortet hat... eine ziemliche verschwendung von IP addressen die schon lange nicht mehr benutzt wird...) die relevanten teile fuer eine vhost konfiguration aus einem httpd.conf koennten etwa so aussehen: NameVirtualHost 10.11.12.13 (die IP addresse auf der alle virtual host anfragen beantwortet werden) ServerAdmin maxmeier@irgendwo.at DocumentRoot /home/maxmeier/office/ ServerName office.irgendwo.at Alias /image/ /var/www/image/ ErrorLog /var/log/apache/office-error.log TransferLog /var/log/apache/office-access.log ServerAdmin alfhuber@irgendwo.at DocumentRoot /var/www/bliblablo/ ServerName www.bliblablo.org ScriptAlias /cgi /home/alfhuber/meinecgiscripts/ ErrorLog /var/log/apache/bliblablo-error.log TransferLog /var/log/apache/bliblablo-access.log greift jetzt jemand auf http://www.bliblablo.org/test.html zu so wird der apache server versuchen das file: /var/www/bliblablo/test.html zu lesen. ebenso greift jetzt z.b. jemand auf http://www.bliblablo.org/cgi/test.cgi zu so wird der server versuchen das script test.cgi auszufuehren und die ausgabe als web seite zu presentieren... wie man html seiten selbst schreibt wird im rahmen der CD nicht behandelt. dafuer gibt es schon sehr gute doku am web. z.b. "selfhtml" von stefan muenz: http://selfhtml.teamone.de/ http://www.selfhtml.org/ wer selbst keinen zugriff auf die apache configuration hat und webseiten machen will kann diese ueblicherweise in seinem homeverzeichniss in ein verzeichniss namens public_html/ stellen sei sind dann z.b. unter http://hostname.irgendwo.at/~username abrubar. in stolperstein bei der apache configuration sind oft die rechte die einem verzeichniss (und damit unterverzeichnissen) zugeordnet sind: AllowOverride AuthConfig Options ExecCGI FollowSymLinks besagt z.b. dass im verzeichniss liegende files vom apache als scripts ausgefuehrt werden duerfen. dass er im verzeichniss vorhandene symlinks beruecksichtigt. das "AllowOverride AuthConfig" besagt dass dort in dem file ein file namens .htaccess liegen darf in dem man den zugriff auf dieses verzeichniss einschraenken kann. (man beachte: dies ist zusaetzlich zu den unix permissions. der user unter dem der web server laeuft (z.b. www-data) muss natuerlich rechte haben in das direcotry zu kommen und das file lesen zu koennen bzw ausfuehren zu koennen wenn es ein script ist.) ein einfaches .htaccess file koennte z.b. so aussehen: AuthName wer_hier_reinwill_braucht_ein_passwort AuthType Basic AuthUserFile /home/maxmeier/meinewebuser require valid-user das file in dem die user und passwoerte stehen kann man mit dem program htpasswd bearbeiten: htpasswd -c meinewebuser moriz legt ein neues file meinewebuser an und fuergt einen user namens moriz ein. noch kurz ein paar worte zu den moeglichkeiten das web mit dynamischen inhalten zu fuellen: * clientseitige loesungen. d.h. loesungen die das vorhandensein von spezieller software am webbrowser benoetigen (javascript, java, flash, etc..) sollte man so weit wie moeglich vermeiden. java kann unter umstaenden bei spezialloesungen hilfreich sein. javascript macht aber die meisten seiten unbedienbar (gute firewalls sollten javascript aus sicherheitsgruenden filtern bzw verantwortungsbewusste admins erlauben ihren usern das ausfuehren von javascript nicht). flash ist als proprietare loesungen ohnehin zu vermeiden. * seververseite loesungen: o cgi scripts - das sind programme die, jedesmal wenn sie vom browser angefordert werden neue gestartet werden und die ausgabe als html produzieren. (cgi scripts koennen allerdings auch dirct z.b. .jpg bilder oder reine textausgaben produzieren). cgi scripts koennen in verschiedenen programmiersprachen geschrieben werden. wir lernen demnaechst in perl und in bash geschrieben cgi scripts kennnen. o mod_perl aehnlich wie CGI scripts jedoch laeuft das script nicht als eigner prozess der jedesmal neu angestartet werden muss sondern das perl programm wird direkt im apache selbst ausgefuehrt. mod_perl scripts sind somit schneller und koennen durch direkten zugriff auf apache interna einige zaubertricks... o will man perl code direkt in eine html seite einbetten gibt es dafuer auch loesungen. z.b.: mason, eperl, etc.. o php scripts. php ist eine inzwischen schon relativ leistungsfaehige script sprache die gerne fuer webseiten verwendet wird. wer jedoch schon perl kann ist mit perl meist besser bedient. o SSI (serverside includes). (mod_include). erlaubt es andere seiten und scripts in html (meist .shtml genannte) zu inkludiren. die seite musst dazu vom webserver ebenfalls jedesmal wenn sie abgefragt wird durchgelesen werden. o asp scripts. von microsoft entwickelte und vorallem auf windows verfuegbare script umgebung. um jeden preis vermeiden. o zope, interchange, etc.. weitere frameworks zum dynamischen generieren von seiten... o .... geht es nur darum seiten modular aus bausteinen aufzubauen (sodass man nur an einer stelle etwas aendern muss um das layout einer gesamten site aendern zu koennen) und braucht man ansonsten keine, bei jedem aufruf dynamisch generieren, seiten so empiehlt es sicht die seiten einmal aus einem script oder einer preprozessor/macro sprache generiren zu lassen und dann nur die statisch generierent seiten im web zu haben. (natuerlich ist auch eine mischung moeglich: aus scripts erzeugte statische seiten und template seiten fuer perl scripts die an den stellen benuetzt werden wo wirklich dynamischer inhalt notwendig ist.) sofern man die macro loesungen nicht gleich selbst mit einigen handgestrickten perl scripts bastelt... (was meist am einfachsten ist) hier einige links fuer preprozessor/macro loesungen: * gtml: http://www.freecode.com/projects/gtml/ * wml: http://www.engelschall.com/sw/wml/ * wpp: http://the.sunnyspot.org/wpp/ * htmlpp: http://freshmeat.net/projects/htmlpp/ .... EXERCISES: * schau dir deine apache config an. * richte dir einen virtual host ein. * richt dir ein verzeichniss fuer private dokumente ein das du mit einem .htaccess schuetzt * diskutieren die verschiedenen moeglichkeiten fuer dynamisch generierte seiten bzw fuer modulare site strukturen. REFERENCES: man apache /usr/share/doc/apache/manual.html http://www.apache.org/