INSTALACE A KONFIGURACE APACHE


1) Apache

Apache (Apache Group http://www.apache.org/) je nejpopulárnější a nejrozšířenější volně šířitelný web server. Apache vznikl jako volně šířitelná modifikace původního NCSA serveru (NCSA - National Center for Supercomputing Applications)
Server je řešen jako modulární (jádro + řada modulů zajišťujících různé akce), lze jej prakticky libovolně rozšiřovat. Na Internetu jsou dostupné ke stažení moduly pro různé druhy zabezpečené komunikace, pro různé druhy souborů, pro administraci, výpisy stavu serveru přes www, připravuje se modul pro kódování češtiny atd.. Moduly lze vytvářet, viz. originální dokumentaci.

Stručná charakteristika

- jednoduchost a přitom rozsáhlé možnosti konfigurace
- serverem vkládané vsuvky
- restrikce dle adresářů, domén, hesel, individuální omezení uživatelských stránek jednotlivými uživateli - oddělení obsahu serveru od ostatních částí systému
- zavádění tzv. alias - přezdívek adresářů
- virtuální servery
- Integrovaná proxy

1.1 Distribuce Apache

Nejnovější verze získáte na http://www.apache.org/dist/, kde se nacházejí zdrojové texty posledních verzi. V případě, že nechcete kompilovat zdrojové texty nebo nemáte odpovídající softwarové vybavení pro kompilaci, pak na adrese http://www.apache.org/dist/binaries/ naleznete seznam binárních instalací pro konkrétní operační systémy.


1.2 Instalace

Existují dva způsoby instalace web serveru Apache. Binární instalace je určena pro rychlou instalaci Apache v konkrétním operačním systému. Druhý způsob je kompilace zdrojového kódu. Tato instalace je nezávislá na verzi operačního systému. Podmínkou je mít nainstalovaný vhodný překladač (například gcc). Instalace se provádí do předem definovaného adresáře (například /usr/local/apache).

Stručný popis instalace:

1) rozbalit zkomprimovaný soubor

2)spuštění skriptu configure, například má-li se instalace vytvořit v adresáři /usr/local/apache, musí se spustit skript s parametrem --prefix=/usr/local/apache. Není-li cílový adresář zadán, použije implicitní adresář /usr/local
# ./configure --prefix=/usr/local/apache
Using 'Configuration' as config file
+ configured for platform
+ setting C compiler to *
+ setting C compiler optimization-level to *
+ Adding selected modules
+ doping sanity check on compiler and options
Creating Makefile in support
Creating Makefile in main
Creating Makefile in os/unix
Creating Makefile in modules/standard
Skript vygeneruje soubor s volbami pro sestavení Makefile

3)překlad spuštěním příkazu make

4)instalace make install

5)start Apache $PREFIX/apachectl start, kde $PREFIX je adresář zadaný v --prefix, nebo implicitní adresář, například /usr/local

1.3 Automatický start Apache

Web server Apache lze spouštět v samostatném režimu nebo pomocí démona inetd.
Způsob spuštění se nastavuje Apache. V konfiguračním souboru $PREFIX/conf/httpd.conf je řádek s direktivou ServerType. Ta může nabývat dvě hodnoty:
standalone – samostatný režim
intetd - start prostřednictvím inetd
Tato direktiva má platnost pouze instalace v operačních systémech typu Unix, ne v MS Windows.
Samostatný režim je základní způsob spouštění.

V tomto případě se bude používat příkaz $PREFIX/bin/apachectl:

apachectl start – start Apache
apachectl stop – zastavení Apache
apachectl restart – zastavení a opětovný start Apache
apachectl status – start Apache

Pokud se má Apache automaticky spustit při startu operačního systému, pak se musí přidat do adresáře, který je určen pro konkrétní úroveň běhu operačního systému Unix (Linux), musí přidat další startovací soubor, například S90apache.

Je nutné dodržovat konvenci označování těchto souborů:

- soubory musí začínat písmenem S pro start v dané úrovni nebo K, pro ukončení (kill)
- číslo, které určí pořadí vykonávání
- krátký název, který charakterizuje účel skriptu.

Je-li pro start operačního systému nastavena úroveň 3 (normální režim systému v síti), pak by měl být vytvořen startovací skript /etc/rc.d/rc3.d/S90apache.

Pro automatické ukončení , například pro úrovně 0 (zastavení systému) nebo 6 (restart systému), by měli být vytvořeny ukončovací skripty /etc/rc.d/rc0.d/S90apache respektive /etc/rc.d/rc6.d/S90apache.

Vytvoření těchto skriptů je velice jednoduché. Stačí vytvoří symbolický link (odkaz) na soubor $PREFIX/bin/apachectl:

ln –s $PREFIX/bin/apachectl /etc/rc.d/rc3.d/S90apache
ln –s $PREFIX/bin/apachectl /etc/rc.d/rc0.d/K90apache
ln –s $PREFIX/bin/apachectl /etc/rc.d/rc6.d/K90apache

Při startu operačního systému se soubory S* spouští s parametrem start a soubory K* s parametrem stop.
Superdémon inetd je způsob užívaný u serverů, kde se web server Apache užívá minimálně. Rozdíl mezi tímto a samostatným režimem spočívá v tom, že zde se služba Apache spustí až při požadavku na ní.
Postup nastavení:

1) v souboru $PREFIX/conf/httpd.conf je nutné nastavit directivu ServerType na inetd.
2) do konfiguračního souboru /etc/inetd.conf superdémona inetd se přidá řádek:
http stream tcp nowait root /usr/sbin/httpd httpd

2 Konfigurace Apache

2.1 Konfigurace

Konfigurace serveru spočívá v nastavení konfiguračních souborů v adresáři $PREFIX./conf:
- access.conf - nastavení oprávnění pro servery, uživatele, CGI skripty, dokumenty aj.
- httpd.conf - hlavní konfigurační soubor serveru (základní nastavení)
- mime.types - popis podporovaných typů dokumentu (MIME) a příslušných přípon souborů
- srm.conf - soubor popisující obsah serveru a vracené údaje ze strany serveru

Novější verze používají pro konfiguraci místo srm.conf a access.conf pouze soubor httpd.conf. Nastavení v tomto případě se provádí v httpd.conf direktivami ResourceConfig a AccessConfig:

# In the standard configuration, the server will process
# this file,srm.conf, and access.conf in that order.
# The latter two files are
# now distributed empty, as it is recommended that all
# directives
# be kept in a single file for simplicity. The
# commented-out values
# below are the built-in defaults. You can have the
# server ignore
# these files altogether by using "/dev/null" (for Unix)
# or
# "nul" (for Win32) for the arguments to the directives.

# ResourceConfig conf/srm.conf
# AccessConfig conf/access.conn


2.2 Konfigurace serveru

- ServerType – viz 1.3 Automatický start Apache
- Port – port na kterém Apache naslouchá. Implicitní hodnota je 80.
- BindAdress - v případě vícenásobného počtu síťových rozhraní lze zadat IP adresa, nebo DNS jména


# BindAddress: You can support virtual hosts with this
# option. This directive
# is used to tell the server which IP address to listen
# to. It can either
# contain "*", an IP address, or a fully qualified
# Internet domain name.
# See also the and Listen directives.

# BindAddress *

- Listen - jako předchozí, ale s rozšířením IP adresy o číslo portu

# Listen: Allows you to bind Apache to specific IP
# addresses and/or
# ports, in addition to the default. See also the
#
# directive.

#Listen 3000
#Listen 12.34.56.78:80

- ServerAdmin – e-mail adresa na správce serveru
- ServerRoot. – kořenový adresář, standardně se jedná o hodnotu uvedenou v proměnné $PREFIX při překladu zdrojového kódu
- ErrorLog - definice souboru s hlášením o chybách
- TransferLog - definuje soubor s informacemi o přístupu uživatelů na server
- PidFile - definuje umístění souboru s PID číslem (Process IDentification), které lze užít v příkazu kill pro případně zastavení či opětocné nastartování serveru (po změně konfigurace) - např. příkazem kill -HUP `cat /web/logs/httpd.pid`
- ServerName. - jméno web serveru.
- DocumentRoot - specifikuje vrchol stromu dokumentů, standardně $PREFIX/htdocs.
- UserDir určuje jméno uživatelského adresáře, ve kterém může každý uživatel mít uložené své vlastní stránky. Nejčastěji se jedná o adresář public_html. Výsledná URL pak bude http://www.xyz.cz/~login
- DirectoryIndex. - jméno hlavního souboru v adresáři, lze zadat více jmen oddělených mezerou: index.html, index.htm, default.htm

2.3 Konfigurace procesů

V samostatném režimu pracuje server ve vícevláknovém režimu (multithreading). Jeden proces je hlavní (master), ten spouští řadu podřízených procesů (vláken - threads), které obsluhují požadavky klientů.

Multithreading je definován pomocí následujících direktiv:
- StartServers - standardní počet vyčkávajících threadů (spuštěných a připravených sloužit k obsluze požadavků), standardní hodnota je 5.
- MinSpareServers - minimální hodnota počtu spuštěných threadů, standardně 5
- MaxSpareServers - maximální hodnota počtu spuštěných threadů, standardně 10.
- MaxRequestPerChild maximální počet obsloužených požadavků jedním threadem, 0 definuje neomezený počet. Po překročení se thread ukončí a vznikne jiný. Toho lze užít z hlediska bezpečnosti (např. může být některý thread po čase narušen a je ho třeba obnovit).
- MaxClients - maximální počet vyřizovaných požadavků v jednom okamžiku
- TimeOut - doba (sekundy)po kterou server čeká na odpověď
- KeepAlive - maximální současný počet dotazů jedním klientem na server, standardně 5
- KeepAliveTimeout - doba mezi dvěmi dotazy branými současně (v jedné relaci navázaného spojení), standardně 15 sekund

2.4 Konfigurace typů souborů

- DefaultType - defaultní mime-type, který server použije v případě, že nerozpozná typ souboru v požadavku, standard je text/plain
- AddType MIME - přípona - definuje explicitně typ souboru (dle MIME) podle přípony.
- AddLanguage jazyk_přípona - definuje příponu použitou k rozlišení jazyka (přípona dle MIME klasifikace - např. en, fr, de, cz).
- AddEncoding kódování_přípona - definuje příponu použitou pro různé druhy kódování (šifrovací software, kompresní programy ap., kódování dle MIME klasifikace např. x-gzip, x-compress).
- LanguagePriority- definuje pořadí jazyků, které jsou upřednostňovány například definice LanguagePriority cz en de fr
- CacheNegotiatedDots {on | off} – zapnutí (vypnutí) cachování proxy serverem

2.5 Konfigurace přístupových práv

- ... - obsahuje direktivy, které se vztahují k danému fyzickému adresáři
- ... , - obdoba , není však vztažena na konkrétní adresář, ale na URL adresu.
- Options, - nastavuje v daném adresáři varianty chování serveru.

