Apache veebiserveri kasutamine Debian Squeeze operatsioonisüsteemiga

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

TODO

Eesmärk

Olgu eesmärgiks seada tööle selline veebiserveri

Veebiserveri paigaldamiseks tuleb öelda

 # apt-get install apache2

Security

Üldiselt ollakse arvamusel, et mida vähem veebiserver oma versiooni ja distributsiooni kohta ise räägib seda parem, selleks tuleb failis /etc/apache2/conf.d/security kasutada rida

 ServerTokens Prod

PHP5 kasutamine

PHP5 kasutamiseks tuleb lisada paketid, php5-pgsql on vajalik, et PHP5 saaks kasutada PostgreSQL andmebaasi

 # apt-get install php5 php5-pgsql
  • /etc/cron.d/php5 - kustutab automaatselt vanu sessioone, nb! see tegevus võib paista teatud juhtumitel anomaaliana
  • /etc/php5/apache2/php.ini - PHP5 seadistusfail

php.ini seadistamisel tuleb lähtuda vajadustest, aga kui vajadusi ei ole sõnastada, ja on lihtsalt tarvis nö töötavat ja pigem turvalist keskkonda, siis Debian Lenny PHP5 puhul võiks kasutada selliseid parameetrite väärtusi algpunktina, ja katsuda siiski vajadused välja selgitada

 disable_functions = dl, exec, passthru, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, system
 expose_php = Off
 register_globals = Off
 magic_quotes_gpc = Off
 safe_mode = Off
 display_errors = Off
 log_errors = On

Apache veebiserverit saab PHP skripte kasutama seadistada selliselt, et skriptid ei saa pöörduda väljapoole etteantud kataloogi, nt sellest, et skripti seest lugeda /etc/passwd faili sisu include direktiiviga. Lisaks on kasulik error_log direktiiv kõnealuse ressurssiga seotud PHP vigade logimiseks.

open_basedir ja error_log direktiivide kasutamine võiks toimuda nt selliselt

 ...
 <Directory /srv/www.tartu.loomaaed.ee/html>
   php_admin_value open_basedir "/tmp:/srv/www.tartu.loomaaed.ee"
   php_admin_value error_log "/var/log/apache2/www.tartu.loomaaed.ee-php-error.log"
 
   Options None
   AllowOverRide None
   Order Allow,Deny
   Allow from All
 </Directory>

PHP teeke saab sisse ja välja lülitada php5enmod ja php5dismod abil, nt

# php5enmod pgsql

Parasjagu selliselt sisselülitatud moodulite nimekiri on (need php5*mod skript sisuliselt tekitavad ja eemaldavad vastavaid linke)

# ls -ld /etc/php5/apache2/conf.d/*
lrwxrwxrwx 1 root root   25 Sep  1  2014 /etc/php5/apache2/conf.d/10-pdo.ini -> ../mods-available/pdo.ini
lrwxrwxrwx 1 root root   25 Sep  1  2014 /etc/php5/apache2/conf.d/20-apc.ini -> ../mods-available/apc.ini
lrwxrwxrwx 1 root root   26 Sep  1  2014 /etc/php5/apache2/conf.d/20-curl.ini -> ../mods-available/curl.ini
..

kõigi php sisselülitatud moodulite nimekiri

# php -m

PHP Shell

PHP Shell http://phpshell.sourceforge.net/ tarkvara on esineb php skripti kujul ning võimaldab kontrollida, kuivõrd on veebiserveri seadistamisel nähtud vaeva turvalisusega. Nö mitte-turvalisel juhul paistab pilt nt selline

Fail:Apache-1.gif

kus

  • on õnnestunud liikuda kasutaja kodukataloogi /home/imre - seda saaks kontrollida open_basedir direktiiviga
  • on õnnestunud käivitada käsk netstat ja näha, millistel portidel arvutis igasugused teenused töötavad - seda saaks kontrollida disable_functions direktiivi abil

PHP Shell kasutamiseks tuleb .tar.gz arhiiv kopeerida veebijuurika alla ning failis config.php näidata kasutaja ligipääs

[users]

kasutajanimi = "kasutajaparool"

PHP Suhosin teegid

Paigaldamiseks sobib öelda, Debianil paigaldatakse ta vaikimisi koos php5 paketiga

# apt-get install php5-suhosin

Seadistusfailiks on, seal nt post max size jt võivad override'da php.ini vastavaid väärtusi

/etc/php5/conf.d/suhosin.ini

PHP PEAR kasutamine

PEAR (PHP Extension and Application Repository) http://pear.php.net/ on vaba tarkvaraline korduvkasutatavate PHP PHP keeles kirjutatud moodulite repositoorium. PEAR abil süsteemi paigaldatud moodulite nimekirja näitab

# pear list
# pear list-upgrades
pear.php.net Available Upgrades (stable):
=========================================
Channel      Package  Local          Remote         Size
pear.php.net Net_SMTP 1.6.1 (stable) 1.6.2 (stable) 12.8kB

Uuendamiseks konkreetsele versioonile sobib öelda nt

# pear upgrade XML_RSS-1.0.2

PHP PECL kasutamine

PECL (PHP Extension Community Library) on c teegid, st .so failid, mida PHP kasutab. Ettevalmistamiseks peab süsteemi paigaldama arendusvahendid, nt

# apt-get install build-essential php5-dev g++

Teegi paigaldamiseks (mille käigus ta kompileeritakse) sobib öelda

# pecl install rar
downloading rar-3.0.2.tgz ...
Starting to download rar-3.0.2.tgz (257,787 bytes)
.....................................................done: 257,787 bytes
125 source files, building
running: phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
building in /tmp/pear/temp/pear-build-rootO4FB6b/rar-3.0.2
running: /tmp/pear/temp/rar/configure
checking for grep that handles long lines and -e... /bin/grep
...
 
Build complete.
Don't forget to run 'make test'.

running: make INSTALL_ROOT="/tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2" install
Installing shared extensions:     /tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2/usr/lib/php5/20090626/
running: find "/tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2" | xargs ls -dils
2867789    4 drwxr-xr-x 3 root root    4096 Dec  9 17:50 /tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2
2867913    4 drwxr-xr-x 3 root root    4096 Dec  9 17:50 /tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2/usr
2867914    4 drwxr-xr-x 3 root root    4096 Dec  9 17:50 /tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2/usr/lib
2867915    4 drwxr-xr-x 3 root root    4096 Dec  9 17:50 /tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2/usr/lib/php5
2867916    4 drwxr-xr-x 2 root root    4096 Dec  9 17:50 /tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2/usr/lib/php5/20090626
2867912 1300 -rwxr-xr-x 1 root root 1325564 Dec  9 17:50 /tmp/pear/temp/pear-build-rootO4FB6b/install-rar-3.0.2/usr/lib/php5/20090626/rar.so
 
