Felhasználói eszközök

Eszközök a webhelyen


oktatas:web:webszerver

< Web

Apache webszerver

  • Szerző: Sallai András
  • Copyright © Sallai András, 2011, 2012, 2014, 2019
  • Licenc: GNU Free Documentation License 1.3

Apache beszerzése

Telepítés Debian GNU/Linux saját csomagjaiból:

apt install apache2

Telepítés után

Főbb könyvtárak, fájlok

  • /etc/apache2/
  • /usr/sbin/apache2ctl
  • /usr/sbin/apache2
  • /var/www

/etc/apache2

  • conf-available/ (Alkalmazások beállításai)
  • conf-enabled/ (Beállított alkalmazás konfigurációk)
  • mods-available/ (Elérhető modulok)
  • mods-enabled/ (Betöltendő modulok)
  • sites-available/ (Elérhető sitok)
  • sites-enabled/ (Elérhető modulok)
  • apache2.conf (Rendszer által beállított)
  • envvars (Környezeti változók)
  • httpd.conf (Saját beállításaink)
  • ports.conf (Portok)

Indítás, leállítás, státusz

Apache kezelés

Leállítás:

systemctl stop apache2

Indítás:

systemctl start apache2

Újraindítás:

systemctl restart apache2

Újratöltés:

systemctl reload apache2

Apache állapot lekérdezése

Státusz lekérdezése:

systemctl status apache2
  apache2.service - The Apache2 HTTP Server
   Loaded: loade ...
   Active: active (running)...
   ...

Ha webszerver nem fut:

Active: inactive (dead)

Bővebb állapot-lekérdezés localhoston, de szükséges hozzá egy lynx böngésző:

apache2ctl status

Még bővebb állapot-lekérdezése:

apache2ctl fullstatus

Debian démon indító, leállító script:

invoke-rc.d apache2 start
invoke-rc.d apache2 stop
...

Konfigurációs állományok

Minden konfigurációs fájl plain text fájl. Forrásból való telepítés után a konfigurációs fájl általában egyetlen állomány:

apache2.conf

A helye fordítási időben beállított, de a -f kapcsolóval más konfigurációs állomány is megadható. Ha más konfigurációs fájlokat is szeretnék belefoglalni az fő konfigurációs fájlba a Include kulcsszóval tehető meg.

A konfigurációs állomány nem kis és nagybetű érzékeny (nem Case Sensitive). A nagy és kisbetűk használata az átláthatóságot szolgálja.

Minden újabb beállítás után újratöltjük a konfigurációs fájlt

/etc/init.d/apache2 reload

Konfigurációk

Porthoz és IP-hez kötés

A szerver a 80-as és 8000-es porton is hallgasson:

Listen 80
Listen 8000

A szerver két interfészen fogadjon el kéréseket:

Listen 192.170.2.1:80
Listen 192.170.3.1:8000

IPV6 esetén:

Listen [2001:db8::a00:20ff:fea7:ccea]:80

A konfigurációs állományban több Listen parancs is elhelyezhető, az apache az összes beállított porton fogadja a kéréseket.

Modulok használata

Az apache moduláris felépítésű szerver. Telepítés után csak az alapfunkciók vannak betöltve alapból. A modulok betöltése a LoadModule direktívával történik.

Például a php5 modul betöltése:

LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

A php5_mudule a mudul neve. A /usr/lib/apache2/modules/libphp5.so a fájlnév elérési úttal együtt.

Debian GNU/Linux alatt nem szükséges szerkesztenünk a modulokat tartalmazó részeket, mivel a modul kezelésre külön scripteket hoztak létere. Ezek:

a2enmod
a2dismod

Az a2enmod engedélyezi egy modul használatát, az a2dismod letiltja egy modul használatát.

A telepítés után hiányzó modulokat külön telepíteni kell, pl. egy apt-get install paranccsal. Hogy éppen milyen modulok érhetők el, tölthetők be a következő könyvtár listázásával deríthető ki:

ls /etc/apache2/mods-available

A kimenetben ehhez hasonló állományokat láthatunk:

auth_basic.load
auth_digest.load
...

PHP5 engedélyezése parancssorból:

e2enmod php5

Ellenőrizhetjük, hogy a php5 modul engedélyezve lett-e:

