Apache2 - LINUX

Servidor WEB • Adrián L. G. P.


Instalación

apt-get update
apt-get install apache2 apache2-utils

Habilitar un puerto:

ufw allow [Puerto]:(Protocolo)

Rutas Importantes

Directorio raíz:

/var/www/html

Fichero con todas las zonas del servidor:

/etc/apache2/apache2.conf

Fichero con los puertos a usar:

/etc/apache2/ports.conf

Mods disponibles y habilitados:

/etc/apache2/mods-available, /etc/apache2/mods-enabled

Sitios Virtuales disponibles y habilitados:

/etc/apache2/sites-available, /etc/apache2/sites-enabled

Fichero de configuración por defecto:

/etc/apache2/sites-available/000-default.conf

Directivas de Configuración

000-default.conf:

DocumentRoot:

Directorio raíz del sitio web, donde deben colocarse las páginas webs que servirá nuestro servidor.

ServerName:

ServerName www.asir.edu:80

Da un nombre al sitio y el puerto que se utiliza.

ErrorDocument:

ErrorDocument 404 /PagError.html

Página en caso de un código de error (404, ..)

Alias:

Alias /Fuera /usr/share/otra

Permite el acceso a páginas que estén fuera del árbol de directorios.

/etc/apache2/mods-enabled/dir.conf /etc/apache2/apache2.conf

DirectoryIndex:

DirectoryIndex indice.html index.htm indice.html

Indica qué página debe enviarse cuando el cliente sólo escribe el dominio y la carpeta.

Etiqueta < Directory >
/etc/apache2/apache2.conf

Sirve para dar permisos a un directoio concreto del disco duro del servidor.
Da igual si hay tabuladores o espacios, las mayúsculas importan.

Se puede poner dentro de un VirtualHost y tendrá más prioridad que en apache2.conf.

Formato:

< Directory /ruta/absoluta/directorio>
    Options Indexes
    DirectoryIndex index.html inicio.html inicio.htm
< /Directory>

Etiquetas:

Options Indexes: Dar permisos para mostrar el contenido de la carpeta en caso de no haber localizado el recurso solicitado. Si no tiene permiso con indexes dará un error si no localiza el recurso.

Options FollowSymLinks: Si no se pone, los alias no funcionan.

DirectoryIndex [File]: Se definen los ficheros por defecto que abrirá el servidor en caso de no haberse especificado en la URL. Se intentarán abrir en el orden en que aparecen. Si no se puede abrir ninguno y si la opción Indexes está definida mostrará el directorio principal, si no enseñará un error.

Etiqueta < VirtualHost >
/etc/apache2/sites-available/000-default.conf

Sirve para crear crear sitios web en el servidor.
Mínimo hay que tener 1.

Formato:

< VirtualHost *:80>
    ...
< /VirtualHost>

*:80: IP:Puerto.

Etiquetas:

ServerName: Nombre de Dominio. Si no se define, localhost.

ServerAdmin: Administrador del dominio.

DocumentRoot: Carpeta raíz del sitio web.

LogLevel: debug, info, notice, warn, error, crit, alert, emerg.

ErrorLog: Fichero donde se definen los logs, ${APACHE_LOG_DIR}/error.log.

Directory Privado

1. Directory /etc/apache2/apache2.conf:

< Directory /var/www/html/privado>
    AuthName "Acceso Privado"
    AuthType Basic
    AuthUserFile /etc/apache2/ClaveAcceso
    Require user NombreUsuario
< /Directory>

AuthName: Texto identificativo.

AuthUserFile: Fichero donde se meterán los usuarios con sus claves.

2. Comando para crear AuthUserFile:

htpasswd -c /etc/apache2/ClaveAcceso NombreUsuario

-c: Crea el archivo. Si se vuelve a añadir a otro usuario se quita.

3. Crear la carpeta definida en < Directory >.
4. Reiniciar el servicio y acceder a http://localhost/privado.

Habilitar un Sitio Nuevo

CMD:

ln -s /etc/apache2/sites-available/001-default.conf /etc/apache2/sites-enabled


Habilitar un Puerto

/etc/ports.conf:

Listen 8080

Página de Error

/etc/apache2/sites-available/000-default.conf:

< VirtualHost *:80>
    ErrorDocument 404 "Mensaje"
    ErrorDocument 404 /404.html
< /VirtualHost>

404: Código HTTP de error.

"Mensaje": El mensaje que se enseñará en un nuevo fichero.

/404.html: El fichero personalizado que se enseñará. Se busca desde DocumentRoot.

Ficheros .htaccess

Sirve para poder dar directivas desde un fichero ubicado en el directorio donde se de permisos, por defecto el fichero que va a buscar con las directivas será ".htaccess".

/etc/apache2/apache2.conf:

< Directory /var/www/html/marcos>
    AllowOverride all
< /Directory>

AllowOverride all: Permitir el uso de ficheros .htaccess.

/var/www/html/marcos/.htaccess:

AuthName "Mensaje"
AuthType Basic
AuthUserFile /etc/apache2/claveacceso
Require user mortadelo filemon
...

Usar HTTPS con SSL

1. CMD:

openssl req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 1024 -nodes

2. /etc/apache2/ports.conf:

Listen 443

3. Activar módulo SSLEngine (Una vez):

sudo a2enmod ssl

4. /etc/apache2/sites-available/aili-ss.conf:

< VirtualHost *:443>
        ServerName aili-ss.abc
        DocumentRoot /var/www/html
        
        SSLEngine on
        SSLCertificateFile /var/www/html/certificate.crt
        SSLCertificateKeyFile /var/www/html/certificate.key
< /VirtualHost>

Archivos (.crt, .key): Generados por openssl.