Jednotlivé volby se mohou kombinovat:
o All – povoluje vše (MultiViews)
o None - vše je zakázáno
o ExecCGI - povolujeo provádění CGI skriptů
o Includes - lze používat serverem vkládané vsuvky
o IncludesNOEXEC - totéž co předchozí, ale je zakázáno používat #include v CGI skriptech a #exec kdekoliv
o FollowSymLinks – povoluje používat symbolické odkazy
o SymLinksIfOwnerMatch totéž co předchozí volba, avšak vlastník odkazu i vlastník cílového souboru či adresáře musí být tentýž uživatel (mírně zpřehledňuje předchozí volbu)
o Indexes – web server zde smí vytvářet stránky s obsahem (indexy), nenachází-li se v daném adresáři hlavní soubor, který je definován v DirectoryIndex
o MultiViews – nastavení kódování podle komunikace klienta se serverem
AllowOverride, - specifikuje typy přístupových direktiv, které mohou být změněny v souboru .htaccess.. Volbou jsou následující:
o All - lokální konfigurace překryje globální (pouze tag )
o None - lokální konfigurace jsou ignorovány
o AuthConfig - lze nastavit individuální přístupová práva uživatelů
o FileInfo - lze definovat charakteristiky souborů (kódování, jazyk, MIME typ)
o Indexes - vytvoření obsahu adresářů
... - omezovačem konkrétní HTTP metody:
o GET - získávání dat, informace se přenáší jako součást URL za znakem ?, parametry se oddělují znakem &
o POST získávání dat, avšak při předávání parametrů je použit nezávislý přenos, který se např. CGI skriptu předá jako standardní vstup
o PUT přenos informací na server, v praxi se neužívá
o DELETE zrušení informací na serveru, v praxi se neužívá (pouze když klient ruší požadavek při stisku tlačítka Stop)

Omezující direktivy jsou:
o order - definuje pořadí platnosti obou následujícíh direktiv (tj. která se akceptuje jako první). Hodnoty se oddělují čárkou.
o deny - zákaz pro uvedene počítače
o allow - povolení pro uvedene počítače
o matual-failure - povolení přístupu klientům, kteří jsou uvedeni v allow a nejsou uvedeni v deny

Parametry pro allow a deny:
o all (označuje všechny dostupné stroje)
o DNS jméno nebo, název domény (např. .pvt.cz), IP adresa nebo část IP adresy (např. 168.0.2.)

Konkrétní uživatele lze vymezit pomocí následující direktivou:
o require - specifikuje podmínky, které musí uživatel splnit, aby informace získal. Lze uvést následující:
o user - pouze uvedení uživatelé smějí využívat informace. Seznam se odděluje mezerami
o group - jen uvedené skupiny uživatelů smějí využívat informace. Seznam se opět odděluje informacemi
o valid-user libovolný uživatel, který je registrován v souboru hesel .htpasswd
- AuthType - určuje typ autorizace. V současné verzi HTTP protokolu existuje pouze varianta Basic
- AuthName – text vložený za tuto direktivu se zobrazí uživateli současně s výzvou k zadání jména a hesla
- AuthUserFile - definuje soubor s hesly pro konkrétní uživatele. Pracuje pouze s modulem mod_auth (textová podoba databáze hesel)
- AuthGroupFile - definuje soubor skupin (přiřazuje uživatele do skupin). Pracuje opět s modulem mod_auth

Oba soubory (hesel i skupin) by měly být uloženy mimo obvyklý strom dokumentů. Jméno souboru se v parametrech Auth... udává absolutně. Informace v souboru hesel jsou uloženy ve tvaru jméno:heslo, heslo lze generovat pomocí podpůrného programu htpasswd (parametrem je jméno souboru a jméno uživatele, volba -c soubor založí). Definice uživatelů ve skupinách se zapisuje jako skupina:uživatelé, kde uživatelé je seznam uživatelů ze souboru hesel oddělených mezerami.

2.6 Konfigurace vuirtuálních adresářů

- Alias adresář– vystavení dokumentů z jiného adresáře než DocumentRoot.
- ScriptAlias adresář –stejný význam jako předchozí, ale týká se umístění programů CGI.
- UserDir adresář - specifikuje adresáře v domovském adresáři uživatele, ve kterém mohou být zveřejňovaná data, například public_html.
- Redirect původní_URL nová_URL. – přesměrování, v případě, že dané dokumenty byl přesunuty na jiný server.
- ErrorDocument kód cesta – definuje soubor s chybovým textem pro chybový kód, například ErrorDocument 404 /errors/nenalezeno.html.

2.7 Konfigurace virtuálních serverů

Apache umožňuje konfigurovat virtuální server. Musí být splněna podmínka použití více síťových rozhraní se svými IP adresami, nebo jednomu síťovému rozhraní přiřadit více IP adres. Jméno virtuálního serveru musí být definováno v DNS.

Zpracoval: Karel Rázek