Apache
De Guifi.net - Wiki Hispano
Apache es un servidor HTTP (web) libre con licencia propia llamada Apache: http://www.apache.org/licenses/ Presenta entre otras características mensajes de error altamente configurables, bases de datos de autenticación y negociado de contenido.
Instalación
aptitude install apache2
Módulos
La arquitectura del servidor Apache es muy modular. El servidor consta de una sección core y mucha de la funcionalidad que podría considerarse básica para un servidor web es provista por módulos.
Habilitar o deshabilitar los módulos
a2enmod a2dismod
Módulos utilizados en BlogMail soft
rewrite
Reescritura de direcciones servidas (generalmente utilizado para transformar páginas dinámicas como php en páginas estáticas html para hacer la navegación más sencilla y organizada para la usuaria o para engañar a los navegantes o a los motores de búsqueda en cuanto a cómo fueron desarrolladas estas páginas).
php4 o php5
Páginas dinámicas en el lenguaje de scripts PHP.
vhost_alias
Crea servidores virtuales en nombres de subdominio
NameVirtualHost 217.149.150.61 <VirtualHost 217.149.150.61> Servername doc.blogmail.cc DocumentRoot /home/blogmail/public_html/documents </VirtualHost>
Para habilitar o deshabilitar un servidor virtual:
a2ensite a2dissite
Otros módulos interesantes
- ssl - Comunicaciones Seguras vía TLS.
aptitude install openssl ssl-cert
openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem a2enmod ssl
- dav - Soporte del protocolo WebDAV (RFC 2518).
- deflate - Compresión transparente con el algoritmo deflate del contenido enviado al cliente.
- auth_ldap - Permite autentificar usuarias contra un servidor LDAP.
- proxy_ajp - Conector para enlazar con el servidor Jakarta Tomcat de páginas dinámicas en Java (servlets y JSP).
- perl - Páginas dinámicas en Perl.
- python - Páginas dinámicas en Python.
Publicar los /home's
# a2enmod userdir
Por defecto la configuración del módulo requiere que cada usuaria cree un subdirectorio llamada exactamente public_html. Ese directorio debería tener al menos permisos de lectura y ejecución para el servidor web. O sea:
~$ mkdir public_html ~$ chmod 0750 public_html ~$ chown user.www-data public_html
Reiniciamos el servidor apache.
/etc/init.d/apache2 force-reload
Virtualhost que redireccionen a otro equipo
Muy útil cuando tenemos varias máquinas servidoras web a partir de una misma IP pública. Una de ellas hace de servidora de entrada (la que tiene el puerto 80) y le pasa a la otra las peticiones de los dominios que le toquen:
Usaremos los módulos de proxy de apache
# a2enmod proxy proxy_connect proxy_ftp proxy_http
y crearemos un virtual host en la servidora de entrada que haga que cualquien petición que vaya a los dominios pertinentes vayan a la otra máquina: en el ejemplo los dominio son [1] y [2] y la otra máquina tiene la IP local 192.168.1.5.
# vim /etc/apache2/sites-available/home.nusepas.com
<VirtualHost *:80> ServerName 213.98.143.33 ServerAlias home.nusepas.com ProxyRequests off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPreserveHost On ProxyPass / http://192.168.1.5/ ProxyPassReverse / http://192.168.1.5/ </VirtualHost>
Habilitamos el virtual host:
# a2ensite home.nusepas.com
Y recargamos apache
# /etc/init.d/apache2 reload
Listo.
Nota: otra forma de hacer esto es con el servidor de proxy-cache squid configurado como proxy reverso.
Comandos de interés
- Escuchar el tráfico en el puerto 80:
- Ver qué servidor web tiene una máquina desde fuera:
nmap -sV -p 80 nombre_o_IP_de_máquina
- Ver qué máquinas tienen un servidor web dentro de un rango
nmap -sT -p 80 192.168.2.*
Administración
- Ver los procesos Apache que están coriendo en la máquina
ps ax | grep apache | wc -l
En orwell con casi 1GB de RAM tiene 32 procesos de media, bajando el php.ini a 17MB y deshabilitando bm-comments-post.php se llegan a tan sólo 20
En nodreams, con 512MB de RAM tiene 19 procesos de media
Errores y soluciones
- Error
#/etc/init.d/apache2 start (98)Address already in use: make_sock: could not bind to address [::]:80 no listening sockets available, shutting down Unable to open logs
- Solución:
- Esperar a que apache corte todas las conexiones que tenía abiertas, se pueden monitorear escuhando el tráfico en el puerto 80, esta solución puede hacer esperar varios minutos, pero evita el trauma de tener que reiniciar (tal vez no reinicie)
- Si lo anterior no funciona, tal vez exista un problema entre varias versiones de apache u otros servidores escuchando en el puerto 80, en tal caso desinstala de forma que sólo quede uno o cambia los puertos de los demás
Enlaces externos
- Optimizar [un huevo] el Apache (en máquinas potentes con mucha carga, como Menéame), por Ricardo Galli
- Optimizando Apache por Alex Sancho
- Trucos para asegurar apache