ls /etc/apache2/mods-enabled/php5.load

Site-ok kezelése

A site-ok kezelésére két script áll rendelkezésünkre:

a2ensite
a2dissite

Hozzáférhető site-ok helye:

/etc/apache2/sites-available

A hozzáférhető sitok könyvtárában telepítés után találunk egy default állomány, amely a host alapbeállításait tartalmazza.

/etc/apache2/sites-available/default

A host alkönyvtáraira vonatkozó beállítások

Hatáskörök

A hatáskörök megmondják a beállítások hol érvényesüljenek.

Megadható hatáskörök:

  • Könyvtár
  • Fájl
  • Webhely

Direktívák

A hatóköröket úgynevezett direktívákkal adjuk meg:

  • <Directory>
  • <DirectoryMatch>
  • <Files>
  • <FilesMatch>
  • <Location>
  • <LocationMatch>
  • <VirtualHost>

Minden direktíva nevét a „kisebb mint” és a „nagyobb mint” jelek között adjuk meg. A direktíváknak mindig van egy lezáró részük. A lezárórész úgy néz ki mint a nyitó, de „kisebb mint” jel után egy perjelet is teszünk:

<direktíva_név>
  ...
</direktíva_név>

Az így megadott nyitó és záródirektíva egy-egy szekciót határoz meg. Általában a konfigurációs fájlban egy szekció egy webhelyet ír le.

Könyvtárra vonatkozó beállítások

<Directory /var/web/dir1>
    beállítások
</Directory>

Melyik html fájlt szolgáljuk ki elsőnek

<Directory /var/web/dir1>
   DirectoryIndex elso.html
</Directory>

Nem az index.html lesz az elsőként betöltött fájl! Helyette az elso.html állományt töltjük be.

Könyvtár listázása

<Directory /var/web/dir1>
    Options Indexes
</Directory>

DirectoryIndex index.html beállítása mellett, ha nincs a könyvtárban index.html, akkor listázzuk a könyvtár tartalmát.

„+” és „-” karakterek használata

<Directory /var/web/dir1>
  Options +Indexes
</Directory>

Vegyük észre a „+” karaktert! Ugyanaz mint ha nem lenne „+”, a beállítást engedélyezi.

<Directory /var/web/dir1>
    Options -Indexes
</Directory>

Vegyük észre a „-” karaktert! Nem engedélyezzük a beállítást.

Hozzáférés IP alapján

<Directory /var/web/dir1>
    Order deny,allow
    Allow from 195.85.156.2
    Deny from all
</Directory>

Az „Order” utasítás megmondja milyen sorrendben értelmezzük az Allow és Deny beállításokat. A 195.85.156.2 IP-ről megnézhetik, mindenhonnan tiltunk mindent erre a könyvtárra.

Fájlokra vonatkozó beállítások

<Files private.html>
    Order allow,deny
    Allow from 192.168.5.4
</Files>

Ez a fájl csak a 192.168.5.4 címről érhető el.

Files direktíva Directoryba ágyazása

<Directory /var/web/dir1>
    <Files private.html>
        Order allow,deny
        Allow from 192.168.5.4
    </Files>
</Directory>

A dir1 könyvtáron belül csak a private.html fájlra vonatkozik a beállítás.

Webhely megadása

Egész hálózat engedélyezése:

<Location /private>
    Order Allow,Deny
    Allow from 192.168.5.0/24
</Location>

Reguláris kifejezések

A felhasználók saját könyvtára:

<Directory /home/*/public_html>
    Options Indexes
</Directory>

Match = illeszkedés

Ha magas szintű reguláris kifejezésekkel akarunk illeszkedést meghatározni

<FilesMatch \.(gif|jpg|png)$>
    Order allow,deny
    Deny from all
</FilesMatch>

A .gif .jpg és .png fájlok letöltése tilos

Alias

A host (site) dokumentumai a következő helyen találhatók:

/var/www

Tehetünk más helyre is megjelenítendő könyvtárakat. Például újabb könyvtárakat hozhatunk létre a következő helyen: /srv/www

Például legyen Ets nevű projekt amelyet az /srv könyvtárba szeretnénk tenni:

/srv/www/ets

Ahhoz, hogy a szerveren ip_cim/ets vagy domainnev/ets néven el tudjuk érni a /etc/apahe2/apache.conf állományban a következő beállításokra van szükség:

Alias  /ets  /srv/www/ets

Naplózási szint

LogLevel warn

A LogLevel kapcsolóval állítjuk be, például warn. Lehestésges értékek:

  • debug
  • info
  • notice
  • warn
  • error
  • crit
  • alert
  • emerg

Hova naplózzunk

Hibajelzések helyét az ErrorLog kapcsolóval állítjuk be:

ErrorLog /var/log/apache2/error.log

Ki fért hozzá valamelyik weblaphoz:

CustomLog /var/log/apache2/access.log combined

Naplózás figyelése

A 10 utolsó naplóbejegyzés megtekintése az access.log:

tail /var/log/apache2/access.log

A tail -f kapcsolója azt mondja, ha az apache ír az access.log fájlba, azonnal jelenítése meg számunkra:

tail -f /var/log/access.log

CGI engedélyezése

<Directory /usr/local/apache2/htdocs/somedir>
    Options +ExecCGI
</Directory>

Ekkor a somedir könyvtárban tehetünk CGI scriptet

Milyen kiterjesztése lehet a cgi scripteknek

AddHandler cgi-script .cgi .pl

A .cgi és .pl kiterjesztések használhatók

Például a felhasználók a saját home könyvtárban futtathassanak .cgi könyvtárakat:

<Directory /home/*/public_html>
    Options +ExecCGI
    AddHandler cgi-script .cgi
</Directory>

A felhasználók egy cgi-bin nevű könyvtárban használhatnak cgi scripteket:

<Directory /home/*/public_html/cgi-bin>
    Options ExecCGI
    SetHandler cgi-script
</Directory>

Egy egyszerű „Helló Világ” típusú CGI:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello Vilag";

Egy teljesebb ékezeteket is kezelő script:

#!/usr/bin/perl
 
print "Content-type: text/html\n\n";
 
print <<"EOF";
<html>
<head>
<meta http-equiv="Content-type: text/html; charset=utf-8">
<title>Teszt</title>
</head>
 
<body>
<h1>Helló Világ!</h1>
 
</body>
</html>
EOF

PHP engedélyezése, beállítása

PHP engedélyezése:

a2enmod php5

Az index.php fusson le alapból:

<Directory /valahol/dir>
    DirectoryIndex index.php
</Directory>

Apache azonosítás

Beállítások lehetnek központilag és helyileg egy könyvtárban.

Az apache decentralizált, helyi könyvtárban elhelyezett fájlban:

.htaccess

Centralizáltan:

httpd.conf

A központilag beállítva az adott könyvtárszekcióba szükség van az azonosításhoz a következő beállításra:

AllowOverride AuthConfig

Felhasználó és jelszófájl létrehozása

htpasswd -c /usr/local/apache/passwd/passwords jozsi

Ehhez hasonlót látunk:

New password: sajatjelszo
Re-type new password: sajatjelszo
Adding password for user jozsi

A -c kapcsoló létrehozza az állományt.

További felhasználók:

htpasswd /usr/local/apache/passwd/passwords mari

Vegyük észre! Már nincs -c kapcsoló!

A könyvtárszekcióba vagy .htaccess fájlba:

AuthType Basic
AuthName "Azonosítás"
Require valid-user
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords

Az AuthType megmondja az azonosítás típusát. Két gyakran használt érték: digest és a basic. A fenti példában Basic azonostást használunk. Az AuthName az azonosítást kérő ablak címkéjének feliratát határozza meg. A Require megmodja milyen felhasználót vagy csoportot követelünk meg. Ha az értéke valid-user akkor bármely felhasználó beléphet akinek van felhasználóneve jelszava beállítva. Lehet konkrét felhasználót is megadni. Például csak a jozsi nevű felhasználó léphessen be:

Require user jozsi

Csoportok alkalmazása

Csoportszintű szabályozához szükséges két sor a következő:

AuthGroupFile /usr/local/apache/passwd/groups
Require group GroupName

Csoport fájl tartalma

általánosan:

csoportnev: csop1 csop2 csop3 csop4

konkrét példa:

human: jozsi mari kati
szerelok: kati janos geza

Cím átírás - URL Rewriting

a2enmod rewrite
RewriteEngine on
RewriteRule   ^/$  /e/www/  [R]

A példában minden a webszerverre irányuló kérés át lesz irányítva a /e/www alkönyvtárba

Virtuális hostok

Adott egy gordon nevű gépünk, egy eros.hu domannel. Szerverünk ezen a két címen elérhető:

gordon.eros.hu
eros.hu

Szeretnék mások is, ha az ő domainük a mi szerverünkön lenne tárolva, mert ők ezért nem szeretnének külön gépet fent tartani. Például János barátom meg kér, hogy a piros.hu domain is kezeljük neki. A mi gépünkön a piros.hu domain ekkor virtuális, azaz VirtulaHost lesz.

Tehát egy host kiszolgálhat olyan hostokat is ami mögött nincs külön számítógép. Ekkor virtuálishotról beszélünk.

Virtualhostok helye

/home/virtual-www

vagy

/data/virtual-www

esetleg

/home/vhosts

A virtualhostok beállításainak helye:

/etc/apach2/sites-available

Minden virtualhost egy állomány

Például a zold.hu virtuális domaint szeretnénk kiszolgálni, akkor a következő állományt késztjük el:

/etc/apache2/sites-available/piros.hu

Az állományban egy a következő elemeket írom:

<VirtualHost *:80>
 
</VirtualHost>

Ezen két elem közzé kerülnek a virtualhost beállításai.

A szerver nevének beállítása:

ServerName piros.hu

Álnevek beállítása:

ServerAlias www.piros.hu red.hu

Figyeljük, meg, hogy az egyes állneveket szóközzel válasszuk el egymástól.

Dokumentumok helye:

DocumentRoot /home/virtual-www/piros.hu/docroot

Elsőnek betöltendő állomány:

DirectoryIndex index.html index.php

Naplózás:

ErrorLog /home/virtual-www/piros.hu/log/error.log
CustomLog /home/virtual-www/piros.hu/log/access.log common

A második sor vége esetleg common helyett combined:

CustomLog /home/virtual-www/piros.hu/log/access.log combined

Például az awstat statisztikai program combined típusú naplófájlt igényel.

Ezek után a virtualhost teljes szekciója így nézhet ki:

<VirtualHost *:80>
    ServerName piros.hu
    ServerAlias www.piros.hu red.hu
    DocumentRoot /home/virtual-www/piros.hu/docroot
    DirectoryIndex index.html index.php
    ErrorLog /home/virtual-www/piros.hu/log/error.log
    CustomLog /home/virtual-www/piros.hu/log/access.log combined
</VirtualHost>
</apache>
 
Ha a virtualhostnak könyvtárra vonatkozó beállításokat szeretnénk, akkor a
VirtualHost elemek között megtehetjük. Például:
 
<code apache>
<VirtualHost *:80>
    ServerName piros.hu
    ServerAlias www.piros.hu red.hu
    DocumentRoot /home/virtual-www/piros.hu/docroot
    DirectoryIndex index.html index.php
    ErrorLog /home/virtual-www/piros.hu/log/error.log
    CustomLog /home/virtual-www/piros.hu/log/access.log combined
    <Directory /home/virtual-www/piros.hu/docroot/titkos>
        AllowOverride AuthConfig
        Order Deny, Allow
        Allow from 192.168.3.0/24
        Deny From all
   </Directory>
</VirtualHost>

MySQL

A webmesterek sokszor szeretnének a MySQL hozzáférést a szerveren. Ekkor létre kell hozni egy felhasználót, amely a jogosult az adott adatbázis létrehozására:

GRANT ALL PRIVILEGES 
  ON databasenev.* TO 'valaki'@'localhost' 
  IDENTIFIED BY 'titkosjelszo';

Példuául

GRANT ALL PRIVILEGES 
  ON adozas.* TO 'ado'@'localhost' 
  IDENTIFIED BY 'titkosjelszo';

A jogok érvénybeléptetéséhez futtassuk a flush privileges parancsot:

FLUSH PRIVILEGES;

Statisztika webszerverhasználatról

.htaccess

.htaccess
Options +Indexes
DirectoryIndex start.html
oktatas/web/webszerver.txt · Utolsó módosítás: 2021/05/25 22:24 szerkesztette: admin