|-----------------------------------------------------------------------------------------------|
|  Instalacin y Configuracion De Apache 1.3.24 + PHP 4.2.0 + MySQL 3.23.49 + ActivePerl 5.6.1  |
|-----------------------------------------------------------------------------------------------|
| 20-12-2002 |                                                                       | el-brujo |
|-----------------------------------------------------------------------------------------------|
|                            _____ ___ _   _   _____     _                                      |
|                           |  ___|_ _| | | | | ____|___(_)_ __   ___                           |
|                           | |_   | || |_| | |  _| |_  / | '_ \ / _ \                          |
|                           |  _|  | ||  _  | | |___ / /| | | | |  __/                          |
|                           |_|   |___|_| |_| |_____/___|_|_| |_|\___|                          |
|                                      el-brujo@elhacker.net                                    |
|                                                                                               |
|-----------------------------------------------------------------------------------------------| 
		          	


Primero nos descargamos los programas.

			 	Descarga Apache
http://www.apache.org/dist/httpd/binaries/win32/apache_1.3.24-win32-x86-src.msi

				 Descarga PHP
http://www.php.net/do_download.php?download_file=php-4.2.0-Win32.zip

				 Descarga MysQL
http://www.mysql.com/downloads/download.php?file=Downloads/MySQL-3.23/mysql-3.23.49-win.zip

				 Descarga Perl
http://downloads.activestate.com/ActivePerl/Windows/5.6/ActivePerl-5.6.1.631-MSWin32-x86.msi

1er Paso

Instalar primero el Apache

Doble click en el MSI
Comienza instalacin
Network Domain --> sino tenemos un dominio pones localhost (luego se puede poner aqui la IP)
Server Name --> sino tenemos un dominio pones localhost (luego se puede poner aqui la IP)
Mail Adminstrador --> nuestro e-mail

Instalar como un servicio mejor, si es windows 98 sera manual
Instalacin por defecto se hace en el directorio: 
C:\Archivos de programa\Apache Group\Apache
Ahora necesitamos editar el archivo de configuracion que se encuentra en:
C:\Archivos de programa\Apache Group\Apache\conf\httpd.conf
Lo editamos con cualquier editor de texto

Y vamos a aadir el PHP:

Instalar PHP

Abrimos el ZIP del PHP y lo descomprimimos en la carpeta c:\PHP, o cualquier otra, 
pero mejor corta, para que no se haga la picha un lio con la ruta del PHP
Nos crea la ruta C:\php\php-4.2.0-Win32, y tampoco me mola, asi que copio lo que hay dentro 
de php-4.2.0-Win32 y lo meto en c:\PHP y luego borro la carpeta php-4.2.0-Win32
Y ahora hay que coger el php4ts.dll y copiarlo al directorio de Windows/System (en el 9x) o 
Winnt/System32 (NT,2000,XP).Este archivo se encuentra en C:\php\php4ts.dll
Si hay otro archivo en c:\Windows\System lo remplazamos, y si nos nos deja, cerrar el apache.

El siguiente paso es configurar el php.ini
- renombrar o copiar php.ini-dist a php.ini 
[para poder obtener los variables de post y get, como en mi caso, editar la lineas 
register_globals=On (esta en Off por defecto)]y copiarlo( php.ini) a C:\windows 
Una vez instalado el PHP vamos a decirle al Apache que tenemos el php!!
El PHP se puede instalar de dos maneras, como un mdulo del Apache o como un script, 
lo mejor es como un modulo, asi que lo haremos asi:
Abrimos el httpd.conf y buscamos "Dynamic Shared Object (DSO) Support", 
que es donde se cargan los modulos:

Hasta tenemos un ejemplo:

# Example:
# LoadModule foo_module modules/mod_foo.so

Y aadimos en la primera linea:

LoadModule php4_module c:/php/sapi/php4apache.dll

De tal manera que tiene que quedar asi:

LoadModule php4_module c:/php/sapi/php4apache.dll
#LoadModule vhost_alias_module modules/mod_vhost_alias.so

Ahora seguimos bajando por el httpd.conf y llamamos al modulo
AddModule mod_php4.c
De tal manera que quede asi:

ClearModuleList
AddModule mod_php4.c

Vale, ahora bucamos en el httpd.conf el modulo mod_dir.c
Y nos sale esto:

<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>

Y le aadimos esta linea

AddType application/x-httpd-php .php

Tiene que quedar asi:

<IfModule mod_dir.c>
DirectoryIndex index.html
AddType application/x-httpd-php .php
</IfModule>

Lo guardamos y reiniciamos el apache, no el ordenador.
Podemos hacer una pagina info.php que dentro contenga <? phpinfo(); ?> y luego visualizar 
esta pagina para ver si se instalado correctamente.

Ahora vamos a instalar el MySQL 3.23.49

LLeva un setup muy majo, asi que por defecto se instala en C:\Mysql, 
aunque si esto se cambia luego hay que cambiar un archivo.
Este archivo es el C:\MY.CNF o hacer un my.ini en la carpeta windows y decirle la ruta exacta:

[mysqld]
basedir=E:/ruta-del-php/
datadir=E:/ruta-del-php/data

