Apache/ca

De Guifi.net - Wiki Català

< Apache
Revisió de 23:23, 13 nov 2010; Al (Discussió | contribucions)

(dif) ←Versió més antiga | Versió actual (dif) | Versió més nova→ (dif)

El servidor HTTP Apache és un servidor de programari lliure per sistemes tipus Unix, Microsoft Windows i altres plataformes. Apache és desenvolupat i mantingut per una comunitat de desenvolupadors sota els auspicis de la Apache Software Foundation.

Apache va començar a ser desenvolupat l'any 1995 a partir del codi de aleshores popular NCSA HTTPd , fet que motiva l'origen del nom: Apache de l'angles "a patchy server" (un servidor parxejat). Tot i això, la versió oficial de l'Apache Software Foundation és que el nom d'Apache ve donat com a tribut als indis Apaches, coneguts per les seves habilitats en la guerra i per la seva robustesa i durabilitat.

Actualment el servidor Apache és el servidor web més utilitzat, amb una quota de mercat del 70% segons dades de netcraft.

La última versió estable (2.0) ha estat creada de nou des de l'inici i no conté codi original de l'antic NCSA HTTPd.

Contingut

Instal·lació d'Apache

Actualment hi ha dues versions d'Apache disponibles (Apache 1 i Apache 2). L'última versió estable és la 2 i no hi cap raó per no instal·lar aquesta versió en servidors nous. Cal executar:

sergi@departament0:~$ sudo apt-get install apache2
S'està llegint la llista de paquets... Fet
S'està construint l'arbre de dependències       
Reading state information... Fet           
S'instal·laran els següents paquets extres:
  apache2-common apache2-mpm-worker apache2-utils
Paquets suggerits:
  apache2-doc
S'instal·laran els següents paquets NOUS:
  apache2 apache2-common apache2-mpm-worker apache2-utils
0 actualitzats, 4 nous a instal·lar, 0 a eliminar i 0 no actualitzats.
Es necessita obtenir 1145kB d'arxius.
Després de desempaquetar s'usaran 3994kB d'espai en disc addicional.
Voleu continuar [S/n]? s
Des:1 http://es.archive.ubuntu.com edgy/main apache2-utils 2.0.55-4ubuntu4 [93,1kB]
Des:2 http://es.archive.ubuntu.com edgy/main apache2-common 2.0.55-4ubuntu4 [807kB]
Des:3 http://es.archive.ubuntu.com edgy/main apache2-mpm-worker 2.0.55-4ubuntu4 [209kB]
Des:4 http://es.archive.ubuntu.com edgy/main apache2 2.0.55-4ubuntu4 [36,0kB]
1145kB descarregats en 1s (598kB/s)    
S'està seleccionant el paquet apache2-utils prèviament no seleccionat.
(S'està llegint la base de dades ... hi ha 118705 fitxers i directoris instal·lats actualment.)
S'està desempaquetant apache2-utils (de .../apache2-utils_2.0.55-4ubuntu4_i386.deb) ...
S'està seleccionant el paquet apache2-common prèviament no seleccionat.
S'està desempaquetant apache2-common (de .../apache2-common_2.0.55-4ubuntu4_i386.deb) ...
S'està seleccionant el paquet apache2-mpm-worker prèviament no seleccionat.
S'està desempaquetant apache2-mpm-worker (de .../apache2-mpm-worker_2.0.55-4ubuntu4_i386.deb) ...
S'està seleccionant el paquet apache2 prèviament no seleccionat.
S'està desempaquetant apache2 (de .../apache2_2.0.55-4ubuntu4_i386.deb) ...
S'està configurant apache2-utils (2.0.55-4ubuntu4) ...
S'està configurant apache2-common (2.0.55-4ubuntu4) ...
Setting Apache2 to Listen on port 80. If this is not desired, please edit /etc/apache2/ports.conf as desired. Note that the Port directive no longer   
works.
Module userdir installed; run /etc/init.d/apache2 force-reload to enable.

S'està configurant apache2-mpm-worker (2.0.55-4ubuntu4) ...
* Starting apache 2.0 web  
server...                                                                                                                          
 apache2: Could not determine the server's fully qualified domain name, using 127.0.1.1 for ServerName                                                                                                                                                       
[ ok ]
S'està configurant apache2 (2.0.55-4ubuntu4) ...

Hi ha tres fets a destacar de la instal·lació:

  • El primer que el port de funcionament estàndard dels servidors web és el 80 (tal com diu la instal·lació)
  • L'altre és el fet que per defecte s'instal·la el modul userdir (cada usuari té un espai a la seva home per crear les seves pròpies pàgines web)
  • La instal·lació per defecte d'Apache és amb mpm-worker
$ sudo apt-cache search mpm | grep apache
apache2-common - next generation, scalable, extendable web server
apache2-mpm-perchild - experimental high speed perchild threaded model for Apache2
apache2-mpm-prefork - traditional model for Apache2
apache2-mpm-worker - high speed threaded model for Apache2
apache2-prefork-dev - development headers for apache2


Hi ha un munt de paquets suggerits per instal·lar amb Apache.. el que si que gairebé és imprescindible per l'administrador és la documentació

$ sudo apt-get install apache2-doc

La forma més ràpida de consultar que tot a funcionat correctament és obrir amb el vostre navegador preferit (Firefox) la pàgina:

http://localhost

La documentació la trobareu enllaçada a la pàgina principal o a:

http://localhost/manual/

Cal fer notar que si acabeu d'instal·lar la documentació cal que reinicieu el servidor Apache seguint les indicacions de la següent secció:

Podem consultar els fitxers que instal·la Apache amb la comanda:

$ dpkg -L apachexxxxx

La majoria d'aplicacions són instal·lades pel paquet apache2-common. Tenim les següents comandes/aplicacions/servidors:

$ sudo dpkg -L apache2-common | grep bin
/usr/bin
/usr/lib/cgi-bin
/usr/sbin
/usr/sbin/apache2ctl
/usr/sbin/modhandler.py
/usr/sbin/a2dismod
/usr/sbin/a2ensite
/usr/sbin/a2enmod
/usr/sbin/update-apache2-modules
/usr/sbin/a2dissite
/usr/sbin/apache2-ssl-certificate

I els següents fitxers de configuració:

$ sudo dpkg -L apache2-common | grep etc
/etc
/etc/apache2
/etc/apache2/sites-available
/etc/apache2/sites-available/default
/etc/apache2/sites-enabled
/etc/apache2/ssl
/etc/apache2/mods-enabled
/etc/apache2/mods-available
/etc/apache2/mods-available/actions.load
/etc/apache2/mods-available/asis.load
/etc/apache2/mods-available/auth_anon.load
/etc/apache2/mods-available/auth_dbm.load
/etc/apache2/mods-available/auth_digest.load
/etc/apache2/mods-available/auth_ldap.load
/etc/apache2/mods-available/cache.load
/etc/apache2/mods-available/cern_meta.load
/etc/apache2/mods-available/cgi.load
/etc/apache2/mods-available/cgid.load
/etc/apache2/mods-available/dav.load
/etc/apache2/mods-available/dav_fs.load
/etc/apache2/mods-available/deflate.load
/etc/apache2/mods-available/disk_cache.load
/etc/apache2/mods-available/expires.load
/etc/apache2/mods-available/ext_filter.load
/etc/apache2/mods-available/file_cache.load
/etc/apache2/mods-available/headers.load
/etc/apache2/mods-available/imap.load
/etc/apache2/mods-available/include.load
/etc/apache2/mods-available/info.load
/etc/apache2/mods-available/ldap.load
/etc/apache2/mods-available/mem_cache.load
/etc/apache2/mods-available/mime_magic.load
/etc/apache2/mods-available/proxy.load
/etc/apache2/mods-available/proxy_connect.load
/etc/apache2/mods-available/proxy_ftp.load
/etc/apache2/mods-available/proxy_http.load
/etc/apache2/mods-available/rewrite.load
/etc/apache2/mods-available/speling.load
/etc/apache2/mods-available/ssl.load
/etc/apache2/mods-available/suexec.load
/etc/apache2/mods-available/unique_id.load
/etc/apache2/mods-available/userdir.load
/etc/apache2/mods-available/usertrack.load
/etc/apache2/mods-available/vhost_alias.load
/etc/apache2/mods-available/cgid.conf
/etc/apache2/mods-available/dav_fs.conf
/etc/apache2/mods-available/mime_magic.conf
/etc/apache2/mods-available/proxy.conf
/etc/apache2/mods-available/ssl.conf
/etc/apache2/mods-available/userdir.conf
/etc/apache2/conf.d
/etc/apache2/envvars
/etc/apache2/apache2.conf
/etc/apache2/magic
/etc/apache2/README
/etc/logrotate.d
/etc/logrotate.d/apache2
/etc/init.d
/etc/init.d/apache2
/usr/share/doc/apache2/README.etc   

La carpeta /etc/apache2/mods-available ens mostra els mòdul per defecte que ofereix Apache. consulteu la secció Mòduls.

Control del servei Apache. Execució, parada i reconfiguració d'Apache

Seguint els estàndards de Debian GNU/Linux (basat en el sistema d'scripts d'inicialització SystemV ) l'script de control del dimoni bind és:

/etc/init.d/apache2

Les accions que podem fer amb el servei són start|stop|restart|reload|force-reload.

Cada cop que fem un canvi a la configuració d'Apache2 hem de fer un restart o, millor encara, un reload del servei:

$ sudo /etc/init.d/apache2 reload

De fet, molts del controls d'execució del servidor, realment es fan a través de la comanda apache2ctl (l'script System V utilitza aquesta comanda).

