Curso de Apache - Configuración avanzada Apache

5 - Configuración avanzada Apache


Curso gratis creado por Álex, el-brujo (el-hacker) .
04 Noviembre 2005
< anterior | 1 .. 3 4 5 6 7 .. 10 | siguiente >
ServerRoot "C:/Archivos de programa/Apache Group/Apache" --> donde esta instalado el Apache, y de donde cuelgan las demas carpetas.

PidFile logs/httpd.pid --> por si cerramos el apache mal nos lo guarda aqui.

Timeout 300 --> contra más grande sea, el apache no dara mensaje de timeout aunque tarde mucho en cargar una página.

MaxKeepAliveRequests 0 --> mejor ponerlo a 0 para ponerlo ilimitado.

KeepAliveTimeout 15 --> Número de segundos que se tiene que esperar un cliente para enviar otra peticion (mejor ponerlo bajo).

MaxRequestsPerChild 0 --> 0 para ilimitado.

Port 80 --> puerto por defecto del apache y de cualquier servidor web. Si pones otro puerto luego tendrás que escribir en el navegador ww.pepito.com:puerto

ServerAdmin alex@elhacker.net --> tu email

ServerName localhost --> tu ip, o mejor localhost sino tienes ip fija. En caso de tener dominio poner el nombre de tu dominio.

DocumentRoot "C:/web" --> donde tienes la web, es decir las paginas que quieres que se vean en el navegador.

Opciones de un directorio individual:

ALL --> todas las opciones excepto MultiViews

ExeCGI --> se permite la ejecuación de scripts cgi.

Includes --> se permiten includes

IncludesNOEXEC -> ser permiten includes pero no se precesan #exec ni #include