Build process completed successfully
Installing '/usr/lib/php5/20090626/rar.so'
install ok: channel://pecl.php.net/rar-3.0.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=rar.so" to php.ini

Seejärel tuleb nagu öeldud rida lisa /etc/php5/apache/php.ini seadistusfaili sobivasse kohta

extension=rar.so

PHP OCI8 ja PDO Oracle tarkvara kompileerimine ja paigaldamine

Olgu konkreetselt eesmärgiks php5-cli käsurea utiliidiga käivitada php skripti, mis saaks kasutada andmeid Oracle andmebaasist. Selleks on levinud kasutada kahte teeki, st ühte või teist

  • OCI8
  • PDO-OCI

Kasutamine eeldab Oracle poolt jagatava oracle-xe-client Debiani paketi kasutamist, mis esineb 2010 aastal vaid i386 arhitektuuri jaoks. Üks võimalus seda kasutada on tekitada esmalt nt debootstrap abil amd64 arvutisse 32 bit chroot keskkond ning edasi seal keskkonnas toimetada

# mkdir /srv/lenny-32
# debootstrap --arch=i386 lenny /srv/lenny-32 http://ftp.aso.ee/debian
# mount -t proc /proc /srv/lenny-32/proc
# chroot /srv/lenny-32
  • Lisada /etc/apt/sources.list faili juurde
deb http://oss.oracle.com/debian unstable main non-free
  • Lisada Oracle repositooriumi võti
# wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle  -O- |  apt-key add -
  • Paigaldada oracle-xe-client tarkvara
# apt-get update
# apt-get install oracle-xe-client
  • Paigaldada php5 kompileerimiseks vajalikud sõltuvused ka fakeroot pakett
# apt-get build-dep php5
# apt-get install fakeroot
  • Kopeerida php5 lähteteksti pakett
# mkdir /usr/src/oracle-php
# cd /usr/src/oracle-php
# apt-get source php5
  • Kohendada php5 paketi kompileerimise seadistusfaile, esmalt kirjeldada keskkonnamuutuja ORACLE_CLIENT, mille väärtust edaspidi kasutatakse
# ORACLE_CLIENT=$(find /usr/lib/oracle/xe/app/oracle/product/ -name 'client' | sort --reverse | head --lines=1)
  • Lisada debian/modulelist faili lõppu oci8 ja pdo-oci moodulitele vastavad read
oci8 OCI8
pdo-oci PDO_OCI
  • Lisada debian/rules faili vastavad -with-* read, nt --with-mysql järele
...
--with-mysql=shared,/usr \
--with-oci8=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/client \
--with-pdo-oci=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/client \
  • Lisada debian/control faili vastavad sektsioonid
Package: php5-oci8
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, ${php:Depends}, php5-common (= ${Source-Version}), oracle-xe-client
Description: OCI8 module for php5
 This package provides a module for OCI8 using Oracle 10g Express client.
 .
 PHP5 is an HTML-embedded scripting language. Much of its syntax is borrowed
 from C, Java and Perl with a couple of unique PHP-specific features thrown
 in. The goal of the language is to allow web developers to write
 dynamically generated pages quickly.

ja

Package: php5-pdo-oci
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, ${php:Depends}, php5-common (= ${Source-Version}), oracle-xe-client
Description: PDO OCI module for php5
 This package provides an Oracle OCI driver using Oracle 10g Express client. 
 .
 PHP5 is an HTML-embedded scripting language. Much of its syntax is borrowed
 from C, Java and Perl with a couple of unique PHP-specific features thrown
 in. The goal of the language is to allow web developers to write
 dynamically generated pages quickly.
  • Lisa debian/control faili php5 paketile sõltuvus oracle-xe-client paketist, lisades rea Build-Depends lõppu komaga eraldades
oracle-xe-client
  • Moodustada sobiva sisuga debian/shlibs.local
libclntsh 10.1 oracle-xe-client(>= 10.2.0.1-1.2)
  • php5 kompileerimiseks sobib öelda
# LD_LIBRARY_PATH="${ORACLE_CLIENT}/lib" dpkg-buildpackage -rfakeroot

Tulemusena tekib hulka php5 moodulite .deb pakette, sh

php5-oci8_5.2.6.dfsg.1-1+lenny8_i386.deb
php5-pdo-oci_5.2.6.dfsg.1-1+lenny8_i386.deb

Pakendamise vea tõttu tuleb kopeerida pdo-oci teek käsitsi

# cp /usr/src/oracle-php/php5-5.2.6.dfsg.1/apache2-build/modules/pdo_oci.so /usr/lib/php5/20060613+lfs/pdo-oci.so

Kasulikud lisamaterjalid

Süsteemi ettevalmistamine PHP OCI8 tarkvara kasutamiseks

Valmistada ette tnsnames.ora fail, nt kataloog /etc/oracle

# cat /etc/oracle/tnsnames.ora
LOOM=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = LOOMAAED)
    )
  )

PHP OCI8 tarkvara kasutamine

Testiks sobib kasutada sellist skripti

<?php
  $conn = oci_connect('kasutajanimi', 'parool', 'TEST');

  if (!$conn) {
    trigger_error("Could not connect to database", E_USER_ERROR);
  }
?>

php5-cli abi käivitamiseks

$ export TNS_ADMIN=/etc/oracle
$ export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client
$ export LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib
$ php5 skript.php

PHP PDO-OCI teegi kasutamine

Testiks sobib kasutada sellist skripti

<?php
  try {
    $dbh = new PDO('oci:dbname=LOOM', 'kasutajanimi', 'parool');
  }
  catch (PDOException $e) {
    trigger_error("Could not connect to database: ". $e->getMessage(), E_USER_ERROR);
  }
?>

Üle chrooti kasutamiseks sobib öelda

# chroot /srv/lenny-32 /root/test-pdo-oci.php.sh

kus

# cat /srv/lenny-32/root/test-pdo-oci.php.sh
#!/bin/bash
export TNS_ADMIN=/etc/oracle
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client
export LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib
php5 /root/test-pdo-oci.php

Memcached

Seadistusfail on /etc/memcached.conf, tavaliselt kuulab teenus pordil 11211/udp/tcp.

# apt-get install memcached

PHP5 teegi kasutamiseks tuleb paigaldada

# apt-get install php5-memcache

ning /etc/php5/apache2/php.ini failis näidata

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

Turvalisus on lahendatud ???

Kasulikud lisamaterjalid

SSL komponendi käivitamine

Veebiserverile https toe seadistamiseks tuleb öelda

 # bash:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.load  
 # bash:/etc/apache2/mods-enabled# ln -s ../mods-available/ssl.conf 

ehk

 # a2enmod ssl
 Enabling module ssl.
 See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL \
   and create self-signed certificates.
 Run '/etc/init.d/apache2 restart' to activate new configuration!

Vaikimisi seadistustega ssl virtuaalse serveri saab aktiveerida

# a2ensite default-ssl

ning Virtuaalhosti lisada SSL seisukohast olulised read

 SSLEngine on
 SSLCipherSuite HIGH:MEDIUM
 SSLCertificateFile /etc/apache2/serdid/www.loomaaed.tartu.ee-cert.pem
 SSLCertificateKeyFile /etc/apache2/serdid/www.loomaaed.tartu.ee-key.pem
 SSLCertificateChainFile /etc/apache2/serdid/tla-ca-chain.pem

Sertifikaadipäringu tekitamine võiks toimuda nt selliselt, sertifikaadipäringu alusel väljastab SK sertifikaate oma JUUR-SK -> KLASS3-SK sertifikaatide suhtes

 $ openssl req -nodes -new -newkey rsa:2048 > www.loomaaed.tartu.ee.csr
 ...
 Country Name (2 letter code) [AU]:EE
 State or Province Name (full name) [Some-State]:Harju
 Locality Name (eg, city) []:Tallinn
 Organization Name (eg, company) [Internet Widgits Pty Ltd]: Tartu Loomaaed
 Organizational Unit Name (eg, section) []:
 Common Name (eg, YOUR name) []:www.loomaaed.tartu.ee
 Email Address []:

Kasulikud lisamaterjalid

SNI kasutamine

SNI http://en.wikipedia.org/wiki/Server_Name_Indication tehnika võimaldab samal soketil st ip aadressil ja pordil töötava veebiserveriga pakkuda erinevatel domeeninimedel https:// teenust. Selleks sobib kasutada serverina nt Debian Squeeze Apache veebiseverit ja kliendina Debian Squeeze Iceweasel brauserit. Seadistamiseks tuleb lihtsamal juhul lihtsalt seadistada https:// virtual hostid sarnaselt nö tavaliste http:// virtual hostidega.

Brauseris peab olema sisse lülitatud TLS

Edit -> Preferences -> Advanced -> Encryption -> Use TLS 1.0

HTTP Proxy käivitamine

Selleks, et veebiserveris saaks kasutada ProxyPass ja ProxyPassReverse direktiive, tuleb lülitada käima sellised moodulid

 # cd /etc/apache2/mods-enabled
 # ln -s ../mods-available/proxy.conf 
 # ln -s ../mods-available/proxy.load 
 # ln -s ../mods-available/proxy_http.load 
 # ln -s ../mods-available/proxy_connect.load

Kasutamine toimub nt selliselt

 ProxyPass /images http://web.loomaaed.tartu.ee:7778/images
 ProxyPassReverse /images http://web.loomaaed.tartu.ee:7778/images

Proximist saab kasutada ka Rewrite direktiiviga, nt selliselt nö ilusate urlide tegemise eesmärgil (kus teisel positsioonil ei ole mitte failitee, vaid uri)

RewriteEngine On
RewriteRule ^(/eng.*) /portal/!portal.clean_url?$1 [QSA,P]

või nt

...
RewriteRule ^/robots.txt /robots_ssl.txt [PT]

Kui mingil põhjusel peab proxima vastu https'i, siis selliselt

SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
...
RewriteEngine On
RewriteRule ^(/eng.*) /portal/!portal.clean_url?$1 [QSA,P]

BasicAuth tekstifailist

 <Directory /srv/www/salajanekataloog>
         AuthType Basic
         AuthName "FILE-Auth"
         AuthBasicProvider file
         AuthUserFile /etc/apache2/htpasswd.salajanekataloog
         Require valid-user
         Order Allow,Deny
         Allow from All
 </Directory>

kusjuures htpasswd.salajanekataloog sisaldab kasutajanimesid ja paroole, fail moodustatakse nt nii

$ htpasswd -c htpasswd.salajanekataloog esimenekasutaja
Password: parool
$ htpasswd htpasswd.salajanekataloog teinekasutaja
Password: parool

BasicAuth LDAP kataloogist

Apache mod_authnz_ldap ja mod_ldap moodulite abil saab autentida veebiserveri failisüsteemi kataloogi kasutajaid vastu LDAP kataloogi. Moodulite sisselülitamiseks tuleb öelda

 # a2enmod authnz_ldap
 # a2enmod ldap

Seadistus sobib kasutada nt sellist sektsiooni

 <Directory /srv/www/salajanekataloog>
   AuthType Basic
   AuthName "LDAP-Auth"
   AuthBasicProvider ldap
   AuthzLDAPAuthoritative on
   AuthLDAPURL "ldaps://ldap.loomaaed.tartu.ee/dc=loomaaed,dc=tartu,dc=ee?uid?sub?(objectClass=*)"
   Require valid-user
   Order Allow,Deny
   Allow from All
 </Directory>

Kui LDAP serveriga toimub suhtlemine üle turvalise kanali, tuleb kasutada veebiserveris LDAP kliendi seadistusfaili /etc/ldap/ldap.conf nii nagu palas OpenLDAP_kasutamine_Debianiga#LDAP_kliendi_seadistamine õpetatakse.

BasicAuth PostgreSQL andmebaasist

Paigaldada pakett libapache2-mod-auth-pgsql http://www.giuseppetanzilli.it/mod_auth_pgsql2/

 # apt-get install libapache2-mod-auth-pgsql

ning kasutada nt sellist Location sektsiooni

 <Location /pg-auth>
     Order Allow,Deny
     Allow from All
     AuthName "PG-Auth"
     AuthType basic
     Auth_PG_host baas.loomaaed.tartu.ee
     Auth_PG_port 5432
     Auth_PG_user kasutajanimi
     Auth_PG_pwd parool
     Auth_PG_database baasinimi
     Auth_PG_pwd_table skeeminimi.tabelinimi
     Auth_PG_uid_field vali1
     Auth_PG_pwd_field vali2
     Auth_PG_encrypted off
   <LIMIT GET POST>
     require valid-user
   </LIMIT>
 </Location>

ajp13 proxy kasutamine

ajp13 protokolli abil saab nö generic Apache veebiserveri taga Tomcat rakendusserverit pidada. Tarkvara paigaldamiseks tuleb öelda

 # apt-get install libapache2-mod-jk

