---
# System prepended metadata

title: 001. Servidor Web Apache
tags: [' apache', daw, ' M8']

---

<div style="width: 30%; margin-left: auto;">
    
![](https://hackmd.io/_uploads/HJiR4eGJT.png)    
    
</div>

<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Llicència de Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />Aquesta obra està subjecta a una llicència de <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Reconeixement-CompartirIgual 4.0 Internacional de Creative Commons</a>


# El servidor web Apache2.
[vincle a font en MarkDown](https://hackmd.io/@JdaXaviQ/BJ17ycQut)

---
## 1. Instal·lació a Ubuntu.
```bash=
$ sudo apt update
$ sudo apt install apache2
```
## Fitxers de configuració.
Els fitxers de configuració s'allotjen al path: __/etc/apache2/__
* __apache2.conf__: És el fitxer de configuració principal. Podríem realitzar gairebé tota la configuració del nostre servidor web dins d'aquest fitxer, però es recomana estructurar les diferents directives agrupades en diferents fitxer per augmentar la facilitat de comprensió. Normalment en aquest fitxer configurem els paràmetres globals, és el punt d'accés a la configuració per part del servei d'apache2.
* __envvars__: Fitxer on es configuren les variables d'entorn que desprès utilitzarem al fitxers de configuració.
* __ports.conf__: Utilitzem aquest fitxer per especificar quins ports estaran disponibles pels diferents hosts virtuals. Per defecte habilitarem el port 80 si utilitzem HTTP i el 443 si utilitzem HTTPS.
* __conf.d/__: Directori utilitzat per aspectes específics de configuració com pot ser la configuració SSL i d'altres parametritzacions de seguretat.
* __sites-available/__: En aquest directori configurarem els diferents hosts virtuals que dessitgem utilitzar. __Nota:__ Aquí desem les configuracions _'disponibles'_ no les actives.
* __sites-enabled/__: En aquest directori si que es troben les configuracions actualment en ús. És una pràctica habitual que els fitxers d'aquest directori siguin '_soft links_' d'alguns (o tots) els fitxers allojats a sites-available. Apache2 ens proporciona una utilitat per crear aquest links i una altra per eliminarlos: amb __a2ensite__ '_habilitem_' un host virtual, es a dir crea el soft link del host virtual triat. Amb __a2dissite__ eliminem el soft link.
* __mods-available__: Conté els mòduls instal·lats al sistema.
* __mods-enabled__: De manera similar a sites-enabled conté links als mòduls que estan en ús.
### apache2.conf
Aquest és el punt d'accés a la configuració del nostre servei apache2, la resta de fitxers i directoris de configuració s'han de cridar mitjançant directives '__Include__' o '__IncludeOptional__'.
Aquí trobem diferents configuracions globals com per exemple:
* PidFile: conté la ubicació del fitxer on desem el PID del executable en curs.
* Timeout: El nombre de segons que tenim de marge per servir una pàgina web. Per defecte és de 300 (__5 minuts!!!__)
* KeepAlive: Flag que indica si podem fer servir la mateixa connexió TCP per a servir peticions consecutives. Per defecte està habilitat.
* User i Group: L'usuari i el grup que utilitzarà el servei per executarse. Afecta als permisos que tindrà per llegir i escriure a diferents ubicacions.
* Paths dels diferents logs del servei.
* Directives include d'altres fitxers de configuració.
* Definició de diferents formats de logs i els seus alias (LogFormat).
* Directory: Defineix com es realitza l'accés als diferents directoris del nostre sistema de fitxers. Per defecte, es denega l'accés al directori arrel '/' i es permet als directoris '/var/www/' i '/usr/share/'.

Podem observar que per defecte, es fa l'include de manera opcional dels fitxers a dins de 'sites-enabled' però no als de 'sites-available'.

## Servidors virtuals (virtual hosts).
El servidor web Apache2 ens permet simular diferents servidors web en un de sol, podem respondre contingut diferent si la petició ens arriba per una xarxa diferent, lliurar el contingut de diferents carpetes segons la informació rebuda al camp de servidor de la URL, servir diferents aplicacions o pàgines a diferents ports, etc.
La configuració dels diferents servidors virtuals te un aspecte semblant a això:
```
<VirtualHost <ip>:<port>>
    ServerName <nom_del_servidor_com_arriba_per_la_URL_incloent_domini>
    DocumentRoot <path_local_on_desem_les_nostres_pàgines_web>
    <D'altres configuracions avançades si s'escau>
</VirtualHost>
```
### Exemple d'ús.
Podem simular dos servidors diferents depenent del nom de host:
```
<VirtualHost *:80>
    ServerName www.localhost
    DocumentRoot "/var/www/html"
</VirtualHost>

<VirtualHost *:80>
    ServerName api.localhost
    DocumentRoot "/var/www/api"
</VirtualHost>
```