Servidors Web. Apache. Instal.lació i Configuració I

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Què és un servidor Web?

Instal.lació de l'Apache

Abans d'instal.lar-nos un projecte com l'Apache, hauríem de passar per la web oficial i mirar-nos la documentació:

Documentació oficial de l'Ubuntu (versions LTS) per al Servidor Apache:

Instal.lació des de les fonts

Apache és un servei que s'executa en un servidor (típicament el nostre ordinador farà de servidor Web en aquesta assignatura). El servei Apache és un programa, que té un codi font que s'ha d'instal.lar en el nostre servidor. Com a projecte de codi lliure, tenim la possibilitat de descarregar el codi font, estudiar-lo, i fins i tot compilar-lo des de les fonts. A classe mirem el procediment per fer-ho, però instal.lar Apache des de les fonts és opcional. Millor fer-ho instal.lant el paquet Debian com s'explica més avall.

Instal.lar Apache des de les fonts:

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

Veiem que el projecte original està escrit amb llenguatge C, la qual cosa no ens hauria de sorprendre.

Instal.lació amb paquet Debian

Apache2.png

NOTA. Aquest petit tutorial està actualitzat a Ubuntu 16.04 en una màquina acabada d'instal.lar.

En una màquina acabada d'instal.lar no existeix cap servidor web en funcionament:

$ sudo apt-get install apache2

i un cop instal.lat ja funciona:

i ens dóna molt informació que llegim amb deteniment

It works!

This is the default welcome page used to test the correct operation of the Apache2 server after installation on Ubuntu systems. It is based on the equivalent page on Debian, from which the Ubuntu Apache packaging is derived. If you can read this page, it means that the Apache HTTP server installed at this site is working properly. You should replace this file (located at /var/www/html/index.html) before continuing to operate your HTTP server.

If you are a normal user of this web site and don't know what this page is about, this probably means that the site is currently unavailable due to maintenance. If the problem persists, please contact the site's administrator. Configuration Overview

Ubuntu's Apache2 default configuration is different from the upstream default configuration, and split into several files optimized for interaction with Ubuntu tools. The configuration system is fully documented in /usr/share/doc/apache2/README.Debian.gz. Refer to this for the full documentation. Documentation for the web server itself can be found by accessing the manual if the apache2-doc package was installed on this server.

The configuration layout for an Apache2 web server installation on Ubuntu systems is as follows:

/etc/apache2/
|-- apache2.conf
|       `--  ports.conf
|-- mods-enabled
|       |-- *.load
|       `-- *.conf
|-- conf-enabled
|       `-- *.conf
|-- sites-enabled
|       `-- *.conf

Document Roots

By default, Ubuntu does not allow access through the web browser to any file apart of those located in /var/www, public_html directories (when enabled) and /usr/share (for web applications). If your site is using a web document root located elsewhere (such as in /srv) you may need to whitelist your document root directory in /etc/apache2/apache2.conf.


Configuració de l'Apache 2

Un cop instal.lat l'Apache ja està arrencat el servei.

$ ps aux | grep apache2
$ ps aux | grep apache2
root      2800  0.0  0.1  71568  4552 ?        Ss   16:07   0:00 /usr/sbin/apache2 -k start
www-data  2803  0.0  0.1 360732  6012 ?        Sl   16:07   0:07 /usr/sbin/apache2 -k start
...

Veiem que podem tenir diferentes línies. El servei Apache és el que el propietari és el root. Aquells processos en què el propietari és www-data es corresponen al nostre navegador web i les pestanyes que tenim obertes.

La versió que tenim instal.lada:

$ apachectl -v
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2018-06-27T17:05:04

Aturar i arrencar el servei.

Ho podem fer de vàries maneres.

$ sudo systemctl start apache2
$ sudo systemctl stop apache2
$ sudo systemctl status apache2

Per veure totes les opcions: $ sudo systemctl --help

Una altra manera:

$ sudo service apache2
Usage: apache2 {start|stop|graceful-stop|restart|reload|force-reload}

i la manera antiga:

$ sudo /etc/init.d/apache2 restart
$ sudo /etc/init.d/apache2 --help
Usage: apache2 {start|stop|graceful-stop|restart|reload|force-reload}

Podem aturar el servei:

$ sudo /etc/init.d/apache2 stop

i la pàgina http://localhost deixa de funcionar (sempre molt de compte amb la cache!!)

Podem tornar a fer start. També podem fer restart o reload. Recordar que sempre que es canvien els fitxers de configuració s'ha de tornar a arrencar el servei (o fer un reload).

Fitxer index.html

Quan fem

en realitat estem fent

Anem a localitzar aquest fitxer. El trobarem a /var/www/html.

Edita el fitxer index.html i mira el seu contingut. Canvia el contingut del fitxer, i observa com efectivament canvia el contingut de la pàgina http://localhost.

Recorda que index.html és una pàgina web, escrita amb llenguatge HTML. Hauràs de respectar la sintaxi HTML per tal d'editar el fitxer.

Fitxers de configuració

Pots trobar informació dels fitxers de configuració a:

$ ls /etc/apache2/

apache2.conf    conf-enabled  magic           mods-enabled  sites-available
conf-available  envvars       mods-available  ports.conf    sites-enabled
...
AccessFileName .htaccess
...
ErrorLog ${APACHE_LOG_DIR}/error.log
...
LogLevel warn
...
# Include all the user configurations:
Include httpd.conf
...
# Include ports listing
Include ports.conf
...
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""
...
# Include the virtual host configurations:
Include sites-enabled/
...

Veiem que el fitxer httpd.conf i ports.conf s'han d'incloure en aquest fitxer. És a dir, és com si tot el contingut d'aquests dos fitxers els incloguéssim.

Recorda que:

En les carpetes sites-available i sites-enabled hi ha la configiuració dels sites per defecte, que també podrem editar, configurar i afegir.

A sites-available i sites-enabled trobem els següents arxius:

$ ls sites-available

default
default-ssl

D'aquí poc editarem aquests arxius.

$ ls -la /etc/apache2/sites-enabled

000-default -> ../sites-available/default
default-ssl -> ../sites-available/default-ssl

Veiem que és un enllaç simbòlic als fitxers anteriors. És a dir, el que hi ha a sites-enabled és una còpia del que hi ha a sites-available. Editant el fitxer default de sites-available ja queda modificat el que tenim a sites-enabled.

Crear un site que pengi de /var/www/html

Editem el fitxer /etc/apache2/sites-available/000-default.conf, i veiem que:

DocumentRoot /var/www/html

És aquí on està definit el lloc per defecte on anar a buscar el contingut web. Quan fem http://localhost, estem buscant el fitxer index.html que està a /var/www/html/. Si volem crear el site

el més senzill és crear la carpeta balmes/ dins de /var/www/html, i crear el fitxer index.html i tota la carpeta de directoris.

$ sudo joe /var/www/html/balmes/index.html

<html>
<head>
<title>Balmes</title>
</head>
<body>
Web del Balmes
</body>
</html>

Però també podem crear sites que no pengin de /var/www/html, com veurem ara mateix.

La web de l'assignatura IAW

Objectiu: anem a crear la web de l'assignatura IAW, que típicament estarà en el home de l'alumne: /home/alumne/IAW/html.

En l'assignatura IAW crearem petites pàgines web al llarg del curs (per exemple, quan aprenguem llenguatge PHP). Una possibilitat és crear la carpeta /var/www/iaw, i crear aquí el nostre contingut web. El problema està en què /var/www té permisos especials. No és bona idea treballar en aquesta carpeta (encara que ho pots fer). Nosaltres ho farem d'una altra manera. La web de l'assignatura estarà en el home de l'alumne.

Àlies iaw/ associat a una carpeta en el /home

Aquesta part que expliquem ara és molt important. Anem a configurar un site que serà la web de l'assignatura. A aquestes altures ja deus tenir una carpeta per l'assignatura. Típicament serà /home/alumne/IAW (en comptes de alumne serà el teu login, evidentment). En aquesta carpeta és on fiques tots els apunts i fitxers generats en l'assignatura. És una bona idea que totes les pàgines web que generis pengin d'aquesta carpeta. Típicament crearàs la carpeta