Tarkvara kastumiseks tuleb failis /etc/apache2/apache2.conf kasutada nt

 JkWorkersFile   /etc/libapache2-mod-jk/workers.properties
 JkLogFile       /var/log/apache2/mod_jk.log
 JkLogLevel      debug

ning failis /etc/libapache2-mod-jk/workers.properties kirjeldada nn tööline (ingl. k. worker), nt selliselt

 worker.list=ajp13_worker
 
 worker.ajp13_worker.port=8009
 worker.ajp13_worker.host=localhost
 worker.ajp13_worker.type=ajp13

Veebiserveri seadistusfailis, nt VirtualHost sektsioonis kasutada rida

 ...
 ServerName www.loomaaed.tartu.ee
 JkMount /java-ressurss* ajp13_worker
 JkMount /tapselt-see-uri ajp13_worker

et vahendada java teenust aadressil http://www.loomaaed.tartu.ee/java-ressurss ning /tapselt-see-uri.

Kui mingil põhjusel on Tomcatiga suhtlemine ajp13 protokolli abil raskendatud, siis võttes arvesse asjaolu, et Tomcat sisaldab endas ka HTTP serverit (st nö tavalist veebiserverit), on võimalik vahendada läbi Apache Tomcati http protokolli kasutades. Selleks sobib kasutada nt direktiive

 ProxyPass /java-ressurss http://tomcat.loomaaed.tartu.ee/java-ressurss
 ProxyPassReverse /java-ressurss http://tomcat.loomaaed.tartu.ee/java-ressurss

Selleks, et ajp annaks https:// Apache taga töötavale Tomcatile üle kasutaja sertifikaadi PEM kujul ning nii, et seda saaks java programmist kasutada a la

 request.getAttribute("SSL_CLIENT_CERT");

peab kasutama lisaks Apache seadistusfailis parameetrit

 JkEnvVar SSL_CLIENT_CERT

ajp13 proxy kasutamine koormusjaotuseks

Selleks, et ajp13 abil vahendada kasutajad kahele Tomcat'ile sobib kasutada sellist /etc/libapache2-mod-jk/workers.properties faili sisu

 worker.list=ajp13_worker  
 
 worker.tomcat1a.port=8009   
 worker.tomcat1a.host=10.0.7.241   
 worker.tomcat1a.type=ajp13   
 worker.tomcat1a.lbfactor=1   
 worker.tomcat1a.connect_timeout=1000   
 worker.tomcat1a.jvm_route=tomcat1a      
 
 worker.tomcat1b.port=8009   
 worker.tomcat1b.host=10.0.7.242   
 worker.tomcat1b.type=ajp13   
 worker.tomcat1b.lbfactor=2   
 worker.tomcat1a.connect_timeout=1000   
 worker.tomcat1b.jvm_route=tomcat1b      
 
 worker.ajp13_worker.type=lb
 worker.ajp13_worker.sticky_session=1
 worker.ajp13_worker.sticky_session_force=false
 worker.ajp13_worker.method=Request
 worker.ajp13_worker.balance_workers=tomcat1a,tomcat1b

RewriteRule kasutamine

RewriteRule abil saab juhendada veebiserverit, millistel tingimustel ta vastab brauserile päringu vastuse asemel Location päise rida sisaldava vastusega. Kasutamiseks tuleb moodustada link

 # cd /etc/apache2/mods-enabled
 # ln -s ../mods-available/rewrite.load

ning nt http://www.loomaaed.tartu.ee seadistusfailis kasutada ridu

 RewriteEngine On
 RewriteRule ^/veebikoht http://web.loomaaed.tartu.ee/ [L,R=301]

Tulemusena esitatakse brauserile päringu

 GET /veebikoht
 Host: www.loomaaed.tartu.ee
 ...

peale vastus, st Location ja HTTP kood on just olulised

 HTTP/1.1 301 Moved Permanently
 Date: Mon, 18 May 2009 11:49:18 GMT
 Server: Apache
 Location: http://web.loomaaed.tartu.ee/
 Content-Length: 424
 Content-Type: text/html; charset=iso-8859-1
 Keep-Alive: timeout=15, max=100
 Connection: Keep-Alive

Skriptile töötluse edasiandmiseks sobib kasutada sellist reeglit

RewriteRule ^(.*) "/srv/www/cgi-bin/skript.pl$1" [T=application/x-httpd-cgi]

kus

  • skript.pl kutsutakse välja igasuguste uride puhul, seejuures skript näeb keskkonnamuutujat PATH_INFO, mille väärtuseks on esitatud päringu uri osa
  • sellise konstruktsiooni töötamiseks on oluline, et skript.pl ning $1 on peale teisendusi eraldatud / märgiga, vastasel korral otsib veebiserver failisüsteemist faili skript.pluri

RewriteCond kasutamine

RewriteCond võimaldab kasutada RewriteRule'i tingimuslikult, nt järgmine konstruksioon suunab http://www.loomaaed.tartu.org/ ja http://www.loomaaed.tartu.net/ poole pöördujad http://www.loomaaed.tartu.ee/ peale

ServerName www.loomaaed.tartu.ee
ServerAlias www.loomaaed.tartu.org
ServerAlias www.loomaaed.tartu.net
...

RewriteEngine On

RewriteCond %{SERVER_NAME} www.loomaaed.tartu.org
RewriteRule ^/(.*) http://www.loomaaed.tartu.ee/ [R,L]

RewriteCond %{SERVER_NAME} www.loomaaed.tartu.net
RewriteRule ^/(.*) http://www.loomaaed.tartu.ee/ [R,L]

Query stringi kasutamiseks, uuele urile lisatakse algne qs lõppu

RewriteCond %{QUERY_STRING} "id=36&search=1"
RewriteRule "^/otsing$" http://loomaaed.tartu.ee/otsinguvormiteade [R,L]

Selleks, et qs lõppu ei lisata, tuleb lõpetada uus aadress küsimärgiga

RewriteCond %{QUERY_STRING} "id=36&search=1"
RewriteRule "^/otsing$" http://loomaaed.tartu.ee/otsinguvormiteade? [R,L]

Vaikimisi nö teate näitamine

RewriteCond %{HTTP_HOST} !loomaaed.tartu.ee
RewriteCond %{HTTP_HOST} !www.loomaaed.tartu.ee
RewriteRule ^/.* /valehostnamegapoordutud.html [PT]

Veebiserveri vastuste pakkimine

Kui klient esitab päringuga kaasa päise

 accept-encoding: gzip,deflate

siis see tähendab, et brauser oskab vastu võtta gzip'iga pakitud vastuseid. Selleks, et server vastuseid pakkida oskaks peab olema sisse lülitatud mod_deflate moodul http://httpd.apache.org/docs/2.2/mod/mod_deflate.html ja vaikimisi on see sisse lülitatud. Globaalseks väljalülitamiseks tuleb moodul välja lülitada

 # cd /etc/apache2/mods-enabled
 # rm deflate.conf deflate.load

Location ja LocationMatch direktiivide kasutamine

Location direktiive vaatab Apache läbi järjekorras ja töötab URI'ga viimati klappinud Location. Nt sellise järgnevusega saab piirata külastajate ligipääsu va näidatud ip aadressidelt pöördujad

 <Location />
   Order Allow,Deny
   Allow from 192.168
 </Location>
 
 <Location /veahaldus>
   Order Allow,Deny
   Allow from All
 </Location>
 
 ErrorDocument 403 /hooldus/index.html
 
 <Location /hooldus>
   Order Allow,Deny
   Allow from All
 </Location>
  • kõik külastajad saavad ligi /veahaldus ning /hooldus aadressidel olevatele ressurssidele
  • ainult 192.168/16 võrgust pöörduvad kasutajad saavad ligi kõigile ressurssidele

LocationMatch direktiiviga saab kontrollida aadressi vastu regulaaravaldist, nt

 <LocationMatch "/(web|image|html)/">
   Order Allow,Deny
   Allow from 192.168.2 10.0.5.5
 </LocationMatch>

lubab ligipääsu /web/, /image/ ja /html/ sõnesid sisaldavatele aadressidele vaid ip aaressidelt 192.168.2.0/24 ja 10.0.5.5.

Directory direktiivi kasutamine

Directory direktiivi abil saab piirata ressurssile ligipääsu tema asukohale failisüsteemis järgi. Nt selleks, et piirata kõigile '.svn' ja 'CVS' kataloogidele ligipääsu, sobib kasutada selliseid sektsioone

 <Directory ~ ".*\.svn">
           Order allow,deny
           Deny from all
           Satisfy All
 </Directory>
   
 <Directory ~ ".*\/CVS">  
           Order allow,deny
           Deny from all
           Satisfy All
 </Directory>

Selleks, et kasutajad pääseks ressursile ligi

  • teatud ip aadressidelt ilma basic auth paroolita
  • mujalt basic auth parooli kontrolliga

sobib kasutada sellist sektsiooni

<Directory /ressurss>
  Options None
  Order Allow,Deny
  Allow from 192.168.1.0/24

  AuthType Basic
  AuthName "Ressurss"
  AuthBasicProvider file
  AuthUserFile /etc/apache2/htpasswd
  Require valid-user
  Satisfy Any
</Location>

kus

  • satisfy any on oluline, et kasutaja autentimiseks piisaks ühe ükskõik millisese tingimuse rahuldamisest

Virtuaalhostide kasutamine

Ühe Apache veebiserveri installatsiooni saab seadistada nii, et ta teenindab erinevatele domeeninimedele ehk veebikohtadele esitatud HTTP päringuid. Seejuures saab erinevate veebikohtade juures kasutada erinevaid veebiserveri tööd kontrollivaid seadistusi, nt

  • dokumendijuurikas - kataloog, mis vastab veebikohale veebiserveri failisüsteemis
  • kasutajate ligipääsupiirangud - nt ligipääsupiirang kliendi ip aadressi või kasutajanime ja parooli alusel; või id kaardi alusel
  • veebiserver funktsionaalsed omadused - CGI skriptide kasutamise võimalus
  • https veebikohtade puhul erinevaid veebiserveri sertifikaate

Nii käima seatud veebiserveri kohta öeldake, et veebiserver töötab virtuaalses režiimis.

Virtuaalhostide pidamiseks on olulised sellised seadistusfailid

  • /etc/apache2/ports.conf - millistel võrgusoketitel (portidel) veebiserver kliente teenindab
# cat /etc/apache2/ports.conf
NameVirtualHost 192.168.1.151:80
Listen 192.168.1.151:80
  • /etc/apache2/sites-available ja sites-enabled - virtuaalhostide seadistusfailid; erinevatele veebikohtadele vastavaid seadistused esitatakse tavaliselt kataloogis /etc/apache2/sites-available ja /etc/apache2/sites-enabled erinevates failides, kusjuures esimeses kataloogis on virtuaalhostide failid ise ning viimases lingid neile failidele. Reaalselt on kasutajatele kättesaadavad vaid need virtuaalhostid, millele on tehtud lingid.

Suhtliselt lihtne virtuaalhosti seadisfail on sellise sisuga

# cat /etc/apache/sites-available/www.loomaaed.tartu.ee.conf
<VirtualHost 192.168.1.4:80>
  ServerName www.loomaaed.tartu.ee
  ServerAdmin webmaster@loomaad.tartu.ee
  DocumentRoot /srv/www.loomaaed.tartu.ee/www_i5u7yhGbdVy4/html
  ErrorLog     /var/log/apache2/www.loomaaed.tartu.ee-error.log
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  CustomLog /var/log/apache2/www.loomaaed.tartu.ee-access.log combined

<Directory /srv/www.loomaaed.tartu.ee/www_i5u7yhGbdVy4/html>  
  Options None
  AllowOverRide None
  Order Allow,Deny
  Allow from All
</Directory>

</VirtualHost>

ja

# cd /etc/apache2/sites-enabled
# ls -l 
# www.loomaaed.tartu.ee.conf -> ../sites-available/www.loomaaed.tartu.ee.conf

kus

  • ServerName - virtuaalhosti domeeninimi, mida kasutaja virtuaalhosti poole brauseris kasutab
  • ServerAdmin - ...
  • DocumentRoot - dokumendijuurikas
  • ErrorLog - ...
  • LogFormat - ...
  • CustomLog - ...
  • Directory - ...

Veebikülastajate lähte-aadresside teisendamine RPAF mooduliga

Kui veebiserveri ees kasutatakse nn kiirendavat proxy't, nt Squidi, siis paistavad veebiserveri logis läbi Squidi tehtud päringud olevat lähtunud Squidist ip aadressilt. Statistilist analüüsi saab küll teha ehk ka Squidi abil samuti, aga nt vigade otsimisel on otsekohesem kui veebiserveri logis esinevad külastajate õiged ip aadressid (mis üldiselt võivad olla ka mõned muud proxy'd, mida külastajad on otsustanud kasutada).