Ahora solo hay que llamar al winmysqladmin.exe que esta en C:\mysql\bin
Si el semaforo se pone en verde, pefecto, sino pues algo ha fallado.

Y para instalar el Active Perl, tambin lleva un setup y no hay que hacer nada de especial. 
Simplemente decirle la ruta del perl en el httpd.conf

#!c:/program files/perl/perl.exe

Esto es la instalacin bsica.
Ahora vamos a ver un poco con profundidad todas las opciones de configuracin:

Archivos que necesitamos:

httpd.conf de la carpeta conf del apache
php.ini de c:\Windows para configurar el PHP

Opciones del Apache httpd.conf

Bsico:
# = Linea comentada, por lo tanto el apache no la coge
# Dynamic Shared Object (DSO) Support --> Aqu se cargan los mdulos de apache

Ejemplo:
#LoadModule vhost_alias_module modules/mod_vhost_alias.so

LoadModule Nombre Ruta

Como ya hemos dicho antes, para carga el PHP:
LoadModule php4_module f:/php/sapi/php4apache.dll

Despues de hacer el LoadModule necesitas cargarlo con el AddModule

ClearModuleList
AddModule mod_php4.c

-----------------------------------------
Configuracin general

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 mas grande sea, el apache no dara mensaje de timeout aunque tarde mucho 
en cargar una pagina

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

KeepAliveTimeout 15 --> Numero 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

ServerAdmin alex@elhacker.net --> tu email

ServerName localhost --> tu ip, o mejor localhost sino tienes ip fija.

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

<Directory /> 
Options FollowSymLinks
AllowOverride None
</Directory>

--> esto sirve para decirle que el Document Root (/) o sea c:/web no nos ensee 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 escriba http://localhost/images) no le muestre el contenido 
de esa carpeta (sale un Permission Denied), 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 ensea el banner.

Ejemplo:
<Directory /images> 
Options FollowSymLinks
AllowOverride None
</Directory>

Options FollowSymLinks --> se trata de permitir enlaces simblicos, o sea si un directorio 
tiene tales permisos, los siguientes heredan las misma configuracin.

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

<Directory "C:/Archivos de programa/Apache Group/Apache/htdocs"> --> escribe aqui lo mismo 
que en el document root

<IfModule mod_dir.c>
DirectoryIndex index.html index.php default.htm
AddType application/x-httpd-php .php
</IfModule>

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

index.php
index.php3

En DirectoryIndex se definen las paginas que cogera por defecto, es decir:

Si existe c:/web/index.html nos coge por defecto esa pagina, asi que no hace falta poner
http://localhost/index.html, sino que basta con poner http://localhost 
(que nos llevara 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 tenemos PHP3

AccessFileName .htaccess --> esto es una opcion muy buena que tiene el apache que en un archivo 
.htaccess podemos configurar varias cosas, como si fuera el httpd.conf

Primero de todo:

<Files .htaccess>
Order allow,deny
deny from all
</Files>

O mejor an:

<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>

Luego le podemos decir al htaccess

ErrorDocument 404 /notfound.html

Tambin se le puede decir un directory index:

DirectoryIndex filename.html

Si queremos que un cgi se ejecute automticamente:

DirectoryIndex /cgi-local/index.pl

Tambin podemos utilizar la autentificacin con HTTP con el Apache:

AuthUserFile "ruta"

<Limit GET>
requiere user login juan
</Limit>

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

#!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.
Ms cosas. Imginemos 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 cgis o pl, y luego en el navegador se accede con http://localhost/cgi-bin/
Tambin 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

Tambin se le puede decir al apache que una pgina 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 estn 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.

#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from localhost
#</Location>

#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from localhost
#</Location>

Tambin se le puede decir al apache que cuando vaya a http://localhost/~juan/ 
apunte al directorio ~juan/public_html

Ejemplo:

UserDir public_html

<Directory /home/*/public_html>
Opciones, etc
</Directory>

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

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 maquina 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>

Asi en nuestro ordenador tendremos nuestra web en c:/web y la de nuestro amigo, 
y las dos estaran en la misma IP y en el mismo servidor web.

El apache tambin puede hacer de proxy, esta opcin por defecto est desactivada, 
pero veremos como configurar el Apache como proxy.

Primero tiene que estar el mdulo 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>

-----------------------------------
PHP

Editaremos el Archivo php.ini

; Resource Limits ;

max_execution_time = 30 --> mximo tiempo de ejecucin de un script php. 
Si en 30 segunos no obtiene respuesta el script se para.

memory_limit = 8M --> pos eso 

; File Uploads ;

Si queremos enviar ficheros al servidor, aqui lo podemos decir:

file_uploads = On --> si queremos o no queremos

upload_tmp_dir = F:\webs\public --> el directorio donde se copiaran los archivos que nos suban

upload_max_filesize = 1M --> el tamao maximo que queremos que nos envien.

--------------------------------------------------------------

Bueno instalarlo en Linux, no cambio mucho las rutas:

/usr/local/apache en vez de c:\Archivos de Programas

Te bajas el Apache:

./configure
make 
make install

El php:

./configure --with-mysql --with-/usr/local/apache/bin/apxs

ya esta.

Alex B.
webmaster de elhacker.net 