Tal com podem veure executant:

$ sudo updatedb
$ locate apache2 | grep rc
/etc/rc0.d/K91apache2
/etc/rc1.d/K91apache2
/etc/rc2.d/S91apache2
/etc/rc3.d/S91apache2
/etc/rc4.d/S91apache2
/etc/rc5.d/S91apache2
/etc/rc6.d/K91apache2

El servei Apache2 s'executa a partir del nivell 2 (cal destacar que no està disponible al nivell SINGLE USER MODE rcS.d).

Podeu trobar més informació a l'article Configuració de serveis en Linux

Comanda apache2ctl

  • start:. Inicia el servidor. Equivalent a apachectl -k start.
  • stop: Atura el servidor. Equivalent a apachectl -k stop.
  • restart: Reinicia els servidor Apache Equivalent a apachectl -k restart.
  • fullstatus: Si estem utilitzant el mòdul mod_status. Permet accedir a l'estatus del servidor. Veieu l'exemple de més avall. Necessita el mòdul server-status activat.
  • status: Similar a l'anterior però mostra un resum de l'estatus del servidorDisplays a brief status report. Similar a l'ordre fullstatus excepte que no mostra la llista de peticions servides per sevidor en un moment concret. Necessita el mòdul server-status activat.
  • configtest: Comprova si la sintaxi de la configuració és correcte. També es pot utilitzar apachectl -t.
  • graceful: reinicia Apache sense matar les connexions que actualment estan en servei. apachectl -k graceful.

Podeu veure l'ajuda amb:

$ sudo apache2ctl
Usage: /usr/sbin/apache2ctl start|stop|restart|graceful|graceful-stop|configtest|status|fullstatus|help
      /usr/sbin/apache2ctl <apache2 args>
      /usr/sbin/apache2ctl -h            (for help on <apache2 args>)

i també podeu consultar el manual:

$ man apache2ctl

Recursos:

configtest

Abans de tornar a iniciar o recarregar un Apache es pot comprovar que la sintaxi de la configuració és correcte amb:

$ sudo apache2ctl configtest
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Wed Jan 27 06:39:37 2010] [warn] NameVirtualHost *:81 has no VirtualHosts
Syntax OK

Configuració d'Apache

El directori amb les configuracions d'Apache és:

/etc/apache2/
$ ls /etc/apache2
apache2.conf  httpd.conf      mods-enabled  sites-available
conf.d        magic           ports.conf    sites-enabled
envvars       mods-available  README        ssl
  • apache2.conf: Fitxer principal de configuració.
  • Carpeta conf.d: Els fitxers d'aquest directori són automaticament afegits mitjançant un include al fitxer apache2.conf.
  • envvars: Variables d'entorn er apache2ctl.
  • httpd.conf: Fitxer buit. Utilitzat per permetre la compatibilitat enrere d'Apache
  • ports.conf: Configura els ports pels quals Apache està donant servei.
  • ssl: Configuració de ssl.
  • magic: Dades de configuració del mòdul mod_mime_magic
  • mods-enabled i mods-available: Carpetes de configuració dels mòduls.
  • sites-enabled i sites-available: Carpetes de configuració dels llocs web.

El fitxer README explica amb més detall els fitxers de configuració d'Apache2.

Fitxer /etc/apache2/apache2.conf

Podem consultar el fitxer de configuració sense els comentaris amb la comanda:

$ cat /etc/apache2/apache2.conf | grep -v '^#'

En aquest fitxer trobem configuracions generals d'Apache. La configuració d'Apache funciona mitjançant directivas. Típicament una directiva, configura el valor d'un paràmetre com per exemple:

ServerRoot "/etc/apache2"  

Podeu consultar una llista completa de directivas a la documentació d'Apache: http://httpd.apache.org/docs/2.0/mod/directives.html. També és interesant la Guía ràpida de configuració de directives.

Típicament aquest fitxer no s'haurà de tocar ja que les configuracions les farem a altre fitxer que estan inclosos mitjantçnat la directiva include. Per exemple les següent línies del fitxer apache2.conf, inclouen tots els fitxers de les carpetes encarregades dels mòduls:

Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

En canvi la següent línia s'encarrega d'incloure els fitxers de configuració de llocs web:

