Servidors Web. Apache. Instal.lació i configuració

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Què és un servidor Web?

Apache

NOTA: la url directa on trobem els arxius per descarregar: http://archive.apache.org/dist/httpd/. Per exemple, podem descarregar l'arxiu httpd-2.2.31.tar.bz2 de juliol de 2015.

Mòduls per instal.lar

A mida que els necessitem instal.larem els mòduls de php que necessitem. Per exemple, amb PHP necessitarem fer encriptació (mòdul php5-mcrypt), generar documents pdf amb fpdf, fer gràfiques, enviar mails amb un servidor SMTP... i és clar, connectar-nos a bases de dades. Necessitarem els connectors php5-mysql i php5-pgsql per a Mysql i PostgreSQL.

Per cercar els mòduls que comencen per php5-:

$ apt-cache search php5 | grep php5-

LAMP i similars

   * LAMP i similars.
         o http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29
         o http://www.easyphp.org/
         o http://www.apachefriends.org/en/xampp.html
         o solució nativa: instal.lar Apache, mysql, PHP a Ubuntu. 

Configuració d'Apache

utilitzar dominis .com en la xarxa local

NOTA: informació antiga. Actualització a versions d'Ubuntu més actuals: Servidors_Web._Apache._Configuració_II

Anem a crear dos noms de domini per a les assignatures de SAD i IAW: www.sad.org i www.iaw.org

El primer serà ficar una entrada en el fitxer /etc/hosts

afegeixo les següents línies a /etc/hosts:

127.0.0.2       www.sad.org
127.0.0.3       www.iaw.org

i en qualsevol altre ordinador que vulgui accedir des de la xarxa farà:

192.168.1.9       www.sad.org
192.168.1.9       www.iaw.org

En aquest cas, 192.168.1.9 és el servidor de referència, però si el servidor Apache on es fan les proves és un altre aleshores ficar la IP que es correspongui. És clar que una IP estàtica és el més interessant.

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 (de fet, www.iaw.org i www.sad.org existeixen a Internet).

A /etc/apache2/sites-available creo els fitxers www.iaw.org i www.sad.org que contenen la següent informació:

<VirtualHost *:80>
        ServerName www.iaw.org
        ServerAdmin joan_quintana@yahoo.com
        DocumentRoot /var/www/iaw
        <Directory />
        Options FollowSymLinks
        AllowOverride All
        </Directory>
        <Directory /var/www/iaw>
                Options Indexes FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access_iaw.log combined
</VirtualHost>
<VirtualHost *:80>
        ServerName www.sad.org
        ServerAdmin joan_quintana@yahoo.com
        DocumentRoot /var/www/sad
        <Directory />
        Options FollowSymLinks
        AllowOverride All
        </Directory>
        <Directory /var/www/sad>
                Options Indexes FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access_sad.log combined
</VirtualHost>

Fixem-nos que els fitxers de log són diferents. Això ho fem així perque m'interessarà separar les estadístiques dels dos sites.

També creem els llocs /var/www/sad i /var/www/iaw, i els dotem de contingut.

Per tal d'habilitar aquests dos virtual hosts s'ha de copiar els arxius anteriors a sites-enabled/. Millor que copiar, es fa un enllaç simbòlic que es pot fer de dues maneres.

$ sudo a2ensite www.sad.org
o bé
$ cd /etc/apache2/sites-enabled
$ sudo ln -s /etc/apache2/sites-available/www.sad.org www.sad.org

Per tal de fer efectius els canvis: (no cal fer restart, amb reload s'aliquen els canvis que s'han fet en els fitxers de configuració)

$ sudo /etc/init.d/apache2 reload

I si ara faig un ping ja veig que la cosa funciona, respon l'ordinador local:

$ ping www.sad.org
PING www.sad.org (127.0.0.2) 56(84) bytes of data.
64 bytes from www.sad.org (127.0.0.2): icmp_seq=1 ttl=64 time=0.050 ms

$ ping www.iaw.org
PING www.iaw.org (127.0.0.3) 56(84) bytes of data.
64 bytes from www.iaw.org (127.0.0.3): icmp_seq=1 ttl=64 time=0.051 ms

i per tant ja puc accedir a les webs (si la cache no juga cap mala passada)

Logs de 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/default:

ErrorLog ${APACHE_LOG_DIR}/error.log

Dins la carpeta /var/log/apache2 trobem el fitxer error.log actual, i tots els fitxers anteriors 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/default:

CustomLog ${APACHE_LOG_DIR}/access.log combined

Per exemple, el professor accedeix al recurs http://localhost/artropodes, 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 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"

En l'exemple vist a classe accedíem a https://localhost/artropodes, però no veiem el rastre dins el fitxer access.log. I gràcies a l'anterior comanda hem vist que la petjada estava al fitxer ssl_access.log que és el fitxer per defecte definit a default-ssl, doncs estàvem accedint per https.

Anàlisi d'Estadístiques a partir dels logs

Avui en dia és habitual utilitzar serveis com Google Analytics o bé alexa.com per fer un anàlisi estadístic de l'accés a la nostra web. Això implica inserir un codi dins les nostres pàgines html, i implica una comunicació (ús d'ample de banda) amb els servidors de Google o alexa.com.

L'altra possibilitiat, que és la que s'ha utilitzat tota la vida, és analitzar els logs. I tenim programari que fa la feina d'analitzar la informació dels logs, i ens la posa amb una bonica interfície gràfica. Per exemple AWStats. Per tal d'analitzar les estadístiques d'accés al nostre servidor Apache podem instal.lar AWStats.

protegir un recurs web amb login i password

Està explicat a: Instal.lació_i_configuració_d'Apache_amb_Ubuntu#Protecci.C3.B3_d.27una_carpeta_amb_login_i_password

Anem a protegir el site www.sad.org. Resumint:

AuthUserFile /home/joan/.htpasswd
AuthName "Seguretat i Alta Disponibilitat"
AuthType Basic

require user asi2a01

Ara anem a crear el fitxer .htpasswd, que ha d'estar situat en una carpeta no accessible des de la web. Per exemple /home/joan. Ha de ser la ruta que hem indicat en el fitxer .htpasswd. Fixa't que en la comanda htpasswd fiquem com a paràmetres el login (asi2a01) i el password (asi).

$ cd /home/joan
$ htpasswd -cb .htpasswd asi2a01 asi
$ cat .htpasswd 
asi2a01:BrJ91mVz.68sc

Fixa't que el password asi es guarda encriptat: BrJ91mVz.68sc. Reiniciem el servidor

$ sudo /etc/init.d/apache2 restart

I ara la cosa que falta és anar a la configuració Apache del site www.sad.org, i posar l'opció AllowOverride all

$ joe /etc/apache2/sites-available/www.sad.org

        <Directory /var/www/sad>
                Options Indexes FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
$ sudo /etc/init.d/apache2 restart

I ara ja ens demana login i pwd quan volem entrar a http://www.sad.org

https: http secure

Hypertext Transfer Protocol sobre Secure Socket Layer

https funciona pel port 443 (http escolta pel port 80)

El fitxer de configuració per defecte està a /etc/apache2/sites-available/default-ssl, i el DocumentRoot també és /var/www

Intentem accedir a https://localhost, i evidentment dóna un error: La pàgina que esteu provant de visualitzar no pot mostrar-se perquè no pot verificar-se l'autenticitat de les dades rebudes.. Necessito un certificat.

There is a default HTTPS configuration file in /etc/apache2/sites-available/default-ssl. In order for Apache2 to provide HTTPS, a certificate and key file are also needed. The default HTTPS configuration will use a certificate and key generated by the ssl-cert package. They are good for testing, but the auto-generated certificate and key should be replaced by a certificate specific to the site or server. For information on generating a key and obtaining a certificate see the section called “Certificates”

El paquet ssl-cert ja estava instal.lat.

Certificats i Autoritats de Certificació (CA)

Està molt ben explicat a:

$ openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
............++++++
.................................................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: jq****
Verifying - Enter pass phrase for server.key:
jq****
$ openssl rsa -in server.key -out server.key.insecure
$ mv server.key server.key.secure
$ mv server.key.insecure server.key
$ openssl req -new -key server.key -out server.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:Barcelona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Joan Quintana
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Joan Quintana
Email Address []:joanqc@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:      
An optional company name []:

Creating a Self-Signed Certificate

$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=ES/ST=Barcelona/L=Barcelona/O=Joan Quintana/CN=Joan Quintana/emailAddress=joanqc@gmail.com
Getting Private key

Installing the Certificate

You can install the key file server.key and certificate file server.crt, or the certificate file issued by your CA, by running following commands at a terminal prompt:

$ sudo cp server.crt /etc/ssl/certs
$ sudo cp server.key /etc/ssl/private

Un cop ja tenim un certificat, hem de fer:

$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo /etc/init.d/apache2 restart

Ara ja puc fer

i ja no em surt el missatge d'error, sinó que em surt la pantalla típica que et demana que descarreguis el certificat.

Excepcio https.jpg
No es pot confiar en la connexió

Heu demanat al Firefox connectar-se
de forma segura a localhost, però no podem confirmar que la vostra connexió ho sigui.

Normalment, quan intenteu connectar-vos de forma segura,
els llocs web us presentaran una identificació pertinent per a demostrar-vos que aneu
al lloc adequat. No obstant això, la identitat d'aquest lloc no es pot verificar.

Què caldria que fes?

Si normalment us connecteu a
aquest lloc sense problemes, podria voler dir que algú altre
vol fer-se'n amb la identitat i, per tant, no hauríeu de continuar.

Detalls tècnics

Entenc els riscos

Clico Entenc els riscos, i Afegeixo una excepció:

Si sabeu què esteu fent, podeu
dir al Firefox que confiï en la identificació del lloc.
Fins i tot, si hi confieu, aquest error podria donar-se perquè algú
estigués interferint en la vostra connexió.

No afegiu una excepció a menys
que sapigueu del cert perquè aquest lloc web no utilitza una identificació pertinent.

Finalment Confirmo l'excepció de seguretat, i ja puc veure una web segura: https://localhost

És la pàgina web per defecte definida a /etc/apache2/sites-available/default-ssl

Sortir a Internet des d'una ADSL domèstica

Tenim configurats els dominis www.sad.org i www.iaw.org en la xarxa local. Un pas més endavant seria accedir a aquests dominis des de fora de l'institut, des d'internet. Si faig una petició des de casa, el camí seria:

$ ping www.sad.org
PING www.sad.org (208.87.32.69) 56(84) bytes of data.
64 bytes from web01.hostingnet.com (208.87.32.69): icmp_seq=1 ttl=252 time=200 ms

Com veiem la IP 208.87.32.69 és una IP pública, que no és de l'institut, i per tant segur que no ho podem fer.

Per tant, el primer objectiu seria registrar un domini (per exemple, www.sadbalmes.org) a un registrador de dominis, per exemple Nominalia o Arsys.es. (Mirar el preu de registrar el domini i el parking, sense hosting). No necessitem hosting, doncs el hosting serem nosaltres mateixos.

Un cop tenim registrat el domini, hem de configurar els DNS per a aquest domini (es fa dins d'Arsys.es, en la pestanya DNS). El DNS el que fa és que una persona quan fa ping www.sadbalmes.org rebi la informació de la IP. Aleshores el que s'hauria de posar és la IP pública de l'institut.

$ ping www.jaumebalmes.net
PING www.jaumebalmes.net (80.25.160.251) 56(84) bytes of data.
64 bytes from 251.Red-80-25-160.staticIP.rima-tde.net (80.25.160.251): icmp_seq=1 ttl=252 time=140 ms

En el cas de què aquesta pràctica la vulguis fer des de casa no tens una IP pública, sinó dinàmica, i necessites un servei com dyndns.org que tradueix de forma dinàmcia noms de domini i IP's (però això ja ho veurem més endavant).

Tenint ben configurat els DNS dins d'Arsys, quan una persona faci ping www.sadbalmes.org li respondrà la IP de l'institut (80.25.160.251), que de fet representa el router.

Per tant, ara hem d'entrar en el router de l'institut i configurar les taules NAT de manera que les peticions que arriben pel port 80 es redirigeixin cap al servidor Apache. Així és com està configurat el domini jaumebalmes.net o bé el Moodle, que es poden accedir des de l'exterior.

Tenim una IP dinàmcia. Utilitzar un servei de DNS dinàmic

En els DNS d'Arsys no podem ficar una IP fixa, doncs no la tenim, hem de ficar una IP dinàmcia.

Aniríem a www.dyndns.org, i ens regitrem. El producte que necessitem és el gratis: DynDNS Free

Registraríem un New Host Name, per exemple: sadbalmes.dyndns.org. En el moment de registrar-nos hem de ficar la IP actual del router (la que ens proposa).

Ara anem a Arsys, i en l'apartat DNS del nostre domini www.sadbalmes.net, diem que el DNS és sadbalmes.dyndns.org.

Anem a veure ara com funciona una petició http:

Ara bé, la nostra IP és dinàmica. Què passa quan el nostre proveïdor (Telefònica, Jazztel,...) ens canvia la IP. Doncs que la cadena es trenca. Per tant, hem de dir a dyndns.org quina és la nostra IP actual. Això es pot fer de forma dinàmica mitjanḉant un dimoni que sempre va mirant la IP i que notifica a dyndns els canvis que puguin haver, tal com s'explica a DynDNS. En el cas d'Ubuntu:

$ sudo apt-get install ddclient

i té un fitxer de configuració a /etc/ddclient.conf.

Configuració del Router. Taules NAT

Configuració del router Comtrend CT-5365 (un router comú en ADSL domèstica)

Si vull accedir a la URL http://wiki.joanillo.org estic fent una petició a la IP 87.221.76.91 pel port 80 (protocol http):

$ PING wikijoan.dyndns.org (87.221.76.91) 56(84) bytes of data.

Però jo a casa meva puc tenir 5 ordinadors, i només un d'ells és el servidor Apache on està hostatjada la pàgina web que vull que surti a l'exterior. Dins del Router hi ha la configuració de les taules NAT, que diuen cap a on s'ha de redirigir una petició depenent del port. Així doncs, he d'afegir una nova entrada a les taules NAT i dir que les peticions pel port 80 vagin a la IP, per ex, 192.168.0.25 (evidentment és important tenir IP fixes en la xarxa local). Si tinc altres serveis a la xarxa (servidor de streaming, SSH, FTP, SGBD...) no cal que tots els servidors estiguin en la mateixa màquina.



creat per Joan Quintana Compte, setembre 2018

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines