Servidors Web. Apache. Configuració II

De wikijoan
Salta a la navegació Salta a la cerca

La web de l'assignatura: www.iaw.org. Utiltizar dominis en la xarxa local

actualització: https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-16-04

Anem a crear un nom de domini per a l'assignatura de IAW: www.iaw.org. Evidentment es tracta d'un domini local, que només és vàlid dins el nostre ordinador, o potser dins de la nostra xarxa local. Si fem una cerca per Internet, actualment el domini públic www.iaw.org està lliure.

El primer serà ficar una entrada en el fitxer /etc/hosts, que és el fitxer que associa IPs amb noms de màquina o domin. Afegeixo les següents línies a /etc/hosts:

127.0.0.2       www.iaw.org

En el cas de què tinguem una IP fixa, podem associar el domini www.iaw.org a la nostra IP. Això també val si un company vol accedir al nostre domini www.iaw.org des del seu ordinador:

192.168.1.9       www.iaw.org

El que fa el fitxer /etc/hosts és una traducció de IP a nom de domini, i això és el que fan els servidors DNS. Podem pensar que és un DNS local, i que no cal anar a mirar a Internet i a un servidor DNS remot aquests noms de domini.

A /etc/apache2/sites-available he de crear un fitxer de configuració. Reaprofitem el fitxer 000-default.conf:

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/www.iaw.org.conf
$ sudo joe /etc/apache2/sites-available/www.iaw.org.conf

ServerName www.iaw.org
ServerAlias www.iaw.org
DocumentRoot /home/joan/IAW/html

Hem d'habilitar aquest site, creant un enllaç simbòlic a sites-enabled:

$ sudo a2ensite www.iaw.org.conf

Reiniciem el servei amb qualsevol d'aquestes comandes:

$ sudo systemctl restart apache2
$ sudo service apache2 restart
$ sudo /etc/init.d/apache2 restart

I ara accedim a

Ja funciona, però segurament encara tenim un problema de permisos (Permission Denied). Afegim les següents línies:

<Directory /home/joan/IAW/html>
Require all granted
</Directory>

Reiniciem i ara sí que ha de funcionar. Per tant, hem d'accedir a la web de l'assignatura de dues maneres diferents:

El fitxer www.iaw.org.conf ha quedat de la següent manera:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.iaw.org
        ServerAlias www.iaw.org
        DocumentRoot /home/joan/IAW/html

        #Posem logs personalitzats per al domini iaw.org
        ErrorLog ${APACHE_LOG_DIR}/error_iaw.log
        CustomLog ${APACHE_LOG_DIR}/access_iaw.log combined

        <Directory /home/joan/IAW/html>
                Require all granted
        </Directory>
</VirtualHost>


Web de l'assignatura IAW d'un company

Aquesta prova la podeu fer amb el servidor d'un company o del professor (sabent quina és la IP, millor si és una IP fixa). I també es pot fer entre dues màquines virtuals.

Editem el fitxer /etc/hosts amb la IP del company (i momentàniament deshabilitem la nostra referència local).

192.168.0.34 www.iaw.org

i podem accedir al servidor del company. Recordem quin seria el procés:

  1. En el nostre client (Chrome/Firefox) volem accedir a www.iaw.org
  2. El nostre fitxer /etc/hosts associa www.iaw.org a la IP 192.168.0.34
  3. Quan la petició arriba a la IP del company pel port 80, el servidor web localitza el fitxer index.html en la carpeta associada al site www.iaw.org, segons consta en els fitxers de configuració de l'Apache.
  4. La pàgina ja es pot servir en el camí invers fins arribar al client (el navegador web).

NOTA. També és important ficar els permisos correctes a la carpeta html/, o bé canviar-li el propietari. Recordem que l'accés al recurs web es fa a través de l'usuari www-data.

La web de l'assignatura: http://www.iaw.org

Així doncs, la web de l'assignatura la tindrem accessible des d'aquestes dues direccions:

Opcionalment, podem tenir l'accés a aquestes dues url's sota https (HTTP secure). Ho deixem opcionalment per a l'alumne.

Aquesta web ha de ser un reflex de tota la feina que anem fent al llarg de la UF1 i UF2. Quan comencem a estudiar PHP, aquí hauràs d'enllaçar tots els scripts i proves que vagin fent. Ha de ser un reflex de tota la feina que es va fent, i serà una nota de classe.