Include /etc/apache2/sites-enabled/[^.#]*

I les següents línies inclouen altres fitxers encarregats de la configuració d'Apache:

Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
Include /etc/apache2/conf.d/[^.#]*

Els fitxers httpd.conf s'uttilitza per compatibilitat amb la versió anterior d'Apache. A Apache1 el fitxer de configuració s'anomenava httpd.conf. D'aquesta forma, Apache2 s'assegura que si encara hi ha aplicacions que escriuen en aquest fitxer continuin sen compatibles.

A la carpeta /etc/apache2/conf.d és guarden les configuracions de moltes aplicacions web. En el següent exemple:

$ ls -l /etc/apache2/conf.d/
total 8
-rw-r--r-- 1 root root 619 2006-09-27 18:54 apache2-doc
-rw-r--r-- 1 root root  24 2006-11-10 10:46 charset
lrwxrwxrwx 1 root root  29 2006-11-10 10:46 mediawiki1.5.conf -> /etc/mediawiki1.5/apache.conf
lrwxrwxrwx 1 root root  23 2006-12-07 17:48 moodle -> /etc/moodle/apache.conf
lrwxrwxrwx 1 root root  29 2006-12-08 13:18 phpldapadmin -> /etc/phpldapadmin/apache.conf

Veiem les configuracions de les aplicacions web Moodle, PhpLdapAdmin, Mediawiki i la pròpia documentació d'Apache (apache2-doc). Aquestes aplicacions instal·len aquest fitxers (en molts casos com podeu observar utilitzant links) en el moment que instal·lem aquestes aplicacions (apt-get install).

Finalment el fitxer /etc/apache2/ports.conf s'encarrega de configurar els ports d'Apache:

$ cat /etc/apache2/ports.conf 
Listen 80

El port estàndard dels servidors web és el 80 tal i com podeu consultar al fitxer /etc/services:

$ cat /etc/services | grep http
# Updated from http://www.iana.org/assignments/port-numbers and other
# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
www             80/tcp          http            # WorldWideWeb HTTP
https           443/tcp                         # http protocol over TLS/SSL
https           443/udp

Com podeu observar el port segur en canvi és el 443.

LockFile /var/lock/apache2/accept.lock
PidFile /var/run/apache2.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 20 MaxRequestsPerChild 0 </IfModule>

Directori web inicial de l'Apache:

/var/www/

Fitxers de configuració

A la versio 2.0 la carpeta /etc/apache2 conté els fitxers de configuració del servidor. Els principals fitxers i carpetes de configuració son:

  • apache2.conf. Aquest és el fitxer principal de configuració. Equival al fitxer httpd.conf de la versio 1.0. En l'anterior versió d'apache gairabé tota la configuració es duïa a terme aqui. Amb la nova versió, la configuració s'ha repartit entre diversos fitxers per tal de facilitar la gestió del servidor. Aquest fitxers es compon de directivas que configuran diversos aspectes del servidor. La versió 2.0 encara té un fitxer httpd.conf buit per raons de compatibilitat.
  • mods-enabled | mods-available. La carpeta mods-enabled conté els moduls activats al servidor. La carpeta mods-available conté els moduls disponibles. Un modul s'activa creant un link a un modul de la carpeta mods-available dins la carpeta mods-enabled.
  • sites-enabled | sites-available. De forma anàloga a la gestió de mòduls, la gestió de Hosts Virtuals es realitza mitjantçant l'ús d'aquestes dues carpetes.

Respecte a la versió anterior els fitxers de configuració s'ha reestructurat per tal d'afavorir l'ordre i el manteniment del servidor. Altres fitxers com els .htacces configuren altres aspectes del servidor http com el control d'accés.

L'script de control del servidor que ens permet executar/parar/recarregar el servidor és /etc/init.d/apache2 start|stop|reload|restart. apache2.conf Aquest és el fixer principal de configuració. Altre fitxers de configuració son de fet directives include que apunten a aquest fitxers.

Codis de caràcters. Accents

Si no es mostren correctament els accents a Apache 2 cal descomentar la següent línia al fitxer /etc/apache2/apache2.conf:

#AddDefaultCharset ISO-8859-1

i treure el #

AddDefaultCharset ISO-8859-1

NOTA: Atenció és recomanable utilitzar el format UTF-8!!!. Llegiu l'article:

http://www.juque.cl/weblog/2006/04/02/ascii-unicode-utf8-y-la-iatarnaaianalizaaian-parte-ii.html

En tot cas, si no es veuen correctament fitxer quan el DefaultCharset no és ISO-8859-1, podeu convertir massivament fitxers de ISO-8859-1 a UTF8 amb la comanda iconv i els scripts de l'article [[1]].

Open Suse

PEr posat UTF-8:

> sudo joe /etc/apache2/mod_mime-defaults.conf

I afegiu la línia:

AddDefaultCharset UTF-8

Ports

Els ports als que treballa l'apache es poden canviar al fitxer /etc/apache2/ports.conf. Per exemple apache pots escoltar peticions en dos ports alhora:

Listen 80
Listen 100

Els ports reservats per la IANA són el 80 per a connexions HTTP i el 443 per a connexions HTTPS.

$ cat /etc/services | grep http
# Updated from http://www.iana.org/assignments/port-numbers and other
# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
www		80/tcp		http		# WorldWideWeb HTTP
https		443/tcp				# http protocol over TLS/SSL
https		443/udp
http-alt	8080/tcp	webcache	# WWW caching service
http-alt	8080/udp			# WWW caching service

NOTA: Observeu com el port 8080 és defineix com alternativa al servidor web. Utilitzat per servidors com Tomcat, alguns proxys com DansGuardian...

Configuració d'un site

Bàsicament hi ha 3 opcions a utilitzar:

/etc/apache2/conf.d

Suposeu que heu instal·lat l'aplicació web mediawiki a la carpeta /var/lib/mediawiki. Per activar aquest lloc web faríeu:

$ sudo joe /etc/apache2/conf.d/mediawiki.conf
Alias /mediawiki /var/lib/mediawiki 

Aquest és la configuració mínima, també podríeu afegir (per a més seguretat):

<Directory /var/lib/mediawiki/>
        Options +FollowSymLinks
        AllowOverride All
        order allow,deny
        allow from all
</Directory>

# some directories must be protected
<Directory /var/lib/mediawiki/config>
        Options -FollowSymLinks
        AllowOverride None
</Directory>
<Directory /var/lib/mediawiki/upload>
        Options -FollowSymLinks
        AllowOverride None
</Directory>

NOTA: L'exemple està copiat del fitxer que proporciona la mediawiki si s'instal·la des dels repositoris d'Ubuntu

Per aplicar els canvis cal recarregar el servidor Apache:

$ sudo /etc/init.d/apache2 reload
* Reloading web server config apache2                               [OK]

Ara ja podeu accedir a:

http://localhost/mediawiki

IMPORTANT: El fitxer ha de tenir la extensió .conf si voleu que funcioni.

/etc/apache2/sites-available

Els fitxers que col·loque a aquesta carpeta són configuracions de llocs web que es poden activar i desactiva amb les ordres a2ensite i a2dissite.

Suposeu que heu instal·lat l'aplicació web mediawiki a la carpeta /var/lib/mediawiki. Per activar aquest lloc web faríeu:

$ sudo joe /etc/apache2/sites-available/mediawiki

I posaríeu:

Alias /mediawiki /var/lib/mediawiki 

Aquest és la configuració mínima, també podríeu afegir (per a més seguretat):

<Directory /var/lib/mediawiki/>
        Options +FollowSymLinks
        AllowOverride All
        order allow,deny
        allow from all
</Directory>

# some directories must be protected
<Directory /var/lib/mediawiki/config>
        Options -FollowSymLinks
        AllowOverride None
</Directory>
<Directory /var/lib/mediawiki/upload>
        Options -FollowSymLinks
        AllowOverride None
</Directory>

Per activar el lloc cal fer:

$ sudo a2ensite mediawiki
Enabling site mediawiki.
Run '/etc/init.d/apache2 reload' to activate new configuration!

Aquesta comanda l'únic que fa és crear un enllaç simbòlic del fitxer /etc/apache2/sites-available/mediawiki a /etc/apache2/sites-enabled/mediawiki:

$ ls -la /etc/apache2/sites-enabled/mediawiki 
lrwxrwxrwx 1 root root 28 2010-03-21 11:33 /etc/apache2/sites-enabled/mediawiki -> ../sites-available/mediawiki

Tal i com us diu per aplicar els canvis:

$ sudo /etc/init.d/apache2 reload

Ara ja podeu accedir a:

http://localhost/mediawiki

/var/www

El que col·loqueu a la carpeta:

/var/www

Està directament disponible a la URL:

http://localhost

Es a dir si teniu instal·lada una aplicació web com mediawiki a:

/var/www/mediawiki

Només cal posar:

http://localhost/mediawiki

Per tal d'accedir-hi.

Subdominis

Per saber com crear subdominis amb l'Apache, al estil de http://subdomini.domini.net consulta:

Redireccions

Consulta Redireccions amb Apache per veure com crear redireccions del tipus http://www.domini.net/redireccio

.htaccess

L'htaccess es un fitxer ocult (.htaccess) de configuracio per usuaris de l'Apache molt potent. Aquest fitxer es pot posar en qualsevol directori per especificar comportaments especifics en la configuracio de l'Apache. Tambe s'ha de dir que nomes podran usar aquests tipus de fitxers els usuaris que a traves del fitxers de configuracio principal de l'Apache heredin permisos per fer-ho.

Que es pot fer des d'un .htaccess:

  • Especificar els nostres propis documents d'error
  • Afegir comportaments especifics segons tipus MIME
  • Definir variables d'entorn
  • Redirigir URLs
  • Re-escriure URLs
  • Restringir accessos

Aquests fitxers permeten configurar per directoris. Si un directori té un fitxer .htaccess les directives que trobem en aquest fitxers sobrescriuen la configuració general.

Normalment els fitxers .htaccess s'utilitzen per tal que els usuaris que no tenen accés als fitxers de configuració principals puguin variar la seva configuració (per exemple accedint via FTP). La directiva AllowOverride permet configurar quan els usuaris tenen privilegis per sobrescriure la configuració.

La directiva AccesFileName permet canviar el nom del fitxer .htaccess. Més informació sobre els fitxers .htaccess aquí.

Consulteu també

Directives principals

  • ServerRoot
  • User i Group
  • ErrorLog
  • Error pages
  • Server Pool directives


Moduls. Carpetes mods-enabled | mods-available

A la carpeta mods-available podem trobar tots els mòduls disponibles per defecte a Apache. Actualment per tal d'activar un modul només es necessari seguir els següents passos:

1) Crear un enllaç tou (soft link) als fitxers del mòdul que es troben a la carpeta mods-available a la carpeta mods-enabled. Per exemple per activar el modul de PHP:

$ ln -s /etc/apache2/mods-enabled/php4.load /etc/apache2/mods-available/php4.load
$ ln -s /etc/apache2/mods-enabled/php4.conf /etc/apache2/mods-available/php4.conf
NOTA: Hi ha una forma més sencilla de fer el mateix utilitzant les comandes  a2enmod i a2dismod.

2) Fer un reload del servidor

$ /etc/init.d/apache2 reload

Per conveni els fitxers .conf contenen les directives IfModule amb la configuració del modul i els fitxers .load contenen les directives LoadModule encarregades d'activar el mòdul.

Comandes a2enmod i a2dismod

Són unes aplicacions que en proporciona Apache 2 per facilitar la tasca d'activar mòduls (o tal com s'explica en l'apartat anterior, la creació de enllaços tous a les carpetes mods-enabled.)

El seu origen és:

  • a2: Apache 2
  • en: enable
  • dis: disable
  • mod: mòdul.

Exemple:

$ sudo a2enmod
Which module would you like to enable?
Your choices are: actions alias asis auth_anon auth_basic auth_dbm auth_digest auth_ldap authn_alias authn_anon authn_dbd authn_dbm authn_default  
authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgid cgi charset_lite da v_fs 
dav dav_lock dav_svn dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap imap include info ldap 
log_forensic mem_cache mime mime_magic negotiation php4 php5 proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_html proxy_http proxy rewrite 
setenvif speling ssl status suexec unique_id userdir usertrack version vhost_alias 
Module name? proxy
This module is already enabled!

També podem indicar directament el mòdul que volem activar

$ sudo a2enmod proxy

La comanda a2dismod es per desactivar mòduls

$ sudo a2dismod proxy

Hosts Virtuals. Carpetes sites-enabled | sites-available

Els Virtual Hosts tal i com varem comentar en l'apartat del servidor DNS proporcionen la capacitat de executar més d'un lloc web en una sola màquina.

Els hosts virtuals poden ser:

  • IP-based: significa que tenim una ip diferent per cada lloc web
  • Name-based: que implica que tenim més d'un nom de domini en una mateixa IP.

Directives principals

  • DocumentRoot
  • NameVirtualHost
  • ServerAlias
  • ServerName
  • ServerPath
  • <VirtualHost>

Per tal de comprovar la configuració dels hosts virtuals la següent comanda pot resultar útil:

$ /usr/local/apache2/bin/httpd -S

a2ensite i a2disite

Aquestes ordes faciliten la tasca d'activar/desactivar un lloc web a Apache. Funcionen amb els llocs webs que s'ha creat a la carpeta:

/etc/apache2/sites-available

Com diu el seu nom aquí es posen les configuracions de llocs disponibles al nostre servidor web. Que un llos estigui disponible no implica que estigui actiu. Per acticar-lo:

$ sudo a2ensite nom_lloc

On nom_llo és el nom del fitxer de configuració del lloc que em posat a la carpeta sites-available. Si no indiquem el nom del lloc:

$ sudo a2ensite 
Your choices are: default default-ssl webfaltes
Which site(s) do you want to enable (wildcards ok)?

Ens apareix un menú que ens permet escollir el lloc. El que fa la comanda és simplement crear un enllaç simbòlic a la carpeta:

/etc/apache/sites-enabled

Directoris web per usuari

Amb Apache és increïblement simple administrar les pàgines web dels usuaris d'un sistema Unix utilitzant el mòdul:

mod_userdir

i mitjançant l'ús de la directiva UserDir tenim diverses maneres d'administrar les carpetes d'usuari que contenen els continguts web.

L'accés via url a aquest fitxers és típicament http://www.webserver.org/~unixuserid. La configuració per defecte es pot canviar amb la directiva o utilitzant el mòdul mod_proxy . Control d'accés

El servei es pot activar amb les comandes:

$ sudo a2enmod userdir 
Enabling module userdir.
Run '/etc/init.d/apache2 restart' to activate new configuration!

$ sudo /etc/init.d/apache2 restart

Per desactivar-lo:

$ sudo a2dismod userdir 
Module userdir disabled.
Run '/etc/init.d/apache2 restart' to activate new configuration!

$ sudo /etc/init.d/apache2 restart

La configuració del mòdul es pot modificar al fitxer:

$ cat /etc/apache2/mods-available/userdir.conf 
<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root 

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

El servidor Apache d'Skolelinux ja porta configurat per defecte les carpetes web dels usuaris.

Els mòduls encarregats del control d'accés són mod_auth i mod_access. Existeixen múltiples alternatives per controlar l'accés al servidor web. La més comuna és mitjantçant el típic sistema usuari/password. Altre opcions són per exemple configurar l'accés via ldap i SSL (mod_auth_ldap) o utilitzant la infraestuctura de clau pública PKI.

Mòdul Rewrite i SSL

SSLOptions +StrictRequire
SSLRequireSSL
ErrorDocument 403 https://URL_PATH_SEGUR

Configuració de SSL

És configura utilitzant el mòdul mod_ssl. Permet utilitzar xifratge segur. El port estàndard és el 443 (consulteu /etc/services). L'accés a pàgines web segures és fa canviant l'esquema de la URL (concretament el protocol):

http:// --> https://

Ubuntu 9.04 i noves versions del paquet ssl-cert

Al activar el mòdul ssl:

$ sudo 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!

Si fem cas del que ens comenta, hem de fer:

$ sudo gunzip /usr/share/doc/apache2.2-common/README.Debian.gz
$ sudo cat /usr/share/doc/apache2.2-common/README.Debian

NOTA: Sembla ser que a Ubuntu 9.10 no hi ha aquest fitxer README? Al menys a alguna màquina m'he trobat que el fitxer no hi era

El text que ens interessa és:

Enabling SSL
------------

To enable SSL, type (as user root): 
 
	a2ensite default-ssl
	a2enmod ssl

If you want to use self-signed certificates, you should install the ssl-cert
package (see below). Otherwise, just adjust the SSLCertificateFile and
SSLCertificateKeyFile directives in /etc/apache2/sites-available/default-ssl to
point to your SSL certificate. Then restart apache:
  
	/etc/init.d/apache2 restart

The SSL key file should only be readable by root, the certificate file may be
globally readable. These files are read by the Apache parent process which runs
as root. Therefore it is not necessary to make the files readable by the
www-data user. 


Creating self-signed certificates
---------------------------------

If you install the ssl-cert package, a self-signed certificate will be
automatically created using the hostname currently configured on your computer.
You can recreate that certificate (e.g. after you have changed /etc/hosts or
DNS to give the correct hostname) as user root with:

	make-ssl-cert generate-default-snakeoil --force-overwrite

To create more certificates with different host names, you can use 

	make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /path/to/cert-file.crt

This will ask you for the hostname and place both SSL key and certificate in
the file /path/to/cert-file.crt . Use this file with the SSLCertificateFile
directive in the apache config (you don't need the SSLCertificateKeyFile in
this case as it also contains the key). The file /path/to/cert-file.crt should
only be readable by root. A good directory to use for the additional
certificates/keys is /etc/ssl/private .

Certificats autosignats (self-signed certificates)

El certificat s'ha creat sol amb el nom del host que apareix al fitxer /etc/hosts. Es pot tornar a crear el certificat amb l'ordre:

$ sudo apt-get install ssl-cert
$ sudo make-ssl-cert generate-default-snakeoil --force-overwrite

Snakeoil és un terme que s'utilitza per indicar que un producte o sistema criptogràfic que no és prou segur o és un sistema fals.

Per crear certificats per altres noms de host:

$ make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /path/to/cert-file.crt

Per tant l'únic que cal fer és:

$ sudo a2ensite default-ssl
$ sudo /etc/init.d/apache2 reload

El fitxer de configuració del Host Virtual és:

$ cat /etc/apache2/sites-available/default-ssl | more
<IfModule mod_ssl.c>
<VirtualHost _default_:443> 
	ServerAdmin webmaster@localhost
 
	DocumentRoot /var/www
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/ssl_access.log combined

	Alias /doc/ "/usr/share/doc/"
	<Directory "/usr/share/doc/">
		Options Indexes MultiViews FollowSymLinks
		AllowOverride None
		Order deny,allow
		Deny from all
		Allow from 127.0.0.0/255.0.0.0 ::1/128
	</Directory>

 	#   SSL Engine Switch:
	#   Enable/Disable SSL for this virtual host.
	SSLEngine on

 	#   A self-signed (snakeoil) certificate can be created by installing
	#   the ssl-cert package. See
	#   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
	#   If both key and certificate are stored in the same file, only the
	#   SSLCertificateFile directive is needed.
	SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
	SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

	#   Server Certificate Chain:
	#   Point SSLCertificateChainFile at a file containing the
	#   concatenation of PEM encoded CA certificates which form the
	#   certificate chain for the server certificate. Alternatively
	#   the referenced file can be the same as SSLCertificateFile
	#   when the CA certificates are directly appended to the server
	#   certificate for convinience.
	#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt

	#   Certificate Authority (CA):
	#   Set the CA certificate verification path where to find CA
	#   certificates for client authentication or alternatively one
	#   huge file containing all of them (file must be PEM encoded)
	#   Note: Inside SSLCACertificatePath you need hash symlinks
	#         to point to the certificate files. Use the provided
	#         Makefile to update the hash symlinks after changes.
	#SSLCACertificatePath /etc/ssl/certs/
	#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt

 	#   Certificate Revocation Lists (CRL):
	#   Set the CA revocation path where to find CA CRLs for client
	#   authentication or alternatively one huge file containing all
	#   of them (file must be PEM encoded)
	#   Note: Inside SSLCARevocationPath you need hash symlinks
	#         to point to the certificate files. Use the provided
	#         Makefile to update the hash symlinks after changes.
 	#SSLCARevocationPath /etc/apache2/ssl.crl/
 	#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl
	#   Client Authentication (Type):
	#   Client certificate verification type and depth.  Types are
	#   none, optional, require and optional_no_ca.  Depth is a
	#   number which specifies how deeply to verify the certificate
	#   issuer chain before deciding the certificate is not valid.
	#SSLVerifyClient require
	#SSLVerifyDepth  10

	#   Access Control:
	#   With SSLRequire you can do per-directory access control based
	#   on arbitrary complex boolean expressions containing server
	#   variable checks and other lookup directives.  The syntax is a
	#   mixture between C and Perl.  See the mod_ssl documentation
	#   for more details.
	#<Location />
	#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
	#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
	#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
	#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
	#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
	#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
	#</Location>

	#   SSL Engine Options:
	#   Set various options for the SSL engine.
	#   o FakeBasicAuth:
	#     Translate the client X.509 into a Basic Authorisation.  This means that
	#     the standard Auth/DBMAuth methods can be used for access control.  The
	#     user name is the `one line' version of the client's X.509 certificate.
	#     Note that no password is obtained from the user. Every entry in the user
	#     file needs this password: `xxj31ZMTZzkVA'.
	#   o ExportCertData:
	#     This exports two additional environment variables: SSL_CLIENT_CERT and
	#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
 	#     server (always existing) and the client (only existing when client
 	#     authentication is used). This can be used to import the certificates
 	#     into CGI scripts.
 	#   o StdEnvVars:
 	#     This exports the standard SSL/TLS related `SSL_*' environment variables.
 	#     Per default this exportation is switched off for performance reasons,
 	#     because the extraction step is an expensive operation and is usually
 	#     useless for serving static content. So one usually enables the
 	#     exportation for CGI and SSI requests only.
	#   o StrictRequire:
	#     This denies access when "SSLRequireSSL" or "SSLRequire" applied even
	#     under a "Satisfy any" situation, i.e. when it applies access is denied
	#     and no other module can change it.
	#   o OptRenegotiate:
	#     This enables optimized SSL connection renegotiation handling when SSL
	#     directives are used in per-directory context.
	#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
	<FilesMatch "\.(cgi|shtml|phtml|php)$">
		SSLOptions +StdEnvVars
	</FilesMatch>
	<Directory /usr/lib/cgi-bin>
		SSLOptions +StdEnvVars
	</Directory>

	#   SSL Protocol Adjustments:
	#   The safe and default but still SSL/TLS standard compliant shutdown
	#   approach is that mod_ssl sends the close notify alert but doesn't wait for
	#   the close notify alert from client. When you need a different shutdown
	#   approach you can use one of the following variables:
	#   o ssl-unclean-shutdown:
	#     This forces an unclean shutdown when the connection is closed, i.e. no
	#     SSL close notify alert is send or allowed to received.  This violates
	#     the SSL/TLS standard but is needed for some brain-dead browsers. Use
	#     this when you receive I/O errors because of the standard approach where
	#     mod_ssl sends the close notify alert.
	#   o ssl-accurate-shutdown:
	#     This forces an accurate shutdown when the connection is closed, i.e. a
	#     SSL close notify alert is send and mod_ssl waits for the close notify
	#     alert of the client. This is 100% SSL/TLS standard compliant, but in
	#     practice often causes hanging connections with brain-dead browsers. Use
	#     this only for browsers where you know that their SSL implementation
	#     works correctly.
	#   Notice: Most problems of broken clients are also related to the HTTP
	#   keep-alive facility, so you usually additionally want to disable
	#   keep-alive for those clients, too. Use variable "nokeepalive" for this.
	#   Similarly, one has to force some clients to use HTTP/1.0 to workaround
	#   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
	#   "force-response-1.0" for this.
	BrowserMatch ".*MSIE.*" \
		nokeepalive ssl-unclean-shutdown \
		downgrade-1.0 force-response-1.0

</VirtualHost>
</IfModule>

Creació del certificat

Comanda apache2-ssl-certificate

$ sudo apache2-ssl-certificate
Country Name (2 letter code) [GB]:ES
State or Province Name (full name) [Some-State]:BARCELONA
Locality Name (eg, city) []:BARCELONA
Organization Name (eg, company; recommended) []:ICE UPC
Organizational Unit Name (eg, section) []:ICE UPC
server name (eg. ssl.domain.tld; required!!!) []:localhost
Email Address []:
NOTA: Ummm! Desapareguda a les noves versions d'apache2 a Debian i Ubuntu. Hi han bugs pujats al launchpad d'Ubuntu.

make-ssl-cert:

És una comanda proporcionada pel paquet ssl-cert:

$ dpkg -S make-ssl-cert
ssl-cert: /usr/sbin/make-ssl-cert

Si no el tenim instal·lat l'instal·lem:

$ sudo apt-get install ssl-cert

$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/certificat.pem

Sinó existeix la carpeta /etc/apache2/ssl la creem amb la comanda. El creador de certificats ens preguntarà per les dades del certificat (web del certificat, correu de l'administrador, dades i localització de l'entitat i/o empresa, etc.)

$ sudo mkdir /etc/apache2/ssl

Creació del certificat amb la comanda openssl:

NOTA: Aquesta comanda és el que acaba utilitza la comanda make-ssl-cert
$ apt-get install openssl
$ sudo mkdir /etc/apache2/ssl
$ cd /etc/apache2/ssl
$ sudo openssl req -new -x509 -nodes -out certificat.pem -keyout certificat.pem -days 365

Podeu veure un exemple a l'article sobre Ldap.

Exemple de certificat:

$ sudo cat /etc/apache2/ssl/certificat.pem 
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC/SYMqTRcei0a86vxz+0faQQjb9xLTuX8uSmbopRfM/G8OVLFk
AnBfUIgUy/zFz1bivlh6GPNNHO2ReXqitXVYqrbaTkM/FXByZ02uBBoJ/aBll/42
yYfIn54q215YNixSrQUHepgoN+UlSxu8s367d5vg2HkpHx+h/Ak/vSCS1QIDAQAB
AoGAKS/L5SzKIJJ+fajfCJ3/P5gnLy2IyTu0jaQJemgpssJbqytDMrRvu6YcVtYB
LBpTq+iuJkP/BwiGgn80j5oglMIoh2jzw+uAn7rNN6xlZ9yAZR6zdxK+QRnOSfvT
coJgElWFU198qR0P1Xt9U21tJx6ZpHZ114G/tyurghMcTEECQQDx77p0UU30ZPau
7dWFYjqwGDLumIN72TIVs8i7Y0JIlG0h6IV+6HgbHAQYLPMErVCuv5libWim4GvV
yvgL52VxAkEAymgRnpBEtC8Jgmc9K9gwN+ufSyO9mrA0m5jI83PsL9ZBa9dHwEoH
Ms+UDJ7f1q7wConSvAN6z/V3XMiZLKLBpQJBALUNBaeOQJwoAkMeUK+ktu6Y7WSI
Vb0U6No81HcG7M+L46+AZoZ2SYtgB+Bfou1ZFgvv7kUuQya+w3QWlFG0NMECQEnr
I7Qiv9SF8RUcmuxuMX3aoPwR+2aIv02ryIeQaEs4FgBKSLvizSozQMAzLU/751IR
71IWez2DSaoq4DW64rkCQHZG7vfSz2QGL7241V0E+hMHj7nQAIQzMxLA7Bp248jg
M3FkJIEdSW+c3EPT8hCuBMHonngnSx6w4LpO5TJVAtI=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICmzCCAgQCCQC2Tf8cnxndTjANBgkqhkiG9w0BAQUFADCBkTELMAkGA1UEBhMC
RVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMRAwDgYD
VQQKEwdJQ0UgVVBDMRAwDgYDVQQLEwdJQ0UgVVBDMRIwEAYDVQQDEwlsb2NhbGhv
c3QxIjAgBgkqhkiG9w0BCQEWE3dlYm1hc3RlckBsb2NhbGhvc3QwHhcNMDcxMDE2
MDk1OTI0WhcNMDcxMTE1MDk1OTI0WjCBkTELMAkGA1UEBhMCRVMxEjAQBgNVBAgT
CUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMRAwDgYDVQQKEwdJQ0UgVVBD
MRAwDgYDVQQLEwdJQ0UgVVBDMRIwEAYDVQQDEwlsb2NhbGhvc3QxIjAgBgkqhkiG
9w0BCQEWE3dlYm1hc3RlckBsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
MIGJAoGBAL9JgypNFx6LRrzq/HP7R9pBCNv3EtO5fy5KZuilF8z8bw5UsWQCcF9Q
iBTL/MXPVuK+WHoY800c7ZF5eqK1dViqttpOQz8VcHJnTa4EGgn9oGWX/jbJh8if
nirbXlg2LFKtBQd6mCg35SVLG7yzfrt3m+DYeSkfH6H8CT+9IJLVAgMBAAEwDQYJ
KoZIhvcNAQEFBQADgYEAH+5wIyEIacSlpzmwlyoe7JO/7G1rLletdIQ/lVoVkKcY
92lg8uZgBbwm88c72E34WdE99fvnjE9f0Z2WjefltmjDL+XSW/gz3Mt9Lh2UvJ7T
9HabIvD7bzeHv6xhQfwhq2pclcNtpnpbeVcTJe207FHaYdzGVsp1FKKjsws6M8A=
-----END CERTIFICATE-----
NOTA: El fitxer del certificat ha de ser un fitxer secret i que només pugui llegir qui pertoqui ja que conté les claus privades!!!. 

