Post on 20-Jan-2016
CONFIGURACIÓN DE APACHE
- Desde el terminal sudo apt-get update
- Desde el terminal sudo apt-get install apache2
- Para ver la versión, desde el terminal: apache2 –v
- Hacemos netstat –ltn para ver el puerto por el que escucha.
- Ver “Configuración y administración de servidores web.pdf”
(http://manpages.ubuntu.com/manpages/hardy/es/man8/netstat.8.html)
apache2.conf En este archivo se encuentra la configuración del servidor web apache.
conf.d Directorio en donde están los archivos de configuración de apache.envvars Contiene la información del usuario, grupo Y PID del servicio de apache.
httpd.conf Era el archivo de configuración, pero todavía está siendo ocupado en la distribución Red Hat y derivados.
mods-available Directorio en se depositan los módulos que se agregan al servidor apache.mods-enabled Directorio donde se encuentranlos módulos activados y disponibles
port.conf Archivo de configuración en donde se especifica el puerto de escucha, por default es 80 (http) y 443 (https).
sites-available Directorio en donde se encuentran los archivos de configuración de sitios o páginas web que configuremos.
sites-enabled Directorio en donde se habilita los sitios web.
1
Archivo apache2.conf y directivas más importantes del archivo
El archivo de configuración está compuesto por directivas que le indican al servidor cómo
actuar. Cada vez que haces un cambio en el archivo de configuración es necesario
reiniciar el servidor para que surta efecto.
Ejemplo de archivo de configuración completo:
http://livenudefrogs.com/~anubis/apache/httpd-conf.shtml
Guía rápida de referencia de directivas
http://httpd.apache.org/docs/2.2/es/mod/quickreference.html
Contexto
http://httpd.apache.org/docs/2.2/mod/directive-dict.html#Context
La configuración de Apache se basa en una serie de directivas que tienen posibilidad de
ser usadasdentro de un contexto, es decir, un ámbito en el que pueden ser aplicadas. Hay
cuatro posibilidadesque no son excluyentes:
configuración global del servidor,
secciones para configurar los host virtuales,
secciones de configuración de directorios
archivos .htaccess
ServerRoot "/etc/apache2"Indica el directorio raíz de la instalación de Apache. No se refiere al directorio donde
colocaremos las páginas web.
Esta directiva solo se modificaría en caso de mover el servidor Apache a otra ubicación en
la estructura de directorios y habría que modificar más cosas. Lo mejor es elegir bien
desde el principio dónde instalaremos Apache.
2
TimeoutSon los segundos que se esperan las respuestas durante la comunicación. Por defecto es
300 segundos y se recomienda no cambiarlo.
IfModuleEs un contenedor que permite establecer determinadas opciones solo si se ha cargado un
módulo determinado. Si se escribe ! (cierre de exclamación)antes del nombre del módulo
se ejecutan las opciones si no se ha cargado el módulo.
<IfModulemod_mime_magic.c>
MIMEMagicFileconf/magic
</IfModule>
Listen
Acepta peticiones entrantes solamente en los puertos y en las combinaciones de puertos
y direcciones que se especifiquen. El servidor responderá a las peticiones de todas las
direcciones y puertos que se incluyan.
Por ejemplo, para hacer que el servidor acepte conexiones tanto en el puerto 80 como en
el puerto 81:
Listen80
Listen 81
Para hacer que el servidor acepte conexiones en dos interfaces de red y puertos
específicos,
Listen 192.170.2.1:80
Listen 192.170.2.5:81
LoadModuleIndica qué módulos dinámicos cargar.
ServerAdmin
Esta opción permite configurar la dirección del administrador del servidor web que se
mostrará si el servidor genera una página de error.
3
ServerAdminquique@daw.enlaces
ServerNameServerName www.ejemplo.es:80
DocumentRootIndicamos el directorio raíz donde colocaremos las páginas web. Podemos crear
subdirectorios.
DocumentRoot "/www/paginas"
Hay que usar también la directiva Directory.
<Directory "/www/paginas">
…
DirectoryEsta opción se usa para configurar cómo se comportará y qué se permitirá en cada
directorio al que tiene acceso el servidor Apache. Esta configuraciónse aplica a un
directorio y los subdirectorios que contiene si no se sobreescribe en otra definición sobre
un directorio más concreto.
Nos encontramos dos veces esta etiqueta. La primera hace referencia al directorio raíz y
se configura siempre con opciones muy restrictivas. Los subdirectorios heradan la
configuración d elos directorios padres y sobreescriben su configuración.
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory "/www/paginas">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from
</Directory>
4
UserDirIndica si se debe permitir que cada usuario de nuestro sistema tenga su propia carpeta
personal en el servidor web y establece cuál será la ruta desde el servidor para acceder a
dicha carpeta. Hay que activar el módulo Userdir.
UserDir public_html
Es la opción más frecuente ya que crearía en nuestro servidor rutas para cada usuario. Si
por ejemplo hay un usuario Sergio y otro Maria tendríamos las rutas:
www.servidordeprueba.es/~Sergio
www.servidordeprueba.es/~Maria
Y cada usuario tendría en su carpeta personal un subdirectorio public_html para publicar
lo que quisiera. Como se puede ver el argumento detrás de UserDir indica cómo se
llamará ese subdirectorio.
UserDirdisable
Es la opción por defecto y hace que los usuarios no tengan su propio espacio.
En caso de activar los directorios de usuarios se recomienda deshabilitar el de root
Userdirdisabledroot
DirectoryIndexEspecifica la página por defecto que se buscará al acceder a un directorio de nuestro sitio.
DirectoryIndex index.html
Puede establecerse una sucesión de archivos y el servidor mostrará la primera que
encuentre del orden establecido en la directiva.
DirectoryIndex index.html, index.htm, inicio.html, inicio.htm
Si accedemos a un directorio que no contiene ninguno de los archivos especificados,
Apache crea dinámicamente un archivo que lista los contenidos.
ErrorLogEsta directiva es muy importante ya que indica dónde ubicar el archivo de registro de los
errores que se produzcan en el servidor. El lugar por defectoes
%ServerRoot%/logs/error_log. Muchos administradores crean una partición
exclusivamente para situar este tipo de archivos y así tener másprobabilidades de poder
consultarlos en caso de un error fatal.
5
Ejemplo: ErrorLog /var/log/apache2/error_log
AddLanguageApache puede devolver contenidos en diferentes idiomas dependiendo de la
configuración del idioma del navegadorWeb.
AddLanguage es .esAddLanguage da .dk
Language PriorityPermite establecer una prioridad de los idiomas en caso de que no se especifique uno o
haya un empate en la negociación por diferentes motivos. Por defecto viene en inglés,
pero en la mayoría de los casos nosotros querremos establecerlo en español.
LanguagePriority es en fr de
AddCharsetEs igual que AddLanguagepero para añadir nuevos juegos de caracteres.
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
AddDefaultCharsetDebería establecerse al juego de caracteres que mejor se ajuste a la zona en la que se sitúa el servidor y al idioma del contenido. En caso de no estarseguros es mejor dejarlo como está.AddDefaultCharset ISO-8859-1
- Al instalar apache, se habrá creado la carpeta /var/www/
- Dentro de la carpeta se encuentra el archivo index.html, que es la página que el
servidor sirve por defecto.
- Para acceder, desde el navegador http://localhost
- Intentamos modificar el contenido de index.html sin sudo (o root). No nos deja
- Hacemos ls -l /var. Comprobamos q el propiertario es root
- Cambiamos el directorio de propietario o cambiamos los permisos:
sudochwon–R quique /var/www/
- Cambiamos index.html y ponemos “Servidor Apache Quique”.
- Visualizamos los cambios
6
- Detenemos el servicio y vemos que no funciona
/etc/init.d/apache2 stop
- Volvemos a arrancar el servicio y comprobamos que funciona otra vez
/etc/init.d/apache2 start
- En vez de reiniciar el servidor apache cuando hacemos cambios (sudo
/etc/init.d/apache2 restart) podemos usar sudo /etc/init.d/apache2 graceful (coge
los cambios sin que se pare el servidor).
- Accedemos desde la máquina real.
- Creamos otra página llamada despliegue.html y accedemos a ella.
- Crea dentro de /var/www/ otra carpeta llamada ciclos, y mete dentro una página
llamada daw.html y otra llamada dam.html.
Desde el navegador accede a localhost
Desde el navegador accede a localhost/ciclos
Desde el navegador accede a localhost/ciclos/daw.html
Ficheros a servir por defecto (DirectoryIndex)
- Modifica index.html y llámalo indice.html. Accede a localhost.
- Comenta la línea “Options Indexes…”. Accede a localhost.
- Descomenta la línea anterior.
- En sites-available/default añadimos la directiva DirectoryIndex con el valor
despliegue.html dentro de <Directory /var/www>. Accede.
¿Qué ocurrirá si accedemos a localhost/ciclos? ¿por qué?
- Dentro de ciclos crea una página que se llame despliegue.html y como contenido
pon “Despliegue ciclos”.
¿Qué ocurrirá si accedemos a localhost/ciclos? ¿por qué?
Haz que al entrar en localhost/ciclos sirva automáticamente la página
daw.html.
Códigos de error (ErrorDocument)
7
Por defecto, el log de errores se encuentra en /var/log/apache2/error_log.
Para indicar que deben mostrar los errores:
En sites-avalaible/default
Hacer que cuando se quiera acceder a una página que no existe, salga la siguiente
página:
http://st.depositphotos.com/1803622/1397/i/450/dep_13975203-Unhappy-smiley-
icon.jpg
Hacer que en vez del error “Forbidden” se muestre una página propia guardada en
/var/www/otros/
(Códigos de error de apache:http://members.tripod.com/r_castaneda0/)
Redireccionamiento
<Directory /var/www/…>
Redirect /pagina_a_redireccionar /pagina_redireccionada
</Directory>
Problema con las tildes, ñ, etc
Para que muestre bien las tildes:
Solución fácil pero peor:
/etc/apache2/apache2.conf añadimos
AddDefaultCharset UTF-8
Solución buena:
http://principiatechnologica.wordpress.com/2013/01/08/problemas-html-acentos-y-
enes-charset-utf-8-iso-8859-1/
8
MULTILENGUAJE
http://www.novell.com/communities/node/4755/configuring-apache-multiple-language-support-sles-10
Creamos index.html.es en español e index.html.en en inglés.
<Directory /var/www/…>
…
AddLanguaje es .es
AddLanguaje en .en
</Directory>
CONFIGURACIÓN DE HOST VIRTUALES
Permiten alojar distintos dominio en un mismo servidor web
Los hosts virtuales permiten alojar varios dominios en una sóla máquina (respondiendo a
una misma IP).Si no tendría que haber tantos servidores como sitios web, lo que es
imposible.
Usando host virtuales, podemos conseguir que en el caso de que sea invocado el dominio
“www.dominio1.es” vaya a leer los archivos en el directorio que hayamos configurado
como DocumentRoot para el host virtual www.dominio1.es, y consecuentemente los
mande al navegador de quien lo haya pedido, y en el caso que sea convocado como
“www.dominio2.com”, vaya a leer los archivos a otro directorio. Es decir, habrá un
directorio (DocumentRoot) para cada uno de los servidores virtuales que definamos.
9
Todo aquello que no esté incluido en la definición de cada virtualhost se heredará de la
configuración principal: apache2.conf (/etc/apache2/apache2.conf). Así si se quiere
definir una directiva común en todos los virtualhost no se debe modificar cada uno de los
virtualhost introduciendo esa directiva, sino que debes definir esa directiva en la
configuración principal del servidor web Apache, de tal forma que todos los virtualhost
heredarán esa directiva. Por ejemplo la directiva Timeout 300, que establece la directiva
Timeout igual a 300 segundos (indica el número de segundos antes de que se cancele un
conexión por falta de respuesta), al estar en el archivo apache2.conf la heredarán todos
los virtualhosts que no la sobre escriban .
Hay tres tipos: basados en nombres, en IP y en puertos. Solo veremos la primera.
- En /etc/apache2/sites-available es donde se definen los virtualhosts. Podemos
poner todos los virtual host en un solo fichero o cada virtual host en un fichero
distinto.
- Es habitual configurar registros de error independientes para cada sitio (habrá que
crear la estructura de directorios). Esto se hace dentro de la configuración de cada
sitio virtual dejando el principal para el servidor en sí.
El general se guarda en /var/log/apache2/log
- Se pueden usar varias directivas Listen para especificar varias direcciones y
puertos de escucha. El servidor responderá a peticiones de cualquiera de esas
direcciones y puertos
PASOS:
- Creamos el directorio donde se guardarán las páginas del dominio- Creamos el archivo con la definición del virtualhost
Ejemplo de fichero configuración virtualhost para www.dominio1.es
10
NameVirtualHost ip_servidor:puerto
DirectoryIndex …
<VirtualHost IP_Servidor_Web:puerto>
DocumentRoot /var/www/dominio1/
ServerName www.dominio1.com.
ServerAlias dominio.com dominio1.es www.dominio1.es
…
</VirtualHost>
- La directiva NameVirtualHost debe ir en uno solo de los archivos que se
encuentren en /sites-available/, esto le indica a apache que se están utilizando
varios hostvirtuales.
- Guardamos el fichero dominio1.es en /etc/apache2/sites-avalaible/dominio1.es
- Creamos enlace simbólico a /etc/apache2/sites-enabled (lo podemos hacer con la
orden a2ensite dominio1.es)
- Como no tenemos DNS, en /etc/hosts ponemos nuestro dominio y los alias:
Ip_servidor www.dominio1.es
Ip_servidor dominio1.com
- Si configuramos servidor DNS, al poner el dominio también saldría la página.
Directiva Opciones Función
Options None No establece ninguna opción.
All Establece todas las opciones.
IndexesPermite visualizar páginas índice existentes en el directorio.
FollowSymlinks Permite seguir los enlaces simbólicos del directorio.
ExecCGI Admite la ejecución de scripts CGI.
AllowOverride NoneNo establece ninguna opción. El servidor no leerá los archivos .htaccess
11
AllEstablece todas las opciones. Permite usar las directivas especificadas en .htaccess
FileInfo Muestra la información de los archivos del directorio.
Order allow,denyPrimero aplicará los permisos de allow y luego los de deny.
deny,allowPrimero aplicará los permisos de deny y luego los de allow.
Allow fromall Admite cualquier acceso al directorio.
from IPAdmite cualquier acceso al directorio proveniente de la dirección IP indicada.
from dominioAdmite cualquier acceso al directorio desde el dominio especificado.
Deny fromall Deniega cualquier acceso al directorio.
from IPDeniega cualquier acceso al directorio proveniente de la dirección IP indicada.
from dominioDeniega cualquier acceso al directorio desde el dominio especificado.
Ejercicios Configuración Virtualhost
Haz que el servidor sirva dos sitios web distintos (www.dominio1.com y
www.dominio2.com). Configúralos en dos archivos diferentes.
Para el dominio1 la página de inicio será dominio1.html y para el dominio2, será
dominio2.html.
Se podrá acceder a ellos escribiendo en el navegador www.dominio1.es,
www.dominio1.clase y dominio1.es. (Lo mismo para el dominio2).
Cada uno de ellos tendrá su propio archivo con el log de errores.
Accede a una página del dominio1 que no exista y comprueba el log.
Crea dos nuevos host virtuales en un solo archivo (llámalos dominio3.es y
dominio4.es), con sus respectivas páginas de inicio, que se llamarán index.html y
en las que pondrá dominio3 y dominio4.
12
Haz las modificaciones necesarias para que el dominio3.es se sirva por el puerto
81 y el dominio4.es se sirva por el 82.
Cuando accedamos a localhost, se mostrará automáticamente una página
llamada elección.html desde la que podremos navegar al dominio1, 2, 3 o 4.
MÓDULOS DE APACHE
Apache está compuesto por módulos, algunos de ellos vienen activados por
defecto, y otros se tendrán que activar si nos conviene.
Los módulos se utilizan para agrupar funcionalidades de Apache muy concretas.
Algunos se instalan por defecto en el servidor y otros los activa y configura el
usuario cuando los necesita.
En /etc/apache2/ hay 2 carpetas: mods-avalible (módulos disponibles) y mods-
enabled (módulos activados).
Cuando arranca apache, cargará los módulos que están activados (los del mods-
enabled).
Cuando se activa un módulo, se crea un enlace simbólico (una especie de acceso
directo) de los archivos correspondientes del directorio mods-avalaible a los del
mods-enabled.
Cada módulo está compuesto por 2 archivos: el de configuración
(nombre_modulo.conf) y el de carga (nombre_modulo.load).
13
Usu1Pag1.html
Pag2.htmlUsu2
Pag1.html
Pag2.html
- Para habilitarlos también podemos hacerlo creando enlaces simbólicos
MÓDULO USERDIR
- Instalamos el módulo userdir. El módulo userdir permite que cada usuario tenga
un directorio personal en el servidor, que suele ser:
/home/usuario/public_html
14
Comandos
- sudo a2enmod userdir (activar módulo)
- sudo a2dismod userdir (desactivar módulo)
- /etc/int.d/apache2 graceful (o restart)
- Vamos a /etc/apache2/mods.enabled y vemos que están userdir.conf y
userdir.load.
Si queremos cambiar el directorio por defecto (public_html) por otra, añadimos la
directiva
UserDir nombre_directorio
Tendremos que crear la carpeta en el home
Luego tendremos que hacer q lo haga automáticamente para cada usuario
del sistema: http://www.cristiantala.cl/configuracion-de-ubuntu-server-
con-apache2-y-modulo-userdir/
/etc/skel
- El usuario “usu1” crea el directorio /home/usu1/public_html, y mete su página
web index.html.
- Al activar el módulo userdir, se permite que todos los usuarios menos root (por
temas de seguridad) puedan acceder a páginas web guardadas en un
subdirectorio con su propio nombre poniendo como URL
http://www.dominioquique.com/~usu1, donde dominioquique será el dominio (o
localhost si estamos en local) y usu1 será un nombre de usuario del sistema.
De esta manera se accede al public_html del usuario y no al directorio /var/www/,
al que accederíamos si pusiéramos sólo www.dominioquique.com.
15
- Si queremos acceder sin necesidad de poner ~, necesitamos definir un alias:
Comandos
- Alias /usu1 /home/usu1/public_html
- Reiniciamos apache
SITIOS WEB NO ANÓNIMOS
Restringen el acceso a recursos alojados en el servidor.
Hay distintos módulos y maneras de hacerlo, vamos a emplear el módulo auth_basic. El
problema es que la información viaja sin cifrar.
Directivas:
AuthUserFile: indica la ruta donde se encuentra el fichero que contiene la lista de
usuarios y contraseñas. Estos usuarios y contraseñas deberán haber sido creados
anteriormente mediante el uso del comando htpasswd.
AuthUserFile /var/www/seguridad/usuarios
AuthGroupFile: lo mismo que el anterior pero con el nombre de los grupos de cuentas de
usuario que usará apache para la autentificación. Sirve para organizar los usuarios en
grupos y controlar su acceso de una manera más cómoda.
AuthGroupFile /var/www/seguridad/grupos
16
Require user: indica cuales de los usuarios de AuthUserFile tienen acceso al directorio
especificado en la directiva Directory. El usuario debe estar contenido en el fichero
indicado en la directiva AuthUserFile.
Si queremos que sean todos pondremos Require valid-user.
Require user quique
Require group: lo mismo pero para los grupos. El grupo debe estar contenido en el
fichero indicado a través de la directiva AuthGroupFile.
Require group profesores
AuthType: indica el tipo de autentificación: Basic (más común), Digest (más robusto.
Requiere que el navegador lo soporte).
AuthType Basic
AuthName: Indica el mensaje que aparecerá al usuario cuando se intente acceder a las
páginas protegidas.
AuthName Escriba su nombre y contraseña
17
Ejemplo autenticación mediante usuarios:
1. En /var/www/ creamos directorio “protegido” donde meteremos las páginas web
protegidas.
2. Creamos el fichero htpasswd (donde estarán los usuarios y sus contraseñas) en, por
ejemplo /etc/apache2/seguridad :
htpasswd ruta_fichero_AuthUserFile nombre_usuario
htpasswd –c /etc/apache2/seguridad/.usuarios quique (el –c solo es necesario la
primera vez para que cree el archivo, así no es necesario crear el archivo de
antemano).
Vemos que se ha creado el archivo y que está encriptada la contraseña.
Normalmente la archivo de usuario:contraseña (en nuestro caso usuarios) se le
llama .htpasswd (con el punto delante se oculta).
htpasswd /var/www/protegido/.usuarios ana
3. En /etc/apache2/sites-avalaible, añadimos lo siguiente:
<VirtualHost…>
<Directory /var/www/protegido>
AuthType Basic #tipo de autentificación
AuthName “Escribe usuario y contraseña para entrar” #mensaje
AuthUserFile /etc/apache2/seguridad/.usuarios #ruta del fichero
Require user quique ana #usuarios permitidos
</Directory>
</VirtualHost>
18
Hay que tener cuidado con este tipo de autentificación porque al poner un usuario
válido guarda los datos en la caché del navegador y aunque salgamos del directorio
protegido se puede volver a acceder a él sin necesidad de que pida la contraseña hasta
que expire la caché.
Ejemplo autenticación mediante grupos:
4. Creamos en /etc/apache2/seguridad el archivo grupos y lo rellenamos según lo
siguientenombre_grupo: lista_usuarios_separados_por_espacios
Ej: finanzas: ana pepe …
informatica: quique …
5. <VirtualHost…>
<Directory /var/www/protegido>
AuthType Basic #tipo de autentificación
AuthName “Escribe usuario y contraseña para entrar” #mensaje
AuthUserFile /etc/apache2/seguridad/.usuarios #ruta del fichero
Require user quique ana #usuarios permitidos
AuthGroupFile /etc/apache2/seguridad/grupos #ruta fichero con los grupos
Require group infromatica
</Directory>
</VirtualHost
Al acceder, si ponemos un nombre de usuario y contraseña de un usuario perteneciente a
un grupo que esté autorizado entrará.
19
Autenticacion con mysql
http://www.unlugarenelmundo.es/2010/03/18/autenticacion-en-apache-y-ii-digest-y-
con-mysql/
CONTROL DE ACCESO A MÁQUINAS
Cuando un usuario hace una petición HTTP al servidor, este puede atenderla o no en
función de la máquina desde la que se hace la solicitud. Esto nos puede servir para limitar
el acceso a determinadas máquinas si no disponemos de un firewall (por ejemplo).
Tiene que estar activado el módulo authz_host (está activado por defecto).
Se usan las directivas Allow y Deny para aceptar o rechazar el acceso en función del
nombre o dirección de la maquina desde la que se hace la petición.
La directiva Order indica en qué orden se leerán las directivas Allow y Deny.
Primero se evalúa el que está primero y luego el segundo.
Ej: (Más información en la documentación de las directivas allow, deny, order)
Deny from 192.168.1.4 evita que pueda entrar el equipo con esa ip
-------------------------------------------------------------------------------------------------------
Deny from pc10.aula1.com evita que puedan entrar desde el equipo pc10 del aula1.
-------------------------------------------------------------------------------------------------------
Para especificar una red allow from 192.168.1
-------------------------------------------------------------------------------------------------------
Para especificar varios equipos allow from 192.168.1.2 192.168.1.10
-----------------------------------------------------------------------------------------------------
Order deny,allow Primero evalúa las restricciones
Deny from all No permite a ningún ordenador
20
Allow from 192.168.1.4 Permite al 192.168.1.4, luego solo servirá la página a éste
ordenador
---------------------------------------------------------------------------------------------------------
Ej: Vamos a evitar el acceso a las páginas que estén dentro de /var/www/html a todos los
ordenadores excepto a uno con ip 192.168.2.70
Abrimos /etc/apache2/sites-avalaible/default
Modificamos el archivo para que quede de la siguiente forma:
<VirtualHost…>
<Directory /var/www/html>
AuthType Basic#tipo de autentificación
…
Order deny,allow
Allow 192.168.2.70
Deny from all
</Directory>
</VirtualHost>
/etc/init.d/apache2 graceful
Se podría acceder a la página desde cualquier ordenador excepto desde el 192.168.2.70
Ej: limita a todos los equipos que entren en el directorio donde se encuentran los archivos
de contraseñas (/var/www/protegidos)
21