sudo a2ensite aili-ss.conf

Redireccionar

/etc/apache2/sites-available/000-default.conf:

< VirtualHost *:80>
    Redirect / https://ali-ss.abc
< /VirtualHost>


Alias

1. Crear una carpeta para el alias (/var/www/todos) y un index.html.

2. /etc/apache2/apache2.conf:

< Directory /var/www/todos>
    Options Indexes
    Require all granted
    DirectoryIndex index.html
< /Directory>

Alias /aliastodos /var/www/todos

Práctica 1 (ejemplo)

~ Crear varias carpetas con archivos, restringir una con acceso. Crear un VirtualHost para asignarles subdominios.

Crear estructura de archivos:

.
├── elfran
│   └── index.html
├── index.html
├── luis
│   └── indice.html
├── marcos
│   ├── hola2.txt
│   ├── hola3.txt
│   ├── hola4.txt
│   ├── hola5.txt
│   └── hola.txt
├── privado
│   └── indice.html
└── sebas
    ├── index.html
    └── indice.html

./index.html: Hacer un .html con enlaces a todos los directorios → http://localhost/sebas.

/etc/apache2/apache2.conf:

< Directory /var/www/html/luis>
    DirectoryIndex indice.html
< /Directory>

< Directory /var/www/html/marcos>
    Options Indexes
< /Directory>

Quitar 'Indexes' de Options en /var/www/html.

Añadir en /etc/hosts:

127.0.0.1       luis.aili-ss.xyz
127.0.0.1       elfran.aili-ss.xyz
127.0.0.1       marcos.aili-ss.xyz
127.0.0.1       sebas.aili-ss.xyz

/etc/apache2/sites-available/000-default.conf:

< VirtualHost *:80>
    ServerName luis.aili-ss.xyz
    DocumentRoot /var/www/html/luis
< /VirtualHost>

< VirtualHost *:80>
    ServerName elfran.aili-ss.xyz
    DocumentRoot /var/www/html/elfran
< /VirtualHost>

< VirtualHost *:80>
    ServerName sebas.aili-ss.xyz
    DocumentRoot /var/www/html/sebas
< /VirtualHost>

< VirtualHost *:80>
    ServerName marcos.aili-ss.xyz
    DocumentRoot /var/www/html/marcos
< /VirtualHost>

< VirtualHost *:80>
    ServerName privado.aili-ss.xyz
    DocumentRoot /var/www/html/privado
< /VirtualHost>

Práctica 2 (ejemplo)

/etc/apache2/sites-available/000-default.conf:

< VirtualHost *:80 >
    ServerName aili-ss.abc
    ServerAdmin webmaster@aili-ss.abc
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
< /VirtualHost >

/etc/apache2/sites-available/001-default.conf:

< VirtualHost *:80 >
    ServerName elfran.aili-ss.abc
    DocumentRoot /var/www/html/elfran
< /VirtualHost >

< VirtualHost *:80 >
    ServerName sebas.aili-ss.abc
    DocumentRoot /var/www/html/sebas
< /VirtualHost >

< VirtualHost *:80 >
    ServerName marcos.aili-ss.abc
    DocumentRoot /var/www/html/marcos
< /VirtualHost >

< VirtualHost *:80 >
    ServerName privado.aili-ss.abc
    DocumentRoot /var/www/html/privado
< /VirtualHost >

< VirtualHost *:80 >
    ServerName luis.aili-ss.abc
    DocumentRoot /var/www/html/luis
< /VirtualHost >
ln -s /etc/apache2/sites-available/001-default.conf /etc/apache2/sites-enabled

/etc/hosts:

127.0.0.1       aili-ss.abc
127.0.0.1       luis.aili-ss.abc
127.0.0.1       elfran.aili-ss.abc
127.0.0.1       marcos.aili-ss.abc
127.0.0.1       sebas.aili-ss.abc
127.0.0.1       privado.aili-ss.abc

/etc/apache2/apache2.conf:

< Directory /var/www/ >
    Options FollowSymLinks
    AllowOverride None
    Require all granted
< /Directory >

< Directory /var/www/html/privado/ >
    Options Indexes
    Directoryindex index.html
    AuthName "Acceso Privado"
    AuthType Basic
    AuthUserFIle /etc/apache2/ClaveAcceso
    Require user USUARIO1
< /Directory >

< Directory /var/www/html/luis >
    Options Indexes
    Require all denied
    DirectoryIndex indice.html
< /Directory>

< Directory /var/www/html/marcos >
    Options Indexes
< /Directory >

Práctica 3 (ejemplo)

Bloquear solicitudes por el :8080 en todos los dominios menos en luis.

/etc/apache2/sites-available/000-default.conf:

< VirtualHost *:80>
        ServerName aili-ss.abc
        ServerAdmin webmaster@aili-ss.abc
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        ErrorDocument 404 /404.html
        ErrorDocument 403 /403.html
< /VirtualHost>

< VirtualHost *:8080>
        DocumentRoot /var/www/html
        ServerName aili-ss.abc
        < Directory /var/www/html>
                Require all denied
        < /Directory>
< /VirtualHost>

Dejar el puerto :8080 en luis /etc/apache2/sites-available/001-default.conf:

< VirtualHost *:80>
        ServerName luis.aili-ss.abc
        DocumentRoot /var/www/html/luis
        ErrorDocument 403 "No puedes acceder a Luis"
< /VirtualHost>

< VirtualHost *:8080>
        ServerName luis.aili-ss.abc
        DocumentRoot /var/www/html/luis
        ErrorDocument 403 "No puedes acceder a Luis"
        < Directory /var/www/html/luis>
                Require all granted
        < /Directory>
< /VirtualHost>

Adrián L. G. P.