Archivos de Categoría: XAMPP @es

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 <Location>, <LocationMatch> y/o <VirtualHost> 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:

<LocationMatch "^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))">
    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
</LocationMatch>

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:

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

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.com y http://web2.com y cuyo contenido se encontrará respectivamente en:

/Users/usuario/Documents/Webs/web1.com

y

/Users/usuario/Documents/Webs/web2.com

Para ello lo primero es hacer que los nombres web1.com y web2.com 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.com
127.0.0.1 web2.com

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

$ ping web1.com
PING web1.com (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:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName localhost
    ServerAlias localhost
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs"
    ErrorLog "logs/localhost-error_log"
    CustomLog "logs/localhost-access_log" common
</VirtualHost>
 
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName web1.com
    ServerAlias web1.com
    DocumentRoot "/Users/user/Documents/Webs/web1.com"
    DirectoryIndex index.html
    <Directory /Users/user/Documents/Webs/web1.com>
        #IndexOptions +FancyIndexing NameWidth=*
        #Options Includes FollowSymLinks Indexes
        #AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog "logs/web1.com-error_log"
    CustomLog "logs/web1.com-access_log" common
</VirtualHost>
 
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName web2.com
    ServerAlias web2.com
    DocumentRoot "/Users/user/Documents/Webs/web2.com"
    DirectoryIndex index.html
    <Directory /Users/user/Documents/Webs/web2.com>
        #IndexOptions +FancyIndexing NameWidth=*
        #Options Includes FollowSymLinks Indexes
        #AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog "logs/web2.com-error_log"
    CustomLog "logs/web2.com-access_log" common
</VirtualHost>

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 una lista de ficheros 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 <Directory>...</Directory>. De lo contrario obtendríamos un error 403.