RPAF mooduli kasutamise tulemusena paistab veebiserverile päring lähtuvat kliendi ip aadressilt, st kliendi aadress esitatakse veebiserveri logis ja praktiliselt kõikjal, kus päringu lähte ip aadress veebiserveris mõju avaldada võiks. RPAF moodul saavutab sellise tulemuse Squidi poolt lisatava X-Forwarded-For päise kasutamisel, milles Squid ütleb kaasa tema poole pöördunud ip aadressi.

RPAF mooduli kasutamiseks tuleb veebiserverisse moodul paigaldada öeldes

 # apt-get install libapache2-mod-rpaf

Peale paigaldamist moodul võetakse kasutusele, mooduli seadistusfail on vaikimisi sisuga

 # cat /etc/apache2/mods-enabled/rpaf.conf
 RPAFenable On
 RPAFsethostname On
 RPAFproxy_ips 127.0.0.1

Lisades RPAFproxy järele Squidi proxy aadressi, esitatakse Apache logis veebikülastajate brauserite nö tegelikke aadresse. Arusaadavalt turvakaalutlustel tuleks olla tähelepanelik, milliseid Squid'e usaldatakse, oluline võiks see olla nt kui mõne veebiserveri ressursi kasutamist kontrollitakse ip aadressi põhiselt (kuigi siinkohal tasuks kaaluda hoopiski ligipääsu piiramist Squidi vahenditega).

Veebikülastajate lähte-aadresside teisendamine remoteip mooduliga

Selgub, et alates Apache v. 2.4 on kasutada remoteip moodul http://httpd.apache.org/docs/2.4/mod/mod_remoteip.html ja sellega saab veebiküljastajate nö tegelikke aadresse muuta nähtavaks veebiserveri jaoks, sh rakenduste jaoks. Kasutamiseks tuleb moodul sisse lülitada

# a2enmod remoteip

Tekitada remoteip seadistusfail, nt

# cat /etc/apache2/mods-enabled/remoteip.conf 
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 10.0.0.100

Selleks, et Apache logiks klientide aadresse, tuleb muuta CustomLog kirjeldust, %h -> %a

# grep " combined$" /etc/apache2/apache2.conf 
# LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

Ning kehtestada muudatused

# service apache2 restart

Tulemusena esitatakse nt phpinfo() väljundis REMOTE_ADDR väärutseks kliendi ip ja samuti access logis.

Proxy mooduli kasutamine koormusjaotuseks

Proxy http://httpd.apache.org/docs/2.2/mod/mod_proxy.html moodulit saab kasutada nt selliselt koormusjaotuseks

<Location /balancer-manager>
  SetHandler balancer-manager
  Order Allow,Deny
  Allow from 172.19
</Location>

ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
#  ProxyPassReverse / http://10.0.13.146:80  
#  ProxyPassReverse / http://10.0.13.147:80

<Proxy balancer://mycluster>
  BalancerMember http://10.0.13.146:80
  BalancerMember http://10.0.13.147:80
</Proxy>

Päringute ja päringu vastuste päiste ümberkirjutamine

headers

Selleks, et kasutaja esitatud veebiserveri päringus ja päringu vastuses muuda HTTP päiseid sobib kasutada Apache mod_headers moodulit, sisselülitamiseks öelda http://httpd.apache.org/docs/2.2/mod/mod_headers.html

# a2enmod headers

Sisenenud päringute päiste muutmiseks sobib kasutada RequestHeader direktiivi, nt

RequestHeader set Ssl-Client-S-Dn   %{SSL_CLIENT_S_DN}e
RequestHeader set Ssl-Client-Verify %{SSL_CLIENT_VERIFY}e

Väljuvate päringute päiste muutmiseks sobib kasutada Header direktiivi, nt

<Location /loomaaed>
  Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
  Header set Pragma "no-cache"
</Location>

expire

http://httpd.apache.org/docs/2.2/mod/mod_expires.html

# a2enmod expires
<Directory /srv/www/html/static>
  ExpiresActive On
  ExpiresByType text/html A20
  ExpiresDefault A20
</Directory>

PHP abil kirja saatmine SMTP relee kaudu

PHP Pear mooduli Net_SMTP http://pear.php.net/package/Net_SMTP/ abil saab saata SMTP relee kaudu kirju välja, tarkvara paigaldamiseks tuleb öelda

# apt-get intall php-mail

Näiteks selline skript saadab kirja välja

<?

require 'Net/SMTP.php';

$host = '192.168.1.250';
$from = 'mart@loomaaed.tartu.ee';
$rcpt = array('priit@loomaaed.tartu.ee');
$subj = "Subject: Teade, mis on tähtis\n";
$body = "Kirja sisu osa";

/* Create a new Net_SMTP object. */
if (! ($smtp = new Net_SMTP($host))) {
   die("Unable to instantiate Net_SMTP object\n");
}

/* Connect to the SMTP server. */
if (PEAR::isError($e = $smtp->connect())) {
  die($e->getMessage() . "\n");
}

/* Send the 'MAIL FROM:' SMTP command. */
if (PEAR::isError($smtp->mailFrom($from))) {
  die("Unable to set sender to <$from>\n");
}
 
/* Address the message to each of the recipients. */
foreach ($rcpt as $to) {
  if (PEAR::isError($res = $smtp->rcptTo($to))) {
    die("Unable to add recipient <$to>: " . $res->getMessage() . "\n");
   }
}

/* Set the body of the message. */
if (PEAR::isError($smtp->data("From: Mart Kask <mart@loomaaed.tartu.ee>\r\n" . "To: Priit Kask <priit@loomaaed.tartu.ee>\r\n" . $subj . "\r\n" . $body))) {
  die("Unable to send data\n");
}

/* Disconnect from the SMTP server. */
$smtp->disconnect();

?>

Logimine

CustomLog http://httpd.apache.org/docs/2.2/mod/mod_log_config.html direktiiviga saab täpsustada, mida veebiserverile esitatud päringutega seoses logitakse, nt näidata, et logitakse päringu teenindamiseks kulunud aega

CustomLog /var/log/apache2/loomaaed.tartu.ee-ssl-access.log "%h %l %u %t \"%r\" %>s %b %T/%D"

kus

  • %T - päringu tegemiseks kulunud aeg sekundites
  • %D - päringu tegemiseks kulunud aeg mikrosekundites

Seejuures tuleb arvestada, et päringu tegemiseks kulunud aeg sõltub nii päringu esitajast kui vastajast.

kood 408

Apache logib 408 koodiga sissekande kui ta ootas päringut, aga seda ei tulnud ning ta lõpetas ootamise nt KeepAliveTimeout tõttu, nt

