apache web server- instalacija i konfiguracija
TRANSCRIPT
Apache Web Server
Instalacija i Konfiguracija
Uvod
Sigurno ste se nekad zapitali kako rade web serveri, kako se postavljaju, sta je potrebno da bi i vi na svojoj lokalnoj
linuxici mogli podici web server. Odgovore na ova i jos neka pitanja moci cete naci u slijedecem textu.
Postoji dosta web servera koji se koriste u svijetu unixa i windowsa. U ovom textu cu opisati Apache web server.
Apache
Trenutna verzija Apache web servera je 1.3.11, koju mozete skinuti na stranici www.apache.org, dok sve dodatne
informacije koje vas interesuju mozete saznati na stranici http://www.apacheweek.com/ . Apache web server mozete naci
ukljucenog u pakete u nekim linux distribucijama, kao sto su: SuSe, RedHat, Slackware, OpenLinux i druge. Sad dolazi
druga strana price, a to je da taj Apache source paket nije bas zadnja verzija i da morate koristiti njihov odabir direktorija
pri instalaciji, koji je potpuno razlicit od onoga koji dodje uz instalaciju.Source fajlove mozete naci na adresi
www.apache.org/dists , binarne na: http://www.apache.org/dist/binaries/linux/ .
Ja preporucujem da skinete i kompajlirate source fajl, jer time cete dobiti na kontroli same instalacije i kontroli
instaliranih modula.
Instalacija iz source fajla
Da krenemo iz pocetka. Pretpostavicemo da smo skinuli Apache u direktorij /download. Fajl se nalazi zapakovan u tar.gz
formatu. Da bi smo otpakovali fajl apache_1.3.11.tar.gz kucamo:
tar zxvf apache_1.3.11.tar.gz
Sad smo dobili source fajlove koji se nalaze u direktoriju /download/apache_1.3.11. Sad udjemo u taj direktorij i
pokrenemo konfiguracijsku shell skriptu:
./configure
Ovaj fajl ce kreirati fajlove u kojima se nalazi default konfiguracija. U slucaju da ne zelite da vam se Apache nalazi u
direktorijima koje on odredi, editujte fajl httpd.h. Ovo se obicno radi zbog toga da bi se npr. konfiguracijski fajlovi nalazili
umjesto u /usr/local/etc/httpd/ u /etc/httpd. Isto mozemo uraditi i za server root fajlove koji su po defaultu stavljeni u
/usr/local/etc/httpd/htdocs/, dok ih ja npr. stavljam u direktorij: /home/httpd/html. Sljedeci korak je kompajliranje, a njega
zapocinjemo sa komandom:
make
Na ekranu cemo vidjeti kako se vrsi kompajliranje. U slucaju da se pojave neke greske, provjerite da li imate potrebne
include fajlove (kernel headers) instalirane i provjerite da li su vam postavljeni simbolicki linkovi na direktorijima:
/usr/include/linux -> /usr/src/linux/include/linux
/usr/include/asm -> /usr/src/linux/include/asm
/usr/src/linux -> /usr/src/linux-2.2.14
Ako vam ovi linkovi nisu napravljeni kako treba, onda cete ih morati sami napraviti sa komandom:
ln -s /source_dir /destination_dir
Pojasnjenje komande: ln je skracenica od komande link; opcija -s govori komandi ln da napravi simbolicki link sa
source direktorija (/source_dir ) na destinacioni direktorij (/destination_dir).
Nakon zavrsenog kompajliranja, u direktoriju /download/apache_1.3.11/src mozemo naci httpd binarni (exekutabilni) fajl.
Sad je njega i ostale binarne i konfiguracijske fajlove potrebno prebaciti u odgovarajuce direktorije, a to radimo
komandom:
make install
Ovom komandom smo instalirali binarne i konfiguracijske fajlove za Apache web server u njihove direktorije koje smo
odredili na pocetku instalacije editovanjem fajla httpd.h. Sad dolazi interesantniji dio price, a to je konfigurisanje.
Konfigurisanje
Sad kad smo instalirali Apache web server sad dolazi na redi njegova konfiguracija. Svi konfiguracijski fajlovi se nalaze u
/etc/httpd (ja sam za sebe odredio da se oni tamo nalaze). Tamo cete naci nekoliko fajlova:
• httpd.conf --- podize server daemon (broj porta na kom daemon radi, user pod kojim se pokrece i sl.)
• srm.conf --- podesava direktorijeza root dokumente i sl.
• access.conf --- podesava osnovne parametre za pristup
• mime.types --- ovaj fajl govori serveru sta ce uciniti kad od nekog browsera dobije zahtjev za fajlom sa nekom
ekstenzijom koja je definisana u ovom fajlu
U ovim konfiguracijskim fajlovima kao i u vecini linux konfiguracijskih fajlova veoma je dobro opisano sve sta se unutra
nalazi, tako da ne mozete pogrijesiti ni u kom slucaju, ako ga dobro procitate. Fajl mime.types nije u stvari pravi
konfiguracijski fajl. Njega mozemo definisati kao fajl za prevodjenje, jer to je u stvari njegova funkcija, da prevede
ekstenzije koje su zatrazene od browsera u mime-tipove, kad ih prevede i posalje serveru, server onda salje browseru
natrag odgovor. Ovaj fajl ne bi trebalo editovati, jer je on sam po sebi sredjen. Svaki put kad nesto ubacite ili izbrisete u
konfiguracijskim fajlovima, potrebno je restartovati Apache, a to radimo sa komandom:
linux:~ # ps x |grep httpd
117 ? S 0:02 /usr/sbin/httpd -f /etc/httpd/httpd.conf
linux:~ # kill -HUP 117
linux:~ #
Ovako to izgleda na SuSe linuxu. Sad je daemon restartovan i pokrenut sa novom konfiguracijom.
Hostiranje virtualnih web stranica
Virtualno hostiranje je kad npr. jedan racunar ima na sebi vise domena ili vise IP adresa. Stari nacin je bio da svaka
domena ima svoju IP adresu, dok novi nacin je da se na jednu IP adresu stavi vise domena, ali ovo ne radi kod
browsera koji ne podrzavaju HTTP 1.1. Prednost starog nacina je ta da imate sigurniji virtualni ftp i mail servis.
IP bazirano virtualno hostiranje
U ovoj vrsti virtualnog hostiranja svaki virtualni host (domena) ima svoju IP adresu. Kad browser posalje zahtjev za
nekom domenom, Apache i drugi programi znaju koju IP adresu da usluze, odnosno koju domenu da pozovu. Ovakvav
nacin virtualnog hostiranja ima i svojih losih strana, a jedna od njih je veliko gubljenje IP adresnog prostora, zamislite da
hostirate 620 domena. To znaci da bi vam trebale skoro 3 citave C klase IP adresa.
A sad malo o nacinu na koje se postavlja vise IP adresa na jednu masinu i kako linux masini reci da koristi vise IP
adresa. Sto se tice kernel konfiguracije, kerneli 2.2.X podrzavaju tu opciju po defaultu. Sad trebamo ubaciti te IP adrese
na masinu i nastimati masinu tako da podize te adrese pri bootanju.
Najbezboliniji nacin je da editujete rc.local fajl koji se nalazi u direktoriju /etc/rc.d. Na primjer mi zelimo da podignemo
aliase za eth0 mreznu karticu koja nam je glavna mrezna kartica, u rc.local fajl je potrebno da upisemo slijedece:
ifconfig eth0:0 192.168.1.176 netmask 255.255.255.192 broadcast 192.168.1.190 up
ifconfig eth0:1 192.168.1.177 netmask 255.255.255.192 broadcast 192.168.1.190 up
ifconfig eth0:2 192.168.1.178 netmask 255.255.255.192 broadcast 192.168.1.190 up
ifconfig eth0:3 192.168.1.179 netmask 255.255.255.192 broadcast 192.168.1.190 up
Ovaj primjer je radjen pod pretpostavkom da nam je IP adresa na eth0 192.168.1.129-190 i da imamo cetvrtinu C klase.
Sad kad smo podigli ove aliase potrebno je postaviti DNS server koji ce raditi za ove domene. U jednom od proslih
brojeva ste mogli procitati o postavljanju DNS servera, a ako nemate svoju domenu, onda je mozete kupiti na stranici
Internica: www.internic.net
Sad dolazi dio u kojem je potrebno podesiti Apache web server da radi sa virtualnim domenama. Ovo mozete naci pri
dnu httpd.conf konfiguracijskog fajla. Glavna stvar koja se ni u kom slucaju ne smije zaboraviti je da se sve sto se radi
sa virtualnim hostovima mora staviti izmedju virtualhost oznaka u konfiguracijskom fajlu. Sve komande koje stavljamo za
neki host, se mogu staviti ovdje izmedju ovih oznaka. Zahvaljujuci ovim oznakama mozemo u httpd.conf dodati
neogranicen broj virtualnih hostova. Ovo se postize time sto svaki server ima svoje unikatno ime i svoje setup fajlove.
Takodje u setup fajlovima svakog virtualnog servera se nalazi bindaddress uputa koja govori svakom serveru da
odgovori samo jednoj IP adresi, koja je postavljenja sa bindaddress uputom.
Djeljeno IP virtualno hostiranje
Ovo je novi nacin virtualnog hostiranja. On koristi jednu IP adresu za virtualne hostove i samim tim postize na ocuvanju
sistemskih resursa (konkretno IP adresa). Ovo je moguce uraditi pomocu novog HTTP 1.1 protoklola. Da malo
pojednostavimo: ovaj protokol se nalazi u sastavu browsera i on govori serveru na koju stranicu zeli da ide, odnosno
koju stranicu korisnik poziva. Ali problem nastaje sa browserima koji ne podrzavaju odnosno koji nemaju u sebi
ugradjen HTTP 1.1 protokol. Ovakvi browseri ce ici na glavnu stranicu servera, odnosno na stranicu koja ima dodjeljenu
IP adresu servera.
Podesavanje ovakvog tipa virtualnog hostiranja je mnogo jednostavnije od stvarnog IP hostiranja. Jos uvijek su nam
potrebne domene koje ce biti propisno delegirane u nasem DNS serveru, odnosno sve ce domene upucivati na istu IP
adresu. Apache se podesava isto kao i prije, samo Apache server buduci da koristimo jednu istu IP adresu u virtualhost
oznakama, zna da se radi o virtualnom hostiranju.
NAPOMENA: primjere cete moci naci na kraju texta.
Korisnicki Web Direktoriji
Postoje dva nacina za baratanje sa korisnickim web direktorijima. Prvi je da kreirate poddirektorij u korisnickom home
direktoriju, dok je drugi da kreirate potpuno razlicite direktorije za web. Prva metoda je po defaultu ukljucena. Uvijek kad
dodje zahtjev za stranicom www.info.ba/~kulla, server ce traziti unutar direktorija kulla direktorij koji se zove public_html.
Drugi je nacin da imate potpuno drugi direktorij u kojem ce se nalaziti user web direktoriji. Postoje mnoge alternative
kako ovo odraditi. Sustina je u tome da treba editovati httpd.conf fajl u dijelu gdje se nalazi direktiva UserDir i postavite je
na npr /home/httpd/, onda svi zahtjevi koji dolaze na zahtjev za adresom www.info.ba/~kulla/ ce biti prosljijedjeni na
/home/httpd/kulla/. Ako zelimo da imamo poddirektorije u home direktorijima korisnika, onda cemo u varijablu UserDir
staviti /home/httpd/*/html. Ovo znaci da ce svi zahtjevi koji budu dosli na adresu www.info.ba/~kulla/ biti proslijedjeni na
/home/httpd/kulla/html/ direktorij.
Startanje servera
Postoje dva nacina za pokretanje Apache web servera i oba se svode na pokretanje servera preko daemona. Jedan je
preko Apache daemona koji je non-stop pokrenut, a drugi je preko inet daemona. Prvi nacin je u httpd.conf fajlu
definisan kao standalone mod i on se koristi u slucaju da vam treba web server koji je uvijek podignut. Drugi nacin je da
se server pokrene preko inet daemona i ovaj nacin se koristi u slucajevima da vam web server treba samo povremeno.
Instalacija Apache servera po defaultu postavlja server u standalone mod. Jedini razlog da koristite startanje web
servera preko inetd daemona je testiranje web skripti i ne koristenje web servera u ozbiljnije svrhe (intranet web server).
Inetd mod je koristan takodje jer vam cuva radnu memoriju (swap) samim time sto web server nece biti rezidentan citavo
vrijeme nego ce se pozivati po potrebi. Tada ce u memoriji biti samo rezidentan inet daemon.
Da bi ste podesili Apache da se starta preko inet daemona potrebno je da editujete nekoliko fajlova:
Prvi je /etc/services. U njemu provjerite da li imate ovakvu liniju i ako je nemate dodajte je:
http 80/tcp
Drugi koji treba editovati je /etc/inetd.conf u kojem je potrebno dodati liniju za Apache koja treba da izgleda ovako:
http stream tcp nowait root /usr/sbin/httpd httpd
U ovom slucaju se Apache web server odnosno httpd daemon nalazi u /usr/sbin/ direktoriju pod imenom httpd. Kao sto
vidite u primjeru postoje dvije httpd oznake. Za prvu smo upravo objasnili sta predstavlja (http daemon), dok je druga
oznaka koju zahtjeva inet daemon da bi u opste i podigao taj servis (u nasem slucaju httpd).
Sad kad smo editovali inetd potrebno ga je restartovati, a to radimo tako sto sa komandom: ps -x |grep inetd nadjemo
PID inetd procesa i onda mu posaljemo HangUP signal odnosno signal da se restartuje. Ovo radimo tako sto ako nam
je recimo inetd an PID-u 77 kucamo slijedecu komandu:
kill -HUP 77
Ovom komandom smo restartovali nas inet daemon. U slucaju da nismo imali podignut inetd, potrebo ga je pokrenuti
sa komandom: /etc/rc.d/inetd start
Mali opis varijabli u httpd.conf fajlu
Tip servera (ServerType)
Ovdje se "izjasnjavamo" kako ce nasa masina pokretati httpd server. Kao sto smo gore rekli, po defaultnoj instalaciji ova
opcija je stavljena na "standalone" tip servera. Ovo znaci da ce nas http server biti pokrenut konstantno. Druga opcija
koju mozemo staviti ovdje je da se server pokrece preko inetd-a ("inetd") i tada dobijamo da se binarni fajlovi http servera
pokrecu svaki put kad se posalje zahtjev za web stranicom i ovo moze dodatno usporiti masinu.
Port na kojem ce server raditi (Binding Port)
Ova varijabla specificira na kojem ce portu http daemon cekati na zahtjeve od web browsera. Ako ste root na tom serveru
onda koristite port 80 (defaultni), a ako nemate root dozvole na serveru onda koristite neki port izmedju 1025 i 65535.
Korisnicki account koji koristi server (user)
Ovo je user ID koji koristi server prilikom odgovaranja na zahtjeve korisnika. Ova setovanja je potrebno postaviti samo
ako cete koristiti server u "standalone" modu. Ako nemate root permisije onda umjesto ovog accounta postavite svoj
account. Preporucljivo je kreirati korisnika koji ce biti unikatan iz cistog razloga sto je lakse nadzirati permisije nad
fajlovima kojima barata server.
Korisnicka grupa koju koristi server (group)
Ovo je grupni ID broj koji koristi server prilikom odgovaranja na zahtjeve korisnika. Ovo vrijednost je skoro jednaka sa
vrijednoscu user accounta koji server koristi da bi radio u standalone modu. U slucaju da niste root stavite grupu u kojoj
se vi nalazite, a to cete saznati tako sto otkucate u shellu groups komandu.
E-mail adresa server administratora (ServerAdmin)
Ovo je e-mail adresa na koju ce korisnici u slucaju nekih problema poslati mail i obavjestiti administratora servera.
Ovdje mozete staviti vasu mail adresu.
Lokacija server direktorija (ServerRoot)
Ovo je direktorij u kojem se nalaze fajlovi servera. Ako imate root dozvole ostavite ga u njegovoj defaultnoj lokaciji
Ovo je direktorij u kojem se nalaze fajlovi servera. Ako imate root dozvole ostavite ga u njegovoj defaultnoj lokaciji
/usr/local/apache/, a ako nemate root dozvole onda kreirajte jedan poddirektorij u vasem direktoriju.
Lokacija HTML fajlova (DocumentRoot)
Ovo je direktorij u kojem se nalaze HTML fajlovi koji se posluzuju (otvaraju) kad pozovemo browserom adresu servera.
Defaultna lokacija je /usr/local/apache/htdocs. Vi je mozete postaviti u home direktorij korisnika kojeg ste postavili u
dijelu Server user identity, ili u poddirektorij vaseg home direktorija(ako nemate root dozvole).
Testiranje HTTPd-a
Sad kad smo instalirali Apache web server, bio bi red i da probamo tu nasu majstoriju. Logujemo se u consolu kao root
i pokrenemo httpd sa komandom: httpd& (znak & govori komandi koju smo otkucali da se izvrsi u pozadini).
Sad komandom ps pogledamo da li se server podigao. Kad utvrdimo da se server podigao bez problema i da ga imamo
u listi procesa u consoli otkucamo slijedecu komandu:
linux:~ # telnet www.info.ba 80
Broj 80 oznacava port koji smo stavili u instalaciji, defaultni port za httpd je 80. Ako ste postavili neki drugi port u
httpd.conf fajl onda broj 80 zamjenite sa tim brojem porta koji ste tamo postavili. Sad bi smo trebali dobiti slijedeci ispis
na ekranu:
Trying 195.222.53.149...
Connected to www.info.ba.
Escape character is ' ]̂'.
Sad pritisnite bilo koje slovo na tastaturi i pritisnite tipku enter. Evo sta dobijete kad pritisnete slovo a:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>501 Method Not Implemented</TITLE>
</HEAD><BODY>
Method Not Implemented
a to /index.html not supported.
Invalid method in request a<P>
________________________________________
<ADDRESS>Apache/1.3.11 Server at www.info.ba Port 80</ADDRESS>
</BODY></HTML>
Connection closed by foreign host.
linux:~ #
Sad imamo podignut web server koji radi po nasim "uputstvima".
Primjer konfiguracijskih fajlova za virtualne domene
Apache kao sto ste mogli vidjeti iz texta iznad ima tri konfiguracijska fajla: access.conf , httpd.conf i srm.conf, mada
Apache u svojim novijim izdanjima (iza 1.3.9) sva svoja konfiguracijska setovanja stavlja u httpd.conf fajl. To nije bas
pregledno kao kad imate tri fajla, zato cemo vam dati primjer konfiguracije virtualnih domena sa koristenjem sva tri fajla.
Access.conf
Ovaj konfiguracioni fajl cemo iskoristiti da ogranicimo pristup strukturi web direktorija.
# /var/www/conf/access.conf: Globalna access konfiguracija
<Directory />
AllowOverride None
Options Indexes
</Directory>
# sad cemo dati jednoj domeni direktorij koji je passwordom zasticen
<Directory /virtual/domain1.com/var/www/html/priv>
AuthUserFile /var/www/passwd/domain1.com-priv
AuthGroupFile /var/www/passwd/domain1.com-priv-g
AuthName PRIVSECTION
AuthType Basic
<Limit GET PUT POST>
require valid-user
</Limit>
</Directory>
# dok cemo drugu ostaviti kao public domenu
<Directory /virtual/domain2.com/var/www/html>
Options IncludesNOEXEC
</Directory>
Httpd.conf
Ovaj konfiguracijski fajl se koristi za osnovne opcije Apache web servera.
# /var/www/conf/httpd.conf: glavni configuracijski fajl
# posto je server non-stop podignut
ServerType standalone
# Port na kojem se server pokrece
Port 80
# Logovanje klijenata sa njihovim IP adresama
HostnameLookups on
# User koji pokrece server
User www
Group www
# Direktorij u kojem se nalazi server sa svojim konfiguracijskim fajlovima
ServerRoot /var/www
# fajl u koji se upisuje broj procesa (PID)
PidFile /var/run/httpd.pid
# Interni info o procesima na serveru
ScoreBoardFile /var/www/logs/apache_status
# Timeout i KeepAlive opcije
Timeout 400
KeepAlive 5
KeepAliveTimeout 15
# broj servera koji se mogu pokrenuti odjednom sa njihovim procesima
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 30
# dio u kojem su opisani virtualni hostovi
# ovdje serveru morate reci da prihvata zahtjeve na nacin ip:port
Listen 10.10.10.129:80
Listen 10.10.10.130:80
# varijabla virtualni host omogucava vam da podignete vise virtualnih
# domena na vasem serveru
<VirtualHost www.domain1.com>
# mail adresa na koju se obraca u slucaju gresaka na web serveru
ServerAdmin [email protected]
# direktorij u kojem se drze dokumenti koji se prikazuju na web-u
DocumentRoot /virtual/domain1.com/var/www/html
# ime servera
ServerName www.domain1.com
# fajlovi u koje se biljezi aktivnost servera (greske, transfer i sl.)
ErrorLog logs/domain1.com-error_log
TransferLog logs/domain1.com-access_log
RefererLog logs/domain1.com-referer_log
AgentLog logs/domain1.com-agent_log
# koristenje CGI skripti za ovu domnenu
ScriptAlias /cgi-bin/ /var/www/cgi-bin/domain1.com/
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
</VirtualHost>
<VirtualHost www.domain2.com>
# mail adresa na koju se obraca u slucaju gresaka na web serveru
ServerAdmin [email protected]
# direktorij u kojem se drze dokumenti koji se prikazuju na web-u
DocumentRoot /virtual/domain2.com/var/www/html
# ime servera
ServerName www.domain2.com
# fajlovi u koje se biljezi aktivnost servera (greske, transfer i sl.)
ErrorLog logs/domain2.com-error_log
TransferLog logs/domain2.com-access_log
RefererLog logs/domain2.com-referer_log
AgentLog logs/domain2.com-agent_log
# ova domena nema opciju koristenja CGI skripti tako da nista ne upisujemo
# i stavljamo tacku na virtualne domene
</VirtualHost>