MultiViews --> permite al servidor seleccionar el documento que mejor responda  a la petición del cliente (para mas info --> http://www.apache.org/docs/content-negotation.html

SymLinkslfOwnerMatch --> permite al servidor seguir un enlace simbólico si el destino del enlace y el enlace son del mismo propietario.

<Directory />

Options FollowSymLinks

AllowOverride None

</Directory>

--> esto sirve para decirle que el Document Root (/) o sea c:/web no nos enseñe las carpetas ni su contenido, sino que coge el archivo que le decimos en directory index (luego lo veremos).

Si queremos que nos liste el contenido hay que comentarlo:

#<Directory />

# Options FollowSymLinks

# AllowOverride None

#</Directory>

Para que esto se entienda pongo un ejemplo:

Podemos "proteger" la carpeta images (tenemos que tener c:/web/images)

para que cuando alguien esriba http://localhost/images) no le muestre el contenido de esa carpeta (sale un Permission Deneid), pero eso no quiere decir que las imagenes que estan en ses directorio

no vayan a ser visible, si hacemos http://localhost/images/banner.gif si nos enseña el banner.

Ejemplo:

<Directory /images>

Options FollowSymLinks

AllowOverride None

</Directory>

Options FollowSymLinks --> se trata de permitir enlaces simbólicos, o sea si un directorio tiene tales permisos, los siguientes directorios que cuelguen heredan las misma configuración.

Haz pruebas para ver la diferencia porque no me he explicado muy bien...

<Directory "C:/Archivos de programa/Apache Group/Apache/htdocs"> --> escribe aquí lo mismo que en el document root, ya que son los permisos básicos y por defecto.

<IfModule mod_dir.c>

DirectoryIndex index.html index.php default.htm

AddType application/x-httpd-php .php

</IfModule>

Se pueden ir añadiendo una al lado de otra: index.php index.php3 ,etc o una debajo de otra

index.php

index.php3

index.shtml

En DirectoryIndex se definen las páginas que cogera por defecto, es decir:

Si existe c:/web/index.html nos coge por defecto esa página, asi que no hace falta poner http://localhost/index.html, sinó que basta con poner http://localhost (que nos llevará a index.html)

Y lo mismo pasa si hay carpetas, directorios, si en c:/web/pruebas/ hay un archivo llamado index.html nos coge ese por defecto

AddType application/x-httpd-php .php --> esto sirve para que interprete las paginas PHP

AddType application/x-httpd-php .php3 --> si queremos dar soporte        a PHP3.

También podenos usar .shtml, que algunos utilizan como si fueran un php.

AccessFileName .htaccess --> esto es una opción muy buena que tiene el apache que en un archivo .htaccess podemos configurar varias cosas, como si fuera el httpd.conf (muy útil en webhosting, ya que no podemos controlar la conf del apache....)

Para proteger los htaccess de miradas indiscretas, ponemos en el conf principal:

<Files .htaccess>

Order allow,deny

deny from all

</Files>

O mejor aún:

<Files ~ "^\.ht">

Order allow,deny

Deny from all

Satisfy All

</Files>

Son expresiones regulares, luego veremos algunos ejemplos.

Luego le podemos decir al htaccess

ErrorDocument 404 /notfound.html

También se le puede decir un directory index:

DirectoryIndex filename.html

Si queremos que un cgi se ejecute automáticamente:

DirectoryIndex /cgi-local/index.pl

También podemos utilizar la autentificación con HTTP con el Apache:

AuthUserFile "ruta"

<Limit GET>

requiere user login juan

</Limit>

(Abajo se explica completo)

ErrorLog logs/error.log --> para que logee los errores en la carpeta logs del apache.

#CustomLog logs/access.log combined --> guarda los accesos a la web en diferentes formato, sgún queramos unos datos u otros.

Puedes cambiar la ruta y guardar los logs en otro sitio, ya que suelen crecer mucho con webs grandes, llegando a tamaños de 1GB o más. Recuerda que en Linux en la carpeta dónde metas los logs debe ser de usuario "nobody" y grupo "nogroup" para que el apache pueda crear el archivo de logs y rellenarlo. Y si necesitas vaciarlo con algún prograna tipo awstats recuerda darle permisos de escritura 666.

#!c:/program files/perl/perl.exe --> aqui escribimos la ruta del perl, como que windows no lleva perl por defecto, deberemos bajarnos algun paquete, como Active Perl y aqui ponerle la ruta al perl.exe

Apache acepta Alias, y eso significa que podemos coger cualquier carpeta de nuestro ordenador y hacerla visible sin necesidad de que esa carpeta este en documentRoot

Me explico:

Si tenemos una carpeta con documentos en d:/documentos, y el documentRoot esta en c:/web, esa carpeta a priori no es visible, pero podemos hacer lo siguiente:

Alias /documentos/ "d:/documentos"

Y luego la protegemos:

<Directory "d:/documentos">

Options FollowSymLinks

AllowOverride None

</Directory>

A partir de este momento en http://localhost/documentos tendremos el contenido de d:/documentos

Podemos crear tantos alias como queramos.

Más cosas. Imáginemos que tenemos archivos .bak que no queremos que la gente los pueda ver, basta con decirle esto:

<Files ~ "/.bak$">

Order allow,deny

Deny from all

</Files>

ScriptAlias /cgi-bin/ "C:/Archivos de programa/Apache Group/Apache/cgi-bin/" --> Aqui definimos donde tendremos nuestros cgi's, no es mas que un alias pero con permisos especiales para ejecutar.

<Directory "C:/Archivos de programa/Apache Group/Apache/cgi-bin">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>

Importante poner esas opciones para proteger el directorio cgi-bin de miradas curiosas.

Dento de la carpeta C:/Archivos de programa/Apache Group/Apache/cgi-bin tenemos que meter los cgi's o pl's, y luego en el navegador se accede con http://localhost/cgi-bin/

También se le puede decir al Apache que cualquier cgi que vea, este dentro del ScriptAlias o no, lo ejecute, esto no es recomendable, pero por si acaso basta con decirle esto:

AddHandler cgi-script .cgi

También se le puede decir al apache que una página shtml la interprete como SSI (Server Side Inlcudes:

AddHandler server-parsed .shtml

<IfModule mod_negotiation.c>

LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw

</IfModule>

Propiedades del lenguaje, asi que mejor poner es al principio del todo:

LanguagePriority es en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca sv tw

ErrorDocument --> Tipos de errores.

200 OK

206 Partial content

301 Document moved permanently

302 Document found elsewhere

304 Not modified since last retrieval

400 Bad request

403 Access forbidden

404 Document not found

408 Request timeout

500 Internal server error

501 Request type not supported

Por ejemplo:

El error 404 es cuando un servidor no encuentra una pagina. Pues podemos hacer que cuando haya un 404 nos lleve a una pagina:

ErrorDocument 404 /error.htm

Y en la pagina error.htm pues escribimos lo que queramos, es un html normal.

Asi que cuando escribamos http://localhost/lo_que_sea, si lo_que_sea no existe, ya sea carpeta, html, zip, etc nos llevara automaticamente a la pagina error.htm

El 505 es cuando del servidor falla

Los directorios server-estatus y server-info están comentados por defectos y mejor dejarlos así sino sabes lo que tocas. Pero si lo descomentas asegurate de poner el allow from bien, es decir localhost o tu ip. Tampco es que sea informacion super-delicada, pero si es informacion privada.

#<Location /server-info>

# SetHandler server-info

# Order deny,allow

# Deny from all

# Allow from localhost

#</Location>

El server status te dice el estado del servidor, los procesos en espera, las conexiones enviando información, etc, el uptime del apache, el tráfico total enviado, etc.

Si lo quieres más completo, con las peticiones en proceso simultáneas, las conexiones de cada vhost (muy útil para saber que hosting consune más) etc, debes descomentar esta linea:

ExtendedStatus On

<Location /server-status>

SetHandler server-status

Order deny,allow

Deny from all

Allow from ip

</Location>

Otra manera de hacerlo es:

<Location /server-status>

SetHandler server-status

AuthUserFile /home/pepe/htpasswd

AuthType Basic

AuthName "Server Status"

require valid-user

</Location>

En el archivo htpasswd que está en /home/pepe debe estar el usuario pepe con su correspondiente contraseña encriptada. Para hacer estos usuarios, consulta el final del documento dónde se explica como proteger directorios.

También se le puede decir al Apache que por defecto cada usuario de linux tenga su directorio web.

Por ejemplo http://localhost/~juan/ apuntará al directorio del usuario en linux, o sea:

/home/juan/public_html

Para hacer esto basta con poner:

UserDir public_html

Si pusieramos:

UserDir pagina_web

Entonces irá por defecto a:

/home/usuario/pagina_web

/home/usuario2/pagina_web

<Directory /home/*/public_html>

Opciones que queramos para todos los usuarios.

</Directory>

Más cosas:

Si tenemos una carpeta /images y la movemos de sitio, podemos hacer un redirect, o por ejemplo si teniamos /juan y ahora juan ha comprado un dominio podemos hacer esto:

Redirect permanent /juan http://www.juan.com

Donde /juan ya no debe ser un directorio, ni estar lleno, el ex-directorio de nuestro amigo ahora será www.juan.com, que es el nuevo dominio de juan, donde podemos encontrarle

Otra cosa excelente es que el Apache puede alojar varias webs (dominios) y esto se hace con el VirtualHost.

Los vhosts pueden estar basados en nombre (based-name) o en ip (ip-based).

Me explico, si tu máquina tiene una sola ip, pues deberas hacer vhosts basados en nombre, y si tienes varias ips pues puedes elegir, yo solo se hacerlo basado en nombre, ya que sólo tengo una ip:

Por ejemplo:

Tenemos el apache y queremos alojar nuestra web y la de un amigo:

El amigo compra el dominio pepe.com y apunta las dns a nuestra maquina.

Nosotros tenemos que decirle a nuestra máquina esto:

<VirtualHost *>

ServerAdmin amigo@pepe.com

DocumentRoot /web/amigo_pepe/

ServerName pepe.com

ErrorLog logs/web_amigo_pepe_errpr

CustomLog logs/web_amigo_pepe_log common

</VirtualHost>

Ejemplo real de un vhost del dominio decowar.com, totalmente completo:

#le decimos listen y la ip de nuestra maquina y el puerto (normalmente 80)

Listen 66.111.38.100:80

#recuerda que si sales por un router deberás poner Listen 192.168.0.3 , o sea la ip local, ya que sinó al arrancar el apache daráá el error "could not bind address port"

NameVirtualHost 66.111.38.100:80

#este es el vhost por defecto. Aunque está basado en nombre, este vhost como es por defecto, también podemos acceder directamente por la ip.

<VirtualHost 66.111.38.100:80>

DocumentRoot /usr/local/apache/htdocs/alex

ServerName www.elhacker.info

ServerAlias elhacker.info

</VirtualHost>

#segundo vhost basado en en el nombre (dominio) www.decowar.com y decowar.com

<VirtualHost 66.111.38.100:80>

ServerAdmin decowar@decowar.com

DocumentRoot /usr/local/apache/htdocs/decowar

ServerName www.decowar.com

ServerAlias decowar.com

<Directory "/usr/local/apache/htdocs/decowar/">

Order allow,deny

Allow from all

</Directory>

ErrorDocument 404 /error.htm

CustomLog /usr/local/apache/logs/acceslodeco combined

ErrorLog /usr/local/apache/logs/error_log_decowar

LogLevel warn

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin2/"

<Directory "/usr/local/apache/cgi-bin2">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

Fijate que tiene cgi-bin tb propio, tiene errordocument y logs etc, por separado del otro.

Asi en nuestro ordenador tendremos nuestra web y la de nuestro amigo, y las dos estaran en la misma IP y en el mismo servidor web. En este ejemplo solo hay 2 dominios, pero igual que hay 2 podriamos poner 200.

El apache también puede hacer de proxy, esta opción por defecto está desactivada, pero veremos como configurar el Apache como proxy.

Primero tiene que estar el módulo mod_proxy.c cargado en el Dynamic Shared Object (DSO)

#<IfModule mod_proxy.c>

# <Directory proxy:*>

# Order deny,allow

# Deny from all

# Allow from ip

# </Directory>
< anterior | 1 .. 3 4 5 6 7 .. 10 | siguiente >

Autor y licencia de 'Curso de Apache'


Curso gratis de Álex, el-brujo (el-hacker) . CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.