Ara cal configurar Apache per tal d'utilitzar el certificat:

El primer és indicar a Apache que començarem a utilitzar el port segur:

$ gksu gedit /etc/apache2/ports.conf

I afegim la línia:

Listen 443

Ara anem a crear un lloc que utilitza xifratge SSL. Copiem la configuració per defecte d'un lloc Apache:

$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

I ara editem el nou fitxer ssl:

$ gksu gedit /etc/apache2/sites-available/ssl

Afegim les següents línies (per exemple després de la línia ServerAdmin):

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/certificat.pem

I modifiquem el port a 443:

NameVirtualHost *:443
 <VirtualHost *:443>

Ara només cal activar el site, asegurar-nos que el mòdul ssl esta actiu i recarregar Apache:

 $ sudo a2ensite
Which site would you like to enable?
Your choices are: aMule aMule~ awstats default ssl
Site name? ssl
$ sudo a2enmod ssl
This module is already enabled!
$ sudo /etc/init.d/apache2 reload
* Reloading web server config... 

Si hem comés algun error de sintaxi ens serà indicat al fer el reload.

Ara ja podem accedir al nou lloc web. Per exemple:

https://localhost

I consultar el certificat:

Fitxer:SSLCertificate.jpg

Fitxer:SSLCertificate1.jpg

Recursos:

Forçar SSL

Opció 1

Es pot fer utilitzar el mod_rewrite i forçant a afegir la S a totes les URLs d'una carpeta amb el fitxer .htacces:

Al fitxer .htacces d'una carpeta concreta (p. ex. carpeta carpeta1 del domini www.domini.com) afegim:

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://www.domini.com/carpeta1/$1 [R,L]

Un altre forma és:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


NOTA: Cal tenir el mòdul rewrite actiu

$ sudo a2enmod rewrite
$ sudo /etc/init.d/apache2 restart

NOTA 2: Tal com s'indica a la documentació d'Apache Cal posar les directives Rewrite dins d'un del següents contextos:

  • server config
  • virtual host
  • directory
  • .htaccess

Si no es fa així simplement no funciona però sense donar cap error.

Compta amb forçar SSL

Opció 2

SSLRequireSSL
ErrorDocument 403 https://www.iescopernic.com/departament

I es pot combinar amb autenticació amb:

SSLRequireSSL
ErrorDocument 403 https://www.iescopernic.com/departament
AuthType Basic
AuthName "Members Only"
AuthUserFile /var/www/departament/.htpasswd
require valid-user

Documentació Apache

El paquet apache-docs instala la documentació d'apache disponible a la web. La documentació oficial és la "biblia" de configuració i treball amb apache.

Mòdul Server-status

Aquest mòdul és necessari per tal que funcionin les ordres:

$ apache2ctl status
$ apache2ctl fullstatus

Si no tenim instal·lat el mòdul:

$ sudo apache2ctl fullstatus
w3m: Can't load http://localhost:80/server-status.

Per activar el mòdul:

$ sudo a2enmod status
$ sudo /etc/init.d/apache2 reload

NOTA: També cal tenir en compte que apache2ctl s'intenta connectar al port 80. Si el servidor està escoltant a un altre port l'ordre no funcionarà

Si us dona l'error:

$ sudo apache2ctl fullstatus
/usr/sbin/apache2ctl: 124: www-browser: not found

Aleshores és que necessiteu un navegador web per línia d'ordre com p. ex. lynx:

$ sudo apt-get install lynx

La configuració del mòdul la trobeu al fitxer:

$ sudo cat /etc/apache2/mods-enabled/status.conf 
<IfModule mod_status.c>
#
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Uncomment and change the ".example.com" to allow
# access from other hosts. 
# 
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from localhost ip6-localhost
#    Allow from .example.com
</Location>

</IfModule>

Com podeu veure per defecte només hi podeu accedir des de localhost. Un exemple de fullstatus:

$ sudo apache2ctl fullstatus
                      Apache Server Status for localhost

  Server Version: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4 with
         Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g

  Server Built: Apr 1 2009 16:03:30
    __________________________________________________________________

  Current Time: Wednesday, 27-Jan-2010 07:06:17 CET
  Restart Time: Friday, 22-Jan-2010 16:34:38 CET
  Parent Server Generation: 5
  Server uptime: 4 days 14 hours 31 minutes 39 seconds
  1 requests currently being processed, 4 idle workers

.__._.W.._......................................................
................................................................
................................................................
................................................................

  Scoreboard Key:
  "_" Waiting for Connection, "S" Starting up, "R" Reading Request,
  "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
  "C" Closing connection, "L" Logging, "G" Gracefully finishing,
  "I" Idle cleanup of worker, "." Open slot with no current process

  PID Key:
  28715 in state: _ ,   28714 in state: _ ,   28716 in state: _
  28712 in state: W ,   28713 in state: _ ,
    __________________________________________________________________

  To obtain a full report with current status information you need to use
  the ExtendedStatus On directive.
    __________________________________________________________________

  SSL/TLS Session Cache Status:
  cache type: SHMCB, shared memory: 512000 bytes, current sessions: 0
  subcaches: 32, indexes per subcache: 133
  index usage: 0%, cache usage: 0%
  total sessions stored since starting: 0
  total sessions expired since starting: 0
  total (pre-expiry) sessions scrolled out of the cache: 0
  total retrieves since starting: 0 hit, 0 miss
  total removes since starting: 0 hit, 0 miss
    __________________________________________________________________


   Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4 with Suhosin-Patch
   mod_ssl/2.2.11 OpenSSL/0.9.8g Server at localhost Port 80

Encara podem obtenir més informació amb:

$ sudo joe /etc/apache2/apache2.conf

I afegint al final:

ExtendedStatus On

Apliqueu els canvis:

$ sudo /etc/init.d/apache2 reload

I monitoritzeu en temps real el que fa el vostre servidor:

$ watch -n 1 apache2ctl fullstatus

Veureu una nova secció:

Srv  PID  Acc  M CPU  SS Req Conn Child Slot  Client            VHost                     Request
0-3 32522 0/5/ _ 0.00 3  0   0.0  0.01  0.01 localhost servidor-web.iesebre.com GET /server-status HTTP/1.0
          5
1-3 32523 0/4/ W 0.00 0  0   0.0  0.00  0.00 127.0.0.1 servidor-web.iesebre.com GET /server-status HTTP/1.0
          4
2-3 32524 0/4/ _ 0.00 7  0   0.0  0.00  0.00 localhost servidor-web.iesebre.com GET /server-status HTTP/1.0
          4
3-3 32525 0/4/ _ 0.00 6  0   0.0  0.00  0.00 localhost servidor-web.iesebre.com GET /server-status HTTP/1.0
          4
4-3 32526 0/4/ _ 0.31 4  0   0.0  0.01  0.01 localhost servidor-web.iesebre.com GET /server-status HTTP/1.0
          4
5-3 32626 0/1/ _ 0.00 5  1   0.0  0.00  0.00 localhost servidor-web.iesebre.com GET /server-status HTTP/1.0
         1


Recursos:

apache2-utils

$ dpkg -L apache2-utils | grep bin
/usr/bin
/usr/bin/dbmmanage
/usr/bin/htdbm
/usr/bin/htdigest
/usr/bin/htpasswd
/usr/sbin
/usr/sbin/ab
/usr/sbin/checkgid
/usr/sbin/logresolve
/usr/sbin/rotatelogs
/usr/sbin/htcacheclean
/usr/sbin/check_forensic
/usr/sbin/split-logfile

dbmmanage

Del manual:

dbmmanage - Manage user authentication files in DBM format
$ man dbmmanage

htdbm

Manipula la base de dades de paraules de pas dbm

$ man htdbm

htdigest

Manipula la base de dades de paraules de pas digest

$ htdigest

htpasswd

Manipula la base de dades de paraules de pas d'Apache

$ htpasswd

NOTA: En alguns sistemes com Open Suse, l'ordre és htpasswd2

Consulteu:

Apache#Autenticaci.C3.B3_B.C3.A0sica.htpasswd

ab

Permet fer tests de Benchmarking (rendiment) a un servidor Apache

$ man ab

checkgid

TODO

logresolve

TODO

rotatelogs

TODO

htcacheclean

TODO

check_forensic

TODO

split-logfile

TODO

Redireccions. mod-alias

Tot un domini:

Redirect / http://www.new-domain.com/

o

Redirect permanent / http://www.new-domain.com/

Una pàgina

Redirect /web-page.html http://www.new-domain.com/destination-web-page.html

Seguretat

Consulteu:

Vegeu també el curs de Seguretat en Xarxes.

Google analytics

Visitors

$ sudo apt-cache show visitors
...
Size: 78082
Description: fast web server log analyzer
 Visitors is a very fast web server log analyzer designed to be run from
 the command line, with support for text or html output and real-time
 statistics generation.  It can handle most web server logs including
 Apache access logs and is very easy to use: no configuration file and
 no database are required.  It can also generate visual path analysis
 graphs using Graphviz.
...
$ sudo apt-get install visitors

piwik

awstats

Per instal·lar awstats disposem d'un paquet als repositoris ubuntu:

$ sudo apt-get install awstats

Awstats és bàsicament un programa Perl, que s'executa des d'Apache com un CGI. Els fitxers executables són:

$ dpkg -L awstats | grep bin
/usr/lib/cgi-bin
/usr/lib/cgi-bin/awstats.pl

Per començar a utilitzar awstats cal configurar-lo. Els fitxers de configuració són:

$ dpkg -L awstats | grep etc
/etc
/etc/cron.d
/etc/cron.d/awstats
/etc/awstats
/etc/awstats/awstats.conf
/etc/awstats/awstats.conf.local

Tot i que podem editar directament els fitxers awstats.conf o awstats.conf.local, lo habitual és crear un nou fitxer per cada domini que vulguem monitoritzar l'accés. Per exemple si volem monitoritzar el domini nomdomini.com:

$ sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.nomdomini.com.conf

Ara modifiquem el fitxer per adaptar la configuració

$ sudo joe /etc/awstats/awstats.nomdomini.com.conf

Joe és un editor de text per línia de comandes. Les opcions que modificarem són:

Amb la comanda:

$ cat /etc/awstats/awstats.iescopernic.com.conf | grep -v '#'

Podem veure només les línies no comentades i saber quines són les opcions de la nostra configuració.

El següent pas és executar per primer cop awstats per que processi els fitxers de log:

$ /usr/lib/cgi-bin/awstats.pl -config=nomdomini.com -update

El que posem al paràmetre config depèn del nom del fitxer de configuració (és el que hi ha entre awstats. i .conf).

Per consultar les estadístiques hem de cridar el CGI awstats.pl, invocant el paràmetre config amb el valor del nostre domini.

Exemple d'accés:

http://www.nomdomini.com/awstats/awstats.pl?config=nomdomini.com

o

http://acacha.dyndns.org/awstats/awstats.pl?config=acachadyndns.org

Recursos.

Configuració de cron

Cal verificar que el que posa a el cron de awstats coincideix amb la nostra configuració

$ sudo cat /etc/cron.d/awstats
0,10,20,30,40,50 * * * * root [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.acachadyndns.org.conf -a -r /var/log/apache2/access.log ]  
&& /usr/lib/cgi-bin/awstats.pl -config=acachadyndns.org -update >/dev/null


TroubleShooting Awstats

Estadístiques de Sistemes Operatius i navegadors no funcionen a Ubuntu

Per solucionar aquest problema cal canviar el paràmetre LogFormat de 4 a 1

$ sudo joe /etc/awstats/awstats.acachadyndns.org.conf
...
LogFormat=1

Recursos:

Restringir l'accés a continguts

Autenticació Bàsica.htpasswd

Els mòduls d'Apache encarregats del control d'accés són:

  • mod_auth: Control d'accés per usuaris.
  • mod_access: Directives Allow, Deny i Access.

Aquests mòduls normalment venen activats per defecte. Hi ha diferents formes de controlar l'accés a continguts (usuari i contrasenya, IP d'origen, etc.). En aquest apartat només veurem el control d'accés per usuari i contrasenya.

Primer cal crear un fitxer que contingui l'usuari i la contrasenya amb la comanda htpasswd:

$ htpasswd -c /home/usuari/passwords usuari
New password: ******
Re-type new password: ******
Adding password for user usuari

NOTA: En alguns sistemes, com per exemple Open Suse, l'ordre és htpasswd2

Els fitxer /home/usuari/passwords tindrà un aspecte similar al següent:

$ cat /home/usuari/passwords 
usuari:L6opAN9WmaD5g

On, com podeu veure la contrasenya esta encriptada. Podeu afegir més usuaris executant:

htpasswd  ~/passwords nou_usuari

El resultat és:

$ cat passwords 
usuari:L6opAN9WmaD5g
nou_usuari:VG9SRttu4DUok

Un cop tenim aquest fitxer creat l'hem d'utilitzar. Podem controlar l'accés a un directori amb la directiva Directory:

<Directory /path/directori/a/protegir>
 AuthType Basic
 AuthName "Restricted Files"
 AuthUserFile /home/usuari/passwords
 Require user usuari
</Directory>

El /path/directori/a/protegir ha de ser el directori on tenim les pàgines web a les que volem afegir un control d'accés.

Aquestes línies es poden afegir a qualsevol dels possibles fitxers de configuració d'Apache.

Un altre opció és utilitzar els fitxers .htacces. Cal tenir en compte que per que funcionin aquests fitxers és necessari tenir la directiva AllowOverride ben configurada :

AllowOverride All

Aquests fitxers es col·loquen directament a la carpeta que es vol controlar l'accés amb el següent contingut:

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /home/usuari/passwords
Require user usuari


NOTA: No oblideu de recarregar el servidor Apache després de qualsevol modificació dels fitxers de configuració

NOTA De SEGURETAT: Tot i que la contrasenya estigui encriptada és recomanable configurar els permisos del fitxer per ser de només lectura per al propietari i per l'usuari Apache.

Recursos:

Script per a crear automàticament un fitxer htppaswd des de una llista d'usuaris i paraules de pas

$ cat addAlumniToProxy.sh
#/bin/bash

#File with teachers information, space separated
SUDO=/usr/bin/sudo
ALUMNI_FILENAME=alumni.csv
HTPASSWD=/usr/bin/htpasswd
HTPASSWD_FILE=/etc/squid3/users

EMERGENCY_USER=alumne
EMERGENCY_PASSWD=guest

#Create File with initial user
echo "Creating emergency user on file ${HTPASSWD_FILE}..."
${SUDO} ${HTPASSWD} -b -c ${HTPASSWD_FILE} ${EMERGENCY_USER} ${EMERGENCY_PASSWD}

cat $ALUMNI_FILENAME | while read line;
 do
      USER=`echo $line | awk '{print $1}'`
      PASSWD=`echo $line | awk '{print $2}'`
      
      echo "Adding user ${USER} to file ${HTPASSWD_FILE}..."
      ${SUDO} ${HTPASSWD} -b ${HTPASSWD_FILE} ${USER} ${PASSWD} 
 done 

Scripts de gestió del fitxer de paraules de pas

Autenticació Digest.htpasswd

Hi ha un altre mètode de control d'accés a recursos més segur ja que envia les paraules de pas xifrades amb un HASH MD5. Aquest mètode és el Mètode Digest. El funcionament és equivalent al bàsic però cal utilitzar el mòdu

auth_digest

Per activar-lo:

$ sudo a2enmod auth_digest

I tornem a iniciar Apache:

$ sudo /etc/init.d/apache2 restart

Per crear els fitxers de contrasenyes hem d'utilitzar la comanda:

$ sudo htdigest -c /usr/local/apache/passwd/digest realm username

I configurar amb apache:

AuthType Digest
AuthName "Private"
AuthDigestFile /usr/local/apache/passwd/digest
Require user drbacchus dorfl

Recursos

Recursos i enllaços d'interès

Reverse Proxy

Mòduls relacionats:

  • mod_proxy:
  • mod_proxy_http:
  • mod_proxy_ftp:
  • mod_proxy_connect:
  • mod_proxy_ajp:
  • mod_proxy_balancer:
  • mod_cache, mod_disk_cache, mod_mem_cache:
  • mod_proxy_html:
  • mod_headers:
  • mod_deflate:

Podeu consultar un exemple pas a pas de Reverse Proxy amb NTOP Ntop.Reverse_Proxing_NTOP.

Un altre exemple (TODO, és un copiar i enganxar directa d'un correu de Mario Guerrero del Vidal i Barraquer de Tarragona):


t'adjunto el fitxer que tenim a l'insti sobre el proxy invers, que comentàvem l'altre dia.
Els passos a seguir són:
1. Instal·lar Apache2
2. Activar els moduls mod_proxy:
    sudo a2enmod proxy_connect
    sudo a2enmod proxy_http
3. Modificar l'arxiu /etc/apache2/sites-enabled/000-default  

En aquest arxiu veuràs, per exemple, que cap al 192.168.1.5 redirigeix un munt de carpetes, i seria més fàcil posar directament / ; però d'aquesta forma tenim restringit  
l'accés exterior a proves que anem fent en aquesta màquina .
A la 192.168.1.6 hi ha carpetes i al final un /asp per accedir directament a l'ordinador, i que no calgui donar permisos al proxy.
I la .7 directament és la pàgina web.

<VirtualHost *:80> # ServerAdmin webmaster@localhost

# DocumentRoot /var/www # <Directory /> # Options FollowSymLinks # AllowOverride None # </Directory> # <Directory /var/www/> # Options Indexes FollowSymLinks MultiViews # AllowOverride None # Order allow,deny # allow from all # </Directory>

Fitxer:

# Put this in the main section of your configuration (or desired virtual host, if using Apache virtual hosts)
	ProxyRequests Off
	ProxyPreserveHost On
	 
	<Proxy *>
		Order deny,allow
		Allow from all
	</Proxy>

	#192.168.1.5 
	ProxyPass /agnitio http://192.168.1.5/agnitio
	ProxyPassReverse /agnitio http://192.168.1.5/agnitio
	ProxyPass /bdadm http://192.168.1.5/bdadm
	ProxyPassReverse /bdadm http://192.168.1.5/bdadm
	ProxyPass /cisco http://192.168.1.5/cisco
	ProxyPassReverse /cisco http://192.168.1.5/cisco
	ProxyPass /documents-09-10 http://192.168.1.5/documents-09-10
	ProxyPassReverse /documents-09-10 http://192.168.1.5/documents-09-10
	ProxyPass /manteniment http://192.168.1.5/manteniment
	ProxyPassReverse /manteniment http://192.168.1.5/manteniment
	ProxyPass /moodle-08-09 http://192.168.1.5/moodle-08-09
	ProxyPassReverse /moodle-08-09 http://192.168.1.5/moodle-08-09
	ProxyPass /moodle-09-10 http://192.168.1.5/moodle-09-10
	ProxyPassReverse /moodle-09-10 http://192.168.1.5/moodle-09-10
	ProxyPass /siestta http://192.168.1.5/siestta
	ProxyPassReverse /siestta http://192.168.1.5/siestta
	#192.168.1.6
	ProxyPass /biblioteca http://192.168.1.6/biblioteca
	ProxyPassReverse /biblioteca http://192.168.1.6/biblioteca
	ProxyPass /meteo http://192.168.1.6/meteo
	ProxyPassReverse /meteo http://192.168.1.6/meteo
	ProxyPass /queixes http://192.168.1.6/queixes
	ProxyPassReverse /queixes http://192.168.1.6/queixes
	ProxyPass /qualitat http://192.168.1.6/qualitat
	ProxyPassReverse /qualitat http://192.168.1.6/qualitat
	ProxyPass /intranet http://192.168.1.6/intranet
	ProxyPassReverse /intranet http://192.168.1.6/intranet
	#para poder acceder directamente al ordenador	
	ProxyPass /asp http://192.168.1.6
	ProxyPassReverse /asp http://192.168.1.6
	#192.168.1.7
	ProxyPass / http://192.168.1.7/
	ProxyPassReverse / http://192.168.1.7/

#<Location /moodle>
# 	Order allow,deny
#	Allow from all
#</Location> 

#	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
#	<Directory "/usr/lib/cgi-bin">
#		AllowOverride None
#		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
#		Order allow,deny
#		Allow from all
#	</Directory>

#	ErrorLog /var/log/apache2/error.log 
 
	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

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

#     Alias /doc/ "/usr/share/doc/"
#    <Directory "/usr/share/doc/">
#        Options Indexes MultiViews FollowSymLinks
#        AllowOverride None
#        Order deny,allow
#        Deny from all
#        Allow from 127.0.0.0/255.0.0.0 ::1/128
#    </Directory> 

</VirtualHost>


Recursos:

Load balancing

Consulteu l'article Load Balancing.

Pound

Balance ng

Consulteu l'article Load Balancing.


Vegeu també

TroubleShooting

Mime Types

Apache gestiona els Mime Types amb:

$ sudo cat apache2.conf | grep Type
TypesConfig /etc/mime.types

El fitxer /etc/mime.types és proporcionat pel paquet mime-support:

$ dpkg -S /etc/mime.types
mime-support: /etc/mime.types


Address already in use Error starting Apache

Normalment quan succeïx això es que hi ha algun servei que esta utilitzant el port 80 (o si esta configurat SSL el port segur 453).

Podem consultar amb netstat els processos que estan utilitzant el port 80 amb (sempre som a root o amb sudo):

$netstat -lnp | grep '0.0.0.0:80'
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     28908/apache2

o

$ sudo netstat -lnp | grep ":::80"
tcp6       0      0 :::80                   :::*                    LISTEN     11146/apache2

o

$ sudo netstat -lnp | grep apache
tcp6       0      0 :::80                   :::*                    LISTEN     11146/apache2


Es poden consultar tots els processos que utilitzen ports amb:

$netstat -A inet -lnp
 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:901             0.0.0.0:*               LISTEN     1567/rpc.statd
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     1396/mysqld
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN     23231/cyrmaster
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN     23231/cyrmaster
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     1049/portmap
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     28908/apache2
tcp        0      0 127.0.0.1:2000          0.0.0.0:*               LISTEN     23231/cyrmaster
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN     1593/perl
tcp        0      0 0.0.0.0:113             0.0.0.0:*               LISTEN     29343/inetd
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     29343/inetd
tcp        0      0 0.0.0.0:4949            0.0.0.0:*               LISTEN     24120/munin-node
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     1557/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN     1531/master
udp        0      0 0.0.0.0:898             0.0.0.0:*                          1567/rpc.statd
udp        0      0 0.0.0.0:10000           0.0.0.0:*                          1593/perl
udp        0      0 0.0.0.0:111             0.0.0.0:*                          1049/portmap
udp        0      0 0.0.0.0:895             0.0.0.0:*                          1567/rpc.statd

també pot ser útil la comanda lsof:

$ lsof -i tcp:80
COMMAND   PID     USER   FD   TYPE   DEVICE SIZE NODE NAME
apache2 28908     root    3u  IPv4 39523014       TCP *:www (LISTEN)
apache2 28909 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
apache2 28910 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
apache2 28911 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
apache2 28912 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
apache2 28913 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
apache2 28914 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
apache2 28914 www-data   16u  IPv4 39523033       TCP 10.0.3.234:www->virtual27.nebula.fi:41747 (CLOSE_WAIT)
apache2 28915 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
apache2 28916 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
perl    29337 www-data    3u  IPv4 39523014       TCP *:www (LISTEN)
perl    29337 www-data   16u  IPv4 39523033       TCP 10.0.3.234:www->virtual27.nebula.fi:41747 (CLOSE_WAIT)


totes aquestes comandes s'ha d'utilitzar per identificar els numeros de processos PID. Amb

$ps aux

Un cop tenim els números de procés que estan utilitzant el port 80 els hem de matar amb:

$ kill -9 numerodeproces1 numero_proces2

CheatSheets (xuletes)

Vegeu també

Que enllaça aquí

Consulteu Especial:Enllaços/Apache.

Enllaços externs

Eines de l'usuari