Archivos de Tags: Apache

Proteger con contraseña una Location, LocationMatch o VirtualHost en Apache (XAMPP y Mac OS X)

Proteger una Location, LocationMatch o VirtualHost en Apache es muy similar a proteger una carpeta tal y como expliqué en “Proteger con contraseña una carpeta en Apache (XAMPP y Mac OS X)“. La primera parte es exactamente igual, hay que crear el fichero con el usuario y la contraseña que queremos usar mediante el comando htpasswd command. Es importante no dejar este fichero en algún lugar del servidor donde pueda ser descargado.

/Applications/XAMPP/xamppfiles/bin/htpasswd -c /Applications/XAMPP/etc/.htpasswd admin
New password: 
Re-type new password: 
Adding password for user admin

Luego ir al fichero de configuración con nuestra etiqueta , and/or y añadir las mismas líneas que usamos para proteger una carpeta con el fichero .htaccess. Por ejemplo para proteger las localizaciones especiales de XAMPP abriremos el fichero /Applications/XAMPP/xamppfiles/etc/extra/httpd-xampp.conf y añadiremos las siguientes líneas en negrita:


    AuthName "Protected Area"
    AuthType Basic
    AuthUserFile /Applications/XAMPP/xamppfiles/etc/.htpasswd
    Require valid-user

    Order deny,allow
    Deny from all
    Allow from ::1 127.0.0.0/8 \
               fc00::/7 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 \
               fe80::/10 169.254.0.0/16

    ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var

Para proteger un VirtualHost abrir el fichero /Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf y añadir las mismas líneas dentro del VirtualHost que queramos proteger. Por ejemplo:


    AuthName "Protected Area"
    AuthType Basic
    AuthUserFile /Applications/XAMPP/xamppfiles/etc/.htpasswd
    Require valid-user
    ServerAdmin webmaster
    DocumentRoot "/Users/user/Documents/Webs/test.local"
    ServerName test.local
    ServerAlias test.local
    ErrorLog "logs/test.local-error_log"
    CustomLog "logs/test.local-access_log" common
    DirectoryIndex index.php index.html index.htm
    
        #IndexOptions +FancyIndexing NameWidth=*
        #Options Includes FollowSymLinks Indexes
        AllowOverride All
        Order allow,deny
        Allow from all
    

Proteger con contraseña una carpeta en Apache (XAMPP y Mac OS X)

Lo primero es crear un fichero con el usuario y la contraseña a usar mediante el comando htpasswd:

/Applications/XAMPP/xamppfiles/bin/htpasswd -c /Applications/XAMPP/etc/.htpasswd admin
New password: 
Re-type new password: 
Adding password for user admin

Es importante poner este fichero en un lugar que no sea accesible desde el servicio web para que nadie pueda descargárselo. Una vez hecho esto añadir un fichero .htaccess a las carpetas que queramos proteger:

vi /Users/user/Documents/Webs/test.local/.htaccess

Y ponerle el siguiente contenido:

AuthName "Protected Area"
AuthType Basic
AuthUserFile /Applications/XAMPP/etc/.htpasswd
require valid-user

Recargar el servicio de Apache y a partir de ese momento cuando intentes acceder a la URL de la carpeta se te pedirá el usuario y la contraseña configuradas:

Source: Stabeler.

Configurar virtual hosts para XAMPP en Mac OS X

Supongamos que queremos tener en nuestro servidor local 2 virtual hosts que sean accesibles mediante las URL http://web1.site y http://web2.site y cuyo contenido se encontrará respectivamente en:

/Users/usuario/Documents/Webs/web1.site

y

/Users/usuario/Documents/Webs/web2.site.

Para ello lo primero es hacer que los nombres web1.site y web2.site apunten a nuestro ordenador. Se podría hacer configurando un servidor DNS pero es más fácil añadir esas entradas en nuestro fichero de hosts. Abrir el fichero /etc/hosts y añadir:

127.0.0.1 web1.site
127.0.0.1 web2.site

Comprobar desde el terminal que haciendo ping a esos nombres se accede a 127.0.0.1:

$ ping web1.site
PING web1.site (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.044 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.068 ms

Descargar XAMPP e instalarlo.

Editar el fichero /Applications/XAMPP/etc/httpd.conf y cambiar los parámetros User y Group a tu nombre de usuario y el grupo staff.

User usuario
Group staff

Descomentar la línea que incluye el fichero de virtual hosts:

# Virtual hosts
Include /Applications/XAMPP/etc/extra/httpd-vhosts.conf

Editar el fichero Applications/XAMPP/etc/extra/httpd-vhosts.conf y eliminar las 2 entradas de VirtualHost que vienen de ejemplo y añadir las siguientes:


    ServerAdmin webmaster
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "logs/localhost-error_log"
    CustomLog "logs/localhost-access_log" common

 

    ServerAdmin webmaster
    DocumentRoot "/Users/usuario/Documents/Webs/web1.site"
    ServerName web1.site
    ServerAlias web1.site
    ErrorLog "logs/web1.site-error_log"
    CustomLog "logs/web1.site-access_log" common
    DirectoryIndex index.html
    
        #IndexOptions +FancyIndexing NameWidth=*
        #Options Includes FollowSymLinks Indexes
        #AllowOverride All
        Order allow,deny
        Allow from all
    

 

    ServerAdmin webmaster
    DocumentRoot "/Users/usuario/Documents/Webs/web2.site"
    ServerName web2.site
    ServerAlias web2.site
    ErrorLog "logs/web2.site-error_log"
    CustomLog "logs/web2.site-access_log" common
    DirectoryIndex index.html
    
        #IndexOptions +FancyIndexing NameWidth=*
        #Options Includes FollowSymLinks Indexes
        #AllowOverride All
        Order allow,deny
        Allow from all
    

Como se puede observar se ha tenido que añadir también la entrada para localhost para poder seguir accediendo al contenido raiz de XAMPP desde el que podemos comprobar el estado del servidor o acceder a phpMyAdmin.

Meter dentro de las carpetas de nuestras 2 webs un index.html con algún contenido, arrancar XAMPP y comprobar que al acceder a sus URLs se muestra el contenido de dichos index.html. Se puede poner en DirectoryIndex tantos nombres de fichero como se quiera y XAMPP los intentará cargar en el orden que están escritos. Por ejemplo para tratar de cargar primero index.php y luego index.html:

DirectoryIndex index.php index.html

Si se quiere poder acceder al contenido de las carpetas de nuestras webs, descomentar las 3 primeras líneas que aparecen dentro del tag .... De lo contrario obtendríamos un error 403.