10.80.106.29 - - [16/May/2013:15:22:33 +0300] "-" 408 - 0 "-" "-" "" "-"

FastCGI

FastCGI saab töötada kolmes režiimis

  • dünaamiline (ingl. k. dynamic) - protsessi käivitab vajadusel veebiserver ise
  • staatiline (ingl. k. static) - etteantud hulk protsesse käivitatakse veebiserveri käivitamisel
  • väline (ingl. k. external) - protsess töötab eraldi veebiserverist, veebiserveri suhtleb sellega nt üle tcp/ip

FastCGI http://www.fastcgi.com/ tarkvara paigaldamiseks tuleb öelda

# apt-get install libapache2-mod-fastcgi libfcgi-perl

Dünaamiline

FastCGI kasutamiseks peab veebiserver sisaldama nt sellist seadistust

<Directory /srv/www/fcgi>
  Options ExecCGI
  AddHandler fastcgi-script .fcgi
</Directory>

Nn HelloWorld FastCGI skript on selline

$ cat /srv/www/fcgi/fcgi.fcgi
#!/usr/bin/perl
use FCGI;

while( FCGI::accept() >= 0 )
  {
    print( "Content-Type: text/plain\n\n" );
    print( "Hello World\n" );
  }

FastCGI kasutamisega kaasneb veebiserveris töötav protsess

# ps aux | grep www-data | grep perl
www-data 13742  0.0  0.5  19328  2812 ?        S    23:23   0:00 /usr/bin/perl /srv/www/fcgi/fcgi.fcgi


Lisaks saab veebiserveri seadistusfaili nn põhiosas juhtida FastCGI tööd nt selliselt

FastCgiConfig -initial-env PATH \
  -appConnTimeout 600 -idle-timeout 60 \
  -init-start-delay 0 -maxClassProcesses 100 -maxProcesses 200 -min-server-life 60 \
  -minProcesses 0 -startDelay 1 -autoUpdate

kus

  • TODO

Staatiline

Parameetri FastCGIServer abil saab käivitada etteantud hulga FastCGI protsesse, nt

FastCgiServer /srv/www/fcgi/fcgi.fcgi -processes 10 -initial-env FCGI=on 

kus

  • FCGI=on - fcgi skript näeb lisaks sellist keskkonnamuutujat näidatud väärtusega

Kui veebiserveri muu seadistusega kaasneb kõnealuse skript kasutamine, siis see toimub FastCGI'na, nt selline RewriteRule

RewriteEngine On
RewriteRule ^/stat/(.*) "/srv/www-static/stat.fcgi/$1" [T=application/x-httpd-cgi]

kus

  • /srv/www-static/stat.fcgi on iseenesest samasugune kui dünaamilisel juhtumil

Väline

Veebiserverist eraldi protsessi kasutamise üheks eeliseks on süsteemi suurem skaleeritavus, FastCGI toega teenus ei pea töötama veebiserveriga samas arvutis. Kas samas arvutis või võrgus tuleb käivitada protsess, nt sellise skripti abil

$ cat /srv/www-fcgi-external/ext.fcgi
use FCGI;
my $socket = FCGI::OpenSocket( ":8080", 5 );
my $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR,
  \%ENV, $socket );
    
my $count;
while( $request->Accept() >= 0 ) {
  print "Content-type: text/html\n\n";
  print ++$count;
}

FCGI::CloseSocket( $socket );

Veebiserveri seadistusfailis tuleb näidata parameeter

FastCgiExternalServer /srv/www/ext.fcgi -host 127.0.0.1:8080

kus

  • /srv/www on muus osas seotud FastCGI kasutamisega, nt Directory direktiivi abil
  • 127.0.0.1:8080 on ext.fcgi sees kasutatud soketi aadress

Protsessi käivitamiseks sobib öelda nt

$ perl /srv/www-fcgi-external/ext.fcgi

Tulemusena esitatakse aadressil http://fcgi.loomaaed.tartu.ee/ext.fcgi igale brauseri pöördumisele vastuseks ühe võrra suurem arv.

Pyhton WSGI

# apt-get install libapache2-mod-wsgi

Veebiserveri seadistuse osa

WSGIScriptAlias /myapp /srv/www/wsgi/myapp.wsgi

HelloWorld skript

# cat /srv/www/wsgi/myapp.wsgi              
def application(environ, start_response):
       status = '200 OK'
       output = 'Hello World!'

       response_headers = [('Content-type', 'text/plain'),
                           ('Content-Length', str(len(output)))]
       start_response(status, response_headers)

Tulemusena saab pöörduda aadressile http://localhost/myapp

Re-negotiation probleem

TODO

Kasulikud lisamaterjalid

Allalaadimise kiiruse kontrollimine

# apt-get install libapache2-mod-bw

ID kaardiga autentimine

Sisselogimine

Väljalogimine

Mime type kasutamine

Vahel on kasulik juhtida failidega töötamist MIME tüübi abil, nt selline rida paneb brauserid pakkuma salvestamise võimalust, st mitte esitama xml teksti brauserisse

AddType application/octet-stream .ddoc

Tundub, et teine ja parem variant on

<FilesMatch "\.ddoc">
  Header set Content-Disposition attachment
</FilesMatch>

Selle kasutamiseks tuleb headers moodul sisse lülitada

# a2enmod headers

Teksti asendamine HTTP BODY sees

Alates Apache v. 2.2.7 (Debian Squeeze v. 6 paketihalduses on 2.2.16) on tarkvara koosseisus mod_substitude teek, mille aktiviseerimiseks sobib öelda

# a2enmod substitute
# /etc/init.d/apache2 restart

Kasutamiseks sobib kasutada nt sellist sektsiooni Virtual Host kirjelduses

<Location /wiki>
 AddOutputFilterByType SUBSTITUTE text/html
 Substitute s/Mart/Priit/n
</Location>

ulimit seadistamine

Käesolevate ulimit väärtuste esitamiseks sobib tekitada nt selline cgi skript ja brauseris käivitada

# cat /var/www/cgi-bin/index.cgi
#!/bin/bash
echo -e "Content-type: text/plain\n\n";
ulimit -a

Vaikimisi väljastakse Debian Squeeze v. 6 64 bit juhtumil

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

kus

  • core file size 0 - core faile ei salvestata
  • open files 1024 - ühe protsessi poolt lubatud avatud failide arv
  • max user processes - operatsioonisüsteemis kasutajale lubatud samaaegselt töötavate protsesside arv

nofile

Näiteks selliselt

# cat /etc/apache2/envvars 
...
APACHE_ULIMIT_MAX_FILES="ulimit -n 65536"