(en comptes de html és típic posar web, www, etc)

Aquesta serà la manera de treballar: una carpeta per a l'assignatura, i a dins una carpeta html/ on ficarem el contingut web.

Ara ja podem crear la plantilla per a les webs que farem. Crearem un fitxer index.html que ens servirà de menú de tot el que anem fent al llarg de l'assignatura.

$ joe /home/alumne/IAW/html/index.html
<html>
<head>
<title>Assignatura IAW</title>
</head>
<body>
<h1>Assignatura IAW</h1>
<ul>
<li><a href="prova1.html">prova1</a></li>
<li><a href="prova2.html">prova2</a></li>
</ul>
</body>
</html>

I també pots crear aquestes dues webs de prova, prova1.html i prova2.html:

<html>
<head>
<title>Prova 1</title>
</head>
<body>
<h1>Prova 1</h1>
</body>
</html>

<html>
<head>
<title>Prova 2</title>
</head>
<body>
<h1>Prova 2</h1>
</body>
</html>

El que volem ara és que al fer http://localhost/IAW ens aparegui la web de l'assignatura. Per tant, el que hem de fer és crear el site virtual IAW/, que és un Alias associat a /home/alumne/IAW/html. Anem a fer-ho.

Editem el fitxer /etc/apache2/sites-available/000-default.conf, i afegirem un nou Alias, a sota de tot, just abans del </VirtualHost>. Senzillament:

    Alias /IAW "/home/alumne/IAW/html"
    <Directory "/home/alumne/IAW/html">
        Require all granted
    </Directory>

NOTA: Si tenim experiència amb Apache2.2, i ara estem amb Apache2.4, hem de tenir en compte que hi ha directives que han canviat (http://httpd.apache.org/docs/current/upgrading.html). Les directives tipus Allow ara ja no s'utilitzen.

És a dir, estem associant el lloc virutual /IAW a la carpeta de l'assignatura.

Recorda fer, doncs hem canviat un fitxer de configuració:

$ sudo /etc/init.d/apache2 reload

NOTA. Vés molt de compte sempre amb la cache, que et pot fer jugar males passades.

Algunes directives importants

index.html, default.html, index.php

No és necessari tenir un fitxer index.html. També és típic que el fitxer d'entrada es digui index.htm, default.html, default.htm, index.php. Això ho controlaràs amb la directiva

DirectoryIndex index.html default.html index.php

que et marca l'ordre.

NOTA: és possible que a hores d'ara no puguis executar fitxers PHP. Per exemple, prova de fer index.php:

<?php phpinfo();?>

De seguida ho arreglarem.

Crea el fitxer entrada.htm, i fés que aquesta sigui el punt d'entrada de la teva web.

Require (Allow, deny)

A l'apache2.4 tenim la directiva Require per determinar si un client pot accedir al servidor web (a l'Apache 2.2 teníem les directives Allow, Deny).

Com a norma general:

Require all granted

Si només volem acceptar peticions que vinguin de localhost farem:

Require all denied
Require ip 127.0.0.1

I si volem accedir amb la IP:

Require all denied
Require ip 192.168.0.57

I si volem accedir a tot el rang de IPs:

Require all denied
Require ip 127.0.0.0/255.0.0.0 ::1/128

Llistar el directori

$ mv index.html index.html.bak

Ara no existeix el fitxer index.html

        DirectoryIndex disabled
        Options Indexes

Veiem que es llista el contingut de tot el directori.

NOTA: n'hi ha prou fer Options +Indexes

Redireccions

A vegades hauràs vist que una url et redirecciona a una altra url. Això de fet es pot fer des del codi HTML o el codi PHP. Però és el mateix servidor Apache que també ho pot fer.

Anem a fer una redirecció senzilla:

    Alias /IAW "/home/joan/IAW/html"
    <Directory "/home/joan/IAW/html">
        Require all granted
        Redirect "/IAW" "/IAW2"
    </Directory>

    Alias /IAW2 "/home/joan/IAW/html/prova"
    <Directory "/home/joan/IAW/html/prova">
        Require all granted
    </Directory>
</VirtualHost>


Crea la carpeta IAW/html/prova, i a dins fica un fitxer index.html.

Per tant:

et redirecciona a:

Configurar el Apache per utilitzar el port 8080

A /etc/apache2/ports.conf puc canviar el port per defecte:

NameVirtualHost *:8080
Listen 8080

A més, a /etc/apache2/sites-available/000-default.conf he de dir que els VirtualHosts treballin en el port 8080:

<VirtualHost *:8080>

i ara ja tenim el servidor Apache funcionant pel port 8080:

Tornar a deixar-ho com estava.

Protegir un site amb password

Hem vist en el fitxer apache2.conf que dins de cada directori puc ficar directives que s'apliquen al directori.

#
# AccessFileName: The name of the file to look for in each directory  
# for additional configuration directives.  See also the AllowOverride
# directive.
#

AccessFileName .htaccess

Anem a posar un login i pwd per entrar a l'aplicació http://localhost/iaw/

Podem seguir:

.htaccess establirà el tipus de permís necessari i quins usuaris poden accedir a quins arxius, mentre que .htpasswd guardarà el nom d'usuario i la constrasenya de cadascun d'ells.

fitxer .htaccess

Aquest arxiu el col.locarem en la carpeta que volem protegir: /home/joan/IAW/html/. Conté:

AuthUserFile /home/joan/.htpasswd
AuthName "Assignatura IAW"
AuthType Basic

require user joan

L'arxiu de contrassenyes s'ha de posar fora de l'abast de la web (/home/joan/IAW/html està fora de la web, doncs la web accedeix a la carpeta html).

require user joan otrousuario unusuariomas

on es poden especificar 2 o més usuaris. També:

require valid-user

on poden entrar tots els usuaris llistats a .htaccess.

També es pot protegir un arxiu. Per ex,

AuthUserFile /home/joan/.htpasswd
"Assignatura IAW"
AuthType Basic

<Files "fitxer1.html">
 Require valid-user
</Files>

fitxer .htpasswd

Aquest fitxer ocult conté una llista de noms i contrassenyes, en format usuari:contrasenya. Per ex:

joan:12JvVkeJRgm8A

La contrasenya està encriptada amb una variació de l'algorisme MD5 realitzada per Apache.

Per escriure en el fitxer .htpasswd utilitzem la utilitat htpasswd.

Em situo a /home/joan/, que és on ha d'estar el fitxer .htpasswd:

$ htpasswd -cb .htpasswd joan ****
$ cat .htpasswd 
joan:gPQnbGnD6l2Tw

reiniciem el servidor

$ sudo /etc/init.d/apache2 restart

i ja tenim el recurs http://localhost/iaw protegit amb login i password

NOTA: per tal de què funcioni és important la directiva AllowOverride all en la configuració del nostre site en el fitxer default. Si tenim AllowOverride None no funciona.

    Alias /IAW "/home/joan/IAW/html"
    <Directory "/home/joan/IAW/html">
        Require all granted
        AllowOverride all
    </Directory>

Funcionalitat PHP i d'altres

De moment no tenim la funcionalitat php instal.lada:

$ sudo joe /home/joan/IAW/html/index.php
<?php phpinfo();?>

I és que el servidor Apache no sap en aquests moments què és PHP, no sap interpretar les comandes. He d'instal.lar els mòduls de PHP per a Apache, a través dels paquets Debian. Per saber quins són necessaris farem:

$ sudo apt-cache search php | grep apache2

libapache2-mod-php - server-side, HTML-embedded scripting language (Apache 2 module)
libapache2-mod-php5filter - server-side, HTML-embedded scripting language (apache 2 filter module)

També podíem fer al revés:

$ sudo apt-cache search apache2 | grep php

libapache2-mod-php - server-side, HTML-embedded scripting language (Apache 2 module)
php5-cgi - server-side, HTML-embedded scripting language (CGI binary)
libapache2-mod-php5filter - server-side, HTML-embedded scripting language (apache 2 filter module)
php5-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)

Està clar que hem d'instal.lar el paquet libapache2-mod-php:

$ sudo apt-get install libapache2-mod-php
$ sudo /etc/init.d/apache2 restart

i ara ja funciona index.php. Quan el servidor Apache ha d'executar un script PHP, separa la part de HTML i la part de PHP (fàcil tenint en compte que hi ha els tags <?php ?> per saber on comença el codi). El codi PHP s'envia al preprocessador de PHP, i finalment s'ajunta el resultat amb el codi HTML, i ja es pot servir al client la pàgina web final.

En la configuració de l'Apache veiem que el mòdul de PHP està habilitat:

$ cd /etc/apache2/mods-available

$ ls -la
...
-rw-r--r-- 1 root root  546 des 12  2016 php7.0.conf
-rw-r--r-- 1 root root   59 des 12  2016 php7.0.load
...

De la mateixa manera que Apache pot executar PHP, també pot executar d'altres llenguatges de script. Per ex:

Accedir amb la IP

És una bona pràctica accedir al teu servidor web fora de localhost. Per exemple, pots deixar que els teus companys entrin al teu servidor web. O d'una màquina virtual pots accedir al servidor web que hi ha en una altra màquina virtual.

A part de la configuració 'Required all granted, recorda que els paquets IP han de passar per diferents filtres: proxy, firewalls, switchos, els ports han d'estar oberts. És per això que a classe, on els alumnes es connecten majoritàriament per wireless, es fa difícil accedir a una IP d'un company.

El que sí que pots fer és accedir entre dues màquines virtuals.

HTTPS: HTTP segura

HTTPS: Hypertext Transfer Protocol sobre Secure Socket Layer

https funciona pel port 443 (segons consta en el fitxer ports.conf).

Important llegir:

El mòdul mod_ssl afegeix una important característica al servidor Apache2: la possibilitat d'encriptar les comunicacions. Quan el teu navegador es comunica via SSL, aparei el prefix https:// en la Uniform Resource Locator (URL).

El mòdul mod_ssl està disponible en el paquet apache2-common. Per tant, l'instal.laríem fent

$ sudo apt-get install apache2-common

però no cal fer-ho perquè s'instal.la per defecte amb l'Apache. El que no es fa per defecte és habilitar aquest mòdul, i per tant l'habilitem manualment:

$ sudo a2enmod ssl

El fitxer de configuració per defecte està a /etc/apache2/sites-available/default-ssl.conf. Però no n'hi ha prou en configurar aquest fitxer. Si volem utilitzar https necessitem un certificat i una clau. La configuració HTTPS per defecte utilitza un certificat i una clau generades pel paquet ssl-cert (que ja estava instal.lat). Estan bé per fer proves, com és el nostre cas, però el certificat i la clau auto-generades s'haurien de reemplaçar per un certificat específic del centre o servidor al qual pertanyem. Una mica més avall s'explicarà com generar el certificat.

A part de tenir el mòdul habilitat, per utilitzar https hem d'habilitar el fitxer de configuració:

$ sudo a2ensite default-ssl

Reiniciem el servei i ja funciona. Clico Entenc els riscos, i Afegeixo una excepció.

Excepcio https.jpg
$ sudo service apache2 restart

Ara volem que la web de l'assignatura sigui segura:

Hem de crear el lloc virtual IAWSEC. Editem el fitxer /etc/apache2/sites-available/default-ssl. Afegim:

    Alias /IAWSEC "/home/joan/IAW/html"
    <Directory "/home/joan/IAW/html">
        Require all granted
    </Directory>

Petits errors

Quan arrenquem el servei Apache potser tenim aquest missatge:

$ sudo /etc/init.d/apache2 reload
 * Reloading web server config apache2    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

Si no volem que ens aparegui aquest missatge, senzillament ficarem a la primera línia:

$ sudo joe /etc/apache2/httpd.conf
ServerName IAW

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