Salta el contingut

MP08 - UF1: Servidors web i de transferència de fitxers

Apache i Nginx - Hosting virtual (i)

Podem configurar el nostre servidor web per a contenir més d'un site, és el que anomenem hosting virtual. L'allotjament virtual es pot configurar segons tres tipus de dades diferents:

  • Allotjament virtual basat en adreces IP

    • El servidor tindrà una adreça IP diferent per cada configuració d'allotjament web virtual.

    • Això implica que el servidor ha de tenir N IP diferents configurades (1 per cada allotjament web virtual).

    • Sota IPv4 i l'escassetat d'IP que hi ha actualment és un model molt poc freqüent.

    • Implica una configuració complexa en l'àmbit de paràmetres de xarxa o tenir una targeta de xarxa per cada IP.

  • Allotjament virtual basat en noms

    • El servidor allotja diferents noms de domini o subdomini a la mateixa adreça IP.

    • Apache a partir del nom de domini aplica un fitxer de configuració o un altre.

    • Aquest tipus d'allotjament funciona a partir de HTTP/1.1.

    • Això és perquè s'envia la capçalera Host que indica el nom de domini.

    • Actualment és la forma de configuració més utilitzada.

    • Simplifica i facilita l'administració del servei.

  • Allotjament virtual basat en ports

    • Cada site funciona a una IP i/o domini:port diferent.

    • Consisteix a combinar els dos tipus anteriors amb l'ús de diferents ports.

    • Cal destacar que tal com hem vist en aquest últim cas, tots els tipus poden funcionar en comú al mateix servidor web.

Exemple pràctic

Aplicarem la configuració d'allotjament virtual per noms.

Crearem dos Virtualhosts que serviran les peticions rebudes al domini daw1.cat i daw2.cat.

A la vida real, serien noms de DNS vàlids, per fer les proves, caldrà que editem el fitxer /etc/hosts (en Linux) o %WINDIR%\System32\Drivers\etc\hosts (en Windows) per tal que apuntin a la IP del nostre servidor (ipDelServidor).

Què has dit?

Sí, com que el nostre servidor DNS no coneix cap d'aquests dos dominis i no sap traduir-los a cap IP, o potser sí i llavors anirem on no volem, cal aconseguir que el nostre ordinador sàpiga que quan ens referim a daw1.cat o a daw2.cat en realitat el que volem és accedir a l'ordinador d'IP ipDelServidor.

Cada site ha de tenir la seva pròpia estructura de fitxers.

Un respondrà amb un fitxer HTML i l'altre amb un fitxer PHP.

A partir d'aquí podem anar jugant amb les configuracions, afegint logs, canviant ports, noves directives, etc.

Fitxers i directoris

En Apache la configuració dels sites s'emmagatzema al diretori /etc/apache2/sites-available en un fitxer que identificarà el site amb el nom i acabarà en .conf. Per exemple podem crear el fitxer /etc/apache2/sites-available/daw1.cat.conf amb el següent contingut:

<VirtualHost *:80>
    ServerName daw1.cat

    DocumentRoot /var/www/daw1.cat
</VirtualHost>
Fixeu-vos que el nom de domini és daw1.cat sense www.

Una vegada creat el fitxer cal habilitar el site. Ho fem amb la comanda a2ensite <site> de la següent forma:

a2ensite daw1.cat

Ens avisa que hem de reiniciar/recarregar el servidor web

Enabling site daw1.cat.
To activate the new configuration, you need to run:
service apache2 reload

i el recarreguem...

systemctl reload apache2

En nginx la configuració dels sites s'emmagatzema al diretori /etc/nginx/sites-available en un fitxer que identificarà el site amb el nom. Per exemple podem crear el fitxer /etc/nginx/sites-available/daw1.cat amb el següent contingut:

server {
    server_name daw1.cat

    location / {
        root /var/www/daw1.cat
    } 
}

o amb més línies

server {
        listen 80;

        server_name daw1.cat;

        root /var/www/daw1.cat;
        index index.html;

        location / {
                try_files $uri $uri/ =404;
        }
}
Fixeu-vos que el nom de domini és daw1.cat sense www.

Una vegada creat el fitxer cal habilitar el site. Amb nginx no hi ha cap comanda especal i cal fer un enllaç sibmòlic, ln -s:

ln -s /etc/nginx/sites-available/daw1.cat /etc/nginx/sites-enabled/daw1.cat

Ara cal reiniciar/recarregar el servidor web

systemctl restart nginx

Com que hem indicat que el nou site té els fitxers a /var/www/daw1.cat cal:

  • crear el directori mkdir /var/www/daw1.cat

  • posar-hi un fitxer index.html

  • ara ja podem accedir a http://daw1.cat/

pots comprovar el contingut dels directoris site, tant l'available com l'enabled

isard@ubuntu:~$ ls -l /etc/apache2/sites-*
/etc/apache2/sites-available:
total 16
-rw-r--r-- 1 root root 1332 Mmm DD HH:MI:SS 000-default.conf
-rw-r--r-- 1 root root   94 Mmm DD HH:MI:SS daw1.conf
-rw-r--r-- 1 root root 6338 Mmm DD HH:MI:SS default-ssl.conf

/etc/apache2/sites-enabled:
total 0
lrwxrwxrwx 1 root root 35 Mmm DD HH:MI:SS 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx 1 root root 28 Mmm DD HH:MI:SS daw1.conf -> ../sites-available/daw1.conf
isard@nginx-server:~$ ls -l /etc/nginx/sites-*
/etc/nginx/sites-available:
total 12
-rw-r--r-- 1 root root   78 Mmm DD HH:MI:SS daw1.cat
-rw-r--r-- 1 root root 3024 Mmm DD HH:MI:SS default

/etc/nginx/sites-enabled:
total 0
lrwxrwxrwx 1 root root 35 Mmm DD HH:MI:SS daw1.cat -> /etc/nginx/sites-available/daw1.cat
lrwxrwxrwx 1 root root 34 Mmm DD HH:MI:SS default -> /etc/nginx/sites-available/default

Altres paràmetres amb què jugar

Podem configurar altres paràmetres per tal que el nostre site virtual es comporti de forma diferent als altres sites. Els més habituals seran els de registres log:

  • ErrorLog: solem crear fitxers diferents per a cada site.

  • CustomLog: solem crear fitxers diferents per a cada site.

Per exemple podríem afegir-hi

    ErrorLog ${APACHE_LOG_DIR}/error.daw1.cat.log
    CustomLog ${APACHE_LOG_DIR}/access.daw1.cat.log combined

i reiniciem

Recorda que cada vegada que modifiquis algun paràmetre de configuració de l'Apache cal reiniciar o recarregar el servei. systemctl reload apache2

  • error_log: solem crear fitxers diferents per a cada site.

  • access_log: solem crear fitxers diferents per a cada site.

Per exemple podríem afegir-hi

    error_log /var/log/nginx/error.daw1.cat.log;
    access_log /var/log/nginx/access.daw1.cat.log combined;

i reiniciem

Recorda que cada vegada que modifiquis algun paràmere de configuració de l'nginx cal reiniciar o recarregar el servei. systemctl restart nginx