Sortir a Internet des d'una fibra domèstica

Referències

Configuració del router

Un router antic:

Tothom ha de saber entrar i configurar els ports del seu router. Concretament les taules NAT

Manera de procedir

Teniu configurat el domini www.iaw.org en el vostre portàtil (on haureu posat una ip fixa preferiblement) dins de la xarxa local de casa. Ara volem accedir a aquests domini des de fora de casa, des de l'institut per exemple, o millor, des del mòbil o la tauleta amb la wifi desconnectada (és a dir, des d'internet, utilitzant les dades del vostre proveïdor).

En la vostra xarxa local teniu varis dispositius formant una sola xarxa local: la tele, el mòbil, la tauleta, l'ordinador, la nevera (dispositius IoT), etc. Tothom ha de saber entrar en el seu router, i configurar-lo de manera que les peticions que arribin pel port 80 es redirigeixin al nostre servidor Apache (on recordem haurem posat una IP fixa, o si més no sabem quina té en aquest moment).

També heu de saber quina és la IP pública actual:

wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\< -f 1

Suposem que és: xxx.xxx.xxx.xxx

Aleshores, des del mòbil/tauleta podeu accedir a la web de l'assignatura:

Com que la IP pública pot anar canviant, millor si fem alguna cosa com ara:

I com ho fem això? Ens hem de registrar a https://www.noip.com/ i donar d'alta un Free Host Name. En el nostre portàtil hi haurà un client (una petita aplicació que es posi en contacte amb noip.com cada vegada que la IP del nostre router s'actualitzi.

  • www.pepito.com/IAW o http://IAW.pepito.com. Si no estem contents amb la url que ens proporciona noip.com, podem registrar el nostre propi domini (pepito.com, per ex), a Arsys per exemples (mirar pressupost). (Però compte! no és un hosting, només necessitem la compra del domini). Dins del penell de control del nostre domini a Arsys, anem a l'apartat de DNS i especifiquem la direcció a noip. D'aquesta manera, quan els usuaris vagin a pepito.com, aniran a noip, i finalment aniran al nostre router. Tot aquest camí es pot resseguir amb una eina com traceroute:
$ sudo apt-get install traceroute

Per configurar el servei no-ip està explicat en aquest enllaç: Update_Abril_2014._noip.com

Cas wiki del professor: wiki.joanillo.org

  • El domini joanillo.org està hostatjat a Arsys
  • Actualment, la wiki està en el núvol, en un Virtual Server de OVH
  • La traducció de noms entre www.joanillo.org i la IP pública del núvol la fa el servei noip (joanqc.noip.com)

Fem un traceroute (des d'una màquina de l'institut):

$ traceroute www.joanillo.org
traceroute to www.joanillo.org (51.210.179.7), 30 hops max, 60 byte packets
 1  router (192.168.0.1)  5.795 ms  5.785 ms  7.380 ms <- 192.168.0.1 és la direcció del router de l'institut
 2  10.13.32.1 (10.13.32.1)  7.377 ms  7.368 ms  7.802 ms <- és la ip pública de l'institut
 3  10.8.15.171 (10.8.15.171)  7.796 ms  8.385 ms  8.388 ms
 4  10.8.1.50 (10.8.1.50)  8.646 ms  9.653 ms  9.655 ms
 5  * * *
 6  * * *
 7  * * *
 8  be33-400-grtmadix2.net.telefonicaglobalsolutions.com (216.184.113.180)  11.924 ms  12.216 ms  12.205 ms
 9  be100-103.mad-1-a9.es.eu (94.23.122.92)  12.201 ms  14.125 ms 176.52.248.251 (176.52.248.251)  14.105 ms
10  be100-103.mad-1-a9.es.eu (94.23.122.92)  15.149 ms be106.par-gsw-sbb1-nc5.fr.eu (91.121.131.153)  27.784 ms  27.498 ms
11  be106.par-gsw-sbb1-nc5.fr.eu (91.121.131.153)  29.249 ms be102.gra-g1-nc5.fr.eu (91.121.215.176)  32.160 ms be106.par-gsw-sbb1-nc5.fr.eu (91.121.131.153)  27.324 ms
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * vps-f5d83567.vps.ovh.net (51.210.179.7)  31.362 ms