Parasjagu töötavate veebiserveri protsesside poolt avatud failide arvude küsimiseks sobib öelda nt

# for i in `ps U www-data | awk {'print $1'} | grep -v PID`; \
  do echo -n "$i: "; lsof -n -p $i | wc -l ; done
6411: 111
6723: 111
6740: 111
...

core failide salvestamine

Lisada /etc/apache2/apache2.conf seadistusfaili rida

CoreDumpDirectory /var/cache/apache2

käivitada apache unlimited core suurusega

# ulimit -c unlimited
# /etc/init.d/apache2 start

Või kirjutada /etc/init.d/apache2 skripti sisse selline ulimit rida

..
case $1 in
        start)
               log_daemon_msg "Starting web server" "apache2"
               # ulimit -c 4096
               ulimit -c unlimited
...

kus

  • ulimit -c 4096 tekitab core faile suurusega kui 2 MB

Tappa mõni apache2 child protsess SEGV signaaliga

# kill -11 PID

Tulemusena tekib core fail

/var/cache/apache2/core

Seejuures tuleb arvestada, et core failid salvestakse sama nimega, st järgmine kirjutab eelmise üle. Üks variant ülekirjutamist mingil määral vältida on nt cron töö abil liigutada iga minut eelmine fail eest ära mujale.

Võib olla on parem tulemus, kui kasutada apache2-dbg paketti.

Kasulikud lisamaterjalid

PHP APC

# apt-get install php-apc

APC tööd juhtib nt selline seadistusfail

# cat /etc/php5/conf.d/apc.ini 
extension=apc.so
apc.max_file_size = 5
apc.shm_size = 512
apc.file_update_protection = 2
apc.stat = 1
apc.ttl=3600
apc.user_ttl = 3600
apc.gc_ttl = 3600

kus

  • TODO

Statistika esitamiseks sobib kopeerida APC lähtetekst ning sealt kasutada skripti apc.php.

GeoIP

Apache GeoIP mooduli abil saab tekida GEO* nimelised keskkonnamuutujad, mille väärtused sõltuvad päringu esitanud ip aadressist. Ja neid muutujaid saab siis kasutada nt PHP koodis või niisama veebiserveri seadistusfailis, nt RewriteCond tingimuste juures, et kontrollida mida ühelt või teiselt ip aadressilt sooritatud päringutele vastatakse. Tarkvara paigaldamiseks sobib öelda

# apt-get install libapache2-mod-geoip

Lisaks tuleb paigaldada GeoIP andmebaasid, nt paketihalduse abil öelda

# apt-get install geoip-database

või siis käsitsi nt http://dev.maxmind.com/geoip/legacy/geolite aadressilt kopeerida meelepärased baasid.

Kasutamiseks tuleks näidata /etc/apache2/mods-enabled/geoip.conf failis nt

# cat /etc/apache2/mods-enabled/geoip.conf
<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPOutput Env
  GeoIPDBFile /root/GeoIP.dat Standard
  GeoIPDBFile /root/GeoIPASNum.dat Standard
  GeoIPDBFile /root/GeoLiteCity.dat Standard
  GeoIPEnableUTF8 On 
  #GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>

ning virtul hosti sektsioonis nt

RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^EE$
RewriteRule ^(.*) http://www.loomaaed.tartu.ee/ [R,L]

Kasulikud lisamaterjalid

Oracle Weblogic kasutamine

Oracle Weblogic rakendusserver kasutamiseks Apache taga tuleb esmalt kopeerida failisüsteemi wl moodul, mille leiab Weblogic paigalduse failisüsteemist, nt

/opt/bea/wlserver_10.3/server/plugin/linux/x86_64/mod_wl_20.so
/opt/bea/wlserver_10.3/server/plugin/linux/x86_64/mod_wl_22.so

Seejuures tuleb arvestada, et 2013 aastal on olemas teegid Apache v. 2.0 ja v. 2.2 jaoks. Edasi tuleb moodul laadida sobiva seadistusega, nt

# cat /etc/apache2/mods-available/weblogic.load 
LoadModule weblogic_module /usr/lib/apache2/modules/mod_weblogic.so
# cat /etc/apache2/mods-available/weblogic.conf 
<IfModule mod_weblogic.c>
  Debug               OFF
  WLLogFile           /var/log/apache2/weblogic.log
  DebugConfigInfo     Off
  KeepAliveSecs       120
  WLIOTimeoutSecs     120
</IfModule>

Lõpuks veebiserver virtual host juures kirjeldada, millise uri juures Weblogic on kasutusel, nt

<Location /wl>
  Sethandler weblogic-handler
  WeblogicCluster 10.0.6.36:7030,10.0.6.37:7030
  WLCookieName JSESSIDRIIGIPORTAALGW
</Location>

Apache v. 2.4

Apache v. 2.4 saab 2013 aasta kevadel katsetada kergesti nt Ubuntu 12.04 ja nt sellise PPA abil

# add-apt-repository ppa:nathan-renniewaldock/apache2.4-php
  • Directory ja Location juures tuleb Order ja Allow asemel kasutada sarnast rida
<Directory /srv/www>
  Require all granted
</Directory>
  • NameVirtualHost direktiivi enam pole nö aktiivses kasutuses, piisab Listenist

Kasulikud lisamaterjalid

WebDAV server

WebDAV teeke pole tarvis eraldi paidaldada, nende tugi on apahce2.2-bin paketis olemas

# dpkg -L apache2.2-bin | grep mod_dav
/usr/lib/apache2/modules/mod_dav.so
/usr/lib/apache2/modules/mod_dav_lock.so
/usr/lib/apache2/modules/mod_dav_fs.so

Sisselülitamiseks sobib öelda

# a2enmod dav
# a2enmod dav_fs
# a2enmod dav_lock

Veebiserveri VirtualHost'is sobib kasutada nt sellist sektsiooni

Alias /webdav /srv/webdav

<Directory /srv/webdav>
  Options All
  DAV On
  AuthType Basic
  AuthName "webdav"
  AuthBasicProvider file
  AuthUserFile /etc/apache2/webdav.password
  Require valid-user
  Order Allow,Deny
  Allow from All
</Directory>

kus

  • DAV - lülitatakse sisse WebDAV tugi

Kliendiks sobib kasutada nt

Kasulikud lisamaterjalid

CORS

Kasulikud lisamaterjalid

Märkused

  • laaditud moodulite nimekirja esitamiseks
# apache2ctl -M | grep ssl
 ssl_module (shared)

mod security

Kasulikud lisamaterjalid

  • TODO

CGI

# apt-get install apache2
# 

Kasulikud lisamaterjalid

  • TODO