Apache/ca
De Guifi.net - Wiki Català
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
- 1 Instal·lació d'Apache
- 2 Control del servei Apache. Execució, parada i reconfiguració d'Apache
- 3 Configuració d'Apache
- 4 Configuració d'un site
- 5 Subdominis
- 6 Redireccions
- 7 .htaccess
- 8 Directives principals
- 9 Moduls. Carpetes mods-enabled | mods-available
- 10 Hosts Virtuals. Carpetes sites-enabled | sites-available
- 11 Directoris web per usuari
- 12 Mòdul Rewrite i SSL
- 13 Configuració de SSL
- 14 Documentació Apache
- 15 Mòdul Server-status
- 16 apache2-utils
- 17 Redireccions. mod-alias
- 18 Seguretat
- 19 Google analytics
- 20 Visitors
- 21 piwik
- 22 awstats
- 23 Restringir l'accés a continguts
- 24 Recursos i enllaços d'interès
- 25 Reverse Proxy
- 26 Load balancing
- 27 Vegeu també
- 28 TroubleShooting
- 29 CheatSheets (xuletes)
- 30 Vegeu també
- 31 Enllaços externs
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: Posant un fitxer configuració en aquest carpeta i reiniciant el servidor
- a2ensite/a2dissite: Guardant la configuració a /etc/apache2/sites-available
- /var/www: Aquesta és la carpeta per defecte ( a sistemes Debian) on es troben les aplicacions web del servidor.
- /etc/apache2/apache2.conf: POdeu posar la configuració directament a aquest fitxer. OPCIÓ NO RECOMANDA
/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
- http://www.askapache.com/2006/htaccess/apache-ssl-in-htaccess-examples.html
- http://comesfa.xin.cat/Manual:Apache/mod_rewrite
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:
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:
- https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/ServeisXarxa/SeguApache1.odp
- https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/ServeisXarxa/SeguApache2.odp
- https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/ServeisXarxa/SeguApache3.odp
- https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/ServeisXarxa/SeguApache4.odp
- https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/ServeisXarxa/SeguApache5.odp
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 awstats amb suexec.
- http://www.taletellin.selmaalabama.com/awstats/docs/awstats_tools.html
- http://wiki.koumbit.net/VersionControlService/SubVersion
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
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:
- http://httpd.apache.org/docs/1.3/howto/auth.html#intro
- http://www.yolinux.com/TUTORIALS/LinuxTutorialApacheAddingLoginSiteProtection.html
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
- Apache a la wikipedia (en)
- Apache a la wikipedia (es)
- Apache Software Foundation a la wikipedia
- Apache Software Foundation
- Página oficial del servidor Apache
- Documentació versio 2.0. També disponible en español.
- Documentació versio 1.3. També disponible en español.
- Estadísticas de uso de servidores web de Netcraft
- [http://personales.ya.com/abcd/linux/virtual_server/index.html Script creació automàtica Virtual Servers
- Alta_usuaris_per_accedir_a_un_login_de_apache
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
- http://www.howtoforge.com/high-availability-load-balancer-pound-keepalived-debian-etch
- http://www.howtoforge.com/high-availability-load-balancer-pound-keepalived-debian-etch
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)
- http://www.petefreitag.com/cheatsheets/apache/
- Apache quick Reference Card (pdf)
- mod_rewrite Cheat Sheet - PDF
- [htaccess Cheatsheet]
Vegeu també
Que enllaça aquí
Consulteu Especial:Enllaços/Apache.