El paquet IP passa per diferents IPs, algunes ocultes, i arriba finalment a les màquines de ovh.net (51.210.179.7).

També es veu fent un ping:

$ ping www.joanillo.org
PING joanqc.no-ip.biz (51.210.179.7) 56(84) bytes of data.
64 bytes from vps-f5d83567.vps.ovh.net (51.210.179.7): icmp_seq=1 ttl=46 time=30.6 ms
64 bytes from vps-f5d83567.vps.ovh.net (51.210.179.7): icmp_seq=2 ttl=46 time=31.0 ms
...

Resumint, podem accedir a la wiki de joanillo.org des de 3 url's diferents:

Servidor web amb una Raspberry Pi

Instal·lar un servidor web a casa i deixar l'ordinador de sobretaula o el portàtil encès les 24 hores no és molt pràctic. Una alternativa que sí que és viable és utilitzar una placa Raspberry Pi i els avantatges que comporta (preu baix, no ocupa espai, consumeix molt poc corrent). Hi ha molts enllaços on s'explica com fer-ho. Per ex,

En aquest anterior enllaç s'utilitza apache2, però recordem que hi ha altres servidors web com ara nginx i lighttpd que són més lleugers i per tant més idonis per a la RPi:

Logs a l'Apache

Els fitxers de log els trobarem com és habitual en la carpeta /var/log/, on trobarem la carpeta apache2/. Anem a veure si és veritat mirant el fitxer de configuració /etc/apache2/apache2.conf. Cercant dins el fitxer trobem:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog ${APACHE_LOG_DIR}/error.log

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
...
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combine
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Un altre lloc (posterior) on es pot definir una altra vegada el log és als fitxers de configuració dels sites, per exemple, a /etc/apache2/sites-available/000-default.conf:

ErrorLog ${APACHE_LOG_DIR}/error.log

Dins la carpeta /var/log/apache2 trobem el fitxer error.log actual, i tots els fitxers històrics que s'han generat anteriorment i que es guarden empaquetats. Quan el fitxer error.log arriba a un cert tamany, s'empaqueta i es renombra, i es comença amb un nou fitxer.

Anem a provocar un error. Accedim en el servidor a un recurs que no existeix. Per exemple:

Anem a veure el missatge que s'ha logat en el fitxer error.log:

$ tail error.log
[Thu Oct 16 18:01:25 2014] [error] [client 127.0.0.1] File does not exist: /var/www/no_existeix

Fem servir tail per veure les últimes línies del fitxer.

Si volem registrar els accessos que tenen les nostres pàgines es fa servir normalment el fitxer access.log, tal com està definit a /etc/apache2/sites-available/000-default.conf:

CustomLog ${APACHE_LOG_DIR}/access.log combined

Per exemple, el professor accedeix al recurs http://localhost/artropodes (un recurs que existeix), i en el fitxer access.log podem veure:

127.0.0.1 - - [16/Oct/2014:18:21:47 +0200] "GET /icons/back.gif HTTP/1.1" 200 507 "http://localhost/artropodes/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"

Aquí és interessant remarcar que podem tenir fitxers logs d'accés diferenciats en funció del site. Per exemple, podem definir que per al site www.iaw.org, que l'alumne ha definit a /etc/apache2/sites-available/www.iaw.org:

CustomLog /var/log/apache2/access_iaw.log combined

Amb la qual cosa tenim un log diferenciat per visualitzar els accessos a www.iaw.org.

Amb la informació continguda en aquests fitxers es poden fer estadístiques de pàgines més accedides, temps de residència en cada pàgina, temps de residència en el site, navegador i sistema operatiu. I amb la IP es pot saber el país de procedència.

NOTA, cas pràctic. A vegades pot ser interessant cercar dins dels fitxers per una paraula concreta. Utiltizem la comanda find. Per exemple, si volem cercar artropodes en els fitxers continguts en el directori /var/log/apache2 faríem:

$ find /var/log/apache2 -type f -print | xargs egrep -i artropodes
./ssl_access.log:127.0.0.1 - - [10/Oct/2014:16:52:59 +0200] "GET /artropodes/ HTTP/1.1" 200 1036 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"
./ssl_access.log:127.0.0.1 - - [10/Oct/2014:16:52:59 +0200] "GET /icons/folder.gif HTTP/1.1" 200 618 "https://localhost/artropodes/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"

creat per Joan Quintana Compte, octubre 2020