MP08 - UF1: Servidors web i de transferència de fitxers
Paràmetres de configuració - Apache i Nginx (v)
Anem a veure altres paràmetres que podem configurar en els servidors web amb Apache i Nginx. Cal saber però:
-
Configurarem diferents Directives en Apache i Nginx que ens permetran definir la configuració necessària pel nostre servidor.
-
Apache - Podem accedir a una guia de referència de directives o bé a la pàgina inicial de documentació d'Apache i anar per temes.
-
Nginx - Podem accedir a una guia de referència de directives o bé a la pàgina inicial de documentació e Nginx i anar per temes.
-
-
En Apache la configuració la podem especificar en diferents contextos
-
server config: Configuració general per a tot el servidor
-
Virtualhost: Configuració per a un site determinat
<Virtualhost ...> ... </Virtualhost>
-
Directory: configuració que afecta un directori determinat
<Directory ...> ... </Directory>
o bé
<Location>
,<Files>
,<If>
,<Proxy>
, etc. -
.htaccess: configuració que afecta el directori i subdirectoris on es troba el fitxer
.htaccess
. Podria no afectar, tot dependrà de la directivaOverrides
-
-
Podem trobar més informació a la pàgina web de la documentació de Apache
-
El directori base on tenim els fitxers de configuració de l'Apache és
/etc/apache2
. Dins d'aquest directori trobarem el fitxer principal apache2.conf on ja se'ns informa de l'estructura de directoris/etc/apache2/ |-- apache2.conf | `-- ports.conf |-- mods-enabled | |-- *.load | `-- *.conf |-- conf-enabled | `-- *.conf `-- sites-enabled `-- *.conf
-
El directori on s'emmagatzemen els fitxers de log per defecte és
/var/log/apache2
. Dins d'aquest directori trobarem:isard@ubuntu:/~$ ls -l /var/log/apache2/ total 2890172 -rw-r----- 1 root adm 292571 Mmm DD HH:MI access.log -rw-r----- 1 root adm 2959229371 Mmm DD HH:MI error.log -rw-r----- 1 root adm 0 Mmm DD HH:MI other_vhosts_access.log
-
En els fitxers de configuració, les línies que comencen per # són comentaris i el servidor les ignora.
-
Podem incloure altres fitxers amb la directiva Include.
-
Dins el fitxer
ports.conf
s'especifica la configuració de xarxa pel procés (ports i IPs/interfícies on atendre peticions)Possible contingut del fitxer
# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default.conf Listen 80 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
-
Després tenim 3 parelles de carpetes amb el mateix nom però acabades amb
enabled
oavailable
.Apache funciona de forma que podem 'preparar' coses (mòduls, configuracions, etc.) però activar-les només si ens interessa (a partir de symlinks, ho veurem més endavant)
-
conf-*
: hi tenim configuracions -
sites-*
: les diferents configuracions pels llocs web - Hosting Virtual o https -
mods-*
: els mòduls disponibles
-
-
Les dues primeres directives que ens han de servir són:
-
DocumentRoot
: indica el directori on trobar els fitxers. Pot ser diferent per cada configuració de 'site'. L'especifiquem dins del<VirtualHost ...>
de cada site. Contextos: server config, virtual host. ElDocumentRoot
s'ha d'especificar sense una barra inclinada final. -
DirectoryIndex
: indica una llista de recursos (fitxers) a buscar quan una petició de client sol·licita un URL sense especificar el recurs. Pot ser general o particular per a qualsevol context següent: server config, virtual host, directory, .htaccess.
-
-
Altres directives:
-
Redirect
: Envia una redirecció externa demanant al client que obtingui un URL diferent. Contextos: server config, virtual host, directory, .htaccess. Com a exemple:Redirect "/cerca" "http://www.google.es/"
en aquest cas hem redirigit a un URL extern. Per a redirigir a un URL intern només cal posar com a segon paràmetre un path relatiu.
El protocol HTTP ho indica a partir dels codis 3xx on indica al client que ha de realitzar una acció addicional per a completar la petició. Aquesta acció normalment va sense interacció de l'usuari i ho fa el navegador del client.
Tenim dos tipus principals de redireccions:
-
Permanents: el recurs s'ha mogut a un altre URL per sempre. El codi és el 301. És el que cal que fem quan ho volem notificar als buscadors (per temes de page ranking principalment)
-
Temporals: el recurs existeix però es troba a un altre URL de forma temporal. El codi és el 302 i és el comportament per defecte.
Podem complementar-la amb
RedirectMatch
per tal de controlar expressions regulars, però avui en dia no és suficient. -
-
<Directory path> * * * </Directory>
: Inclou un grup de directives que només s'apliquen al directori del sistema de fitxers especificat, als subdirectoris i al seu contingut. Per exemple:<Directory /var/www/html/projecte1> Options Indexes FollowSymLinks Allowoverride None Require all granted </Directory>
El path pot contenir caràcters de comodí. Aquest path és la ruta vista des del sistema de fitxers.
Mireu també
DirectoryMatch
,Files
,FilesMatch
,Location
,LocationMatch
-
Options
: Controla quines funcions del servidor estan disponibles en un directori concret. Contextos: server config, virtual host, directory, .htaccess. Les diferents opcions possibles són:-
All
: Totes les opcions excepteMultiViews
. -
ExecCGI
: Es permet l'execució d'scripts CGI utilitzant mod_cgi. -
FollowSymLinks
: El servidor seguirà enllaços simbòlics en aquest directori. Aquesta és la configuració predeterminada. -
Includes
: S'admeten les inclusions del costat del servidor proporcionades per mod_include. -
IncludesNOEXEC
: Les inclusions del costat del servidor estan permeses, però les#exec cmd
i#exec cgi
estan desactivades. -
Indexes
: Si es demana un URL que s'assigna a un directori i no hi ha cap fitxer deDirectoryIndex
( per exemple , index.html) en aquest directori,mod_autoindex
retornarà una llista amb format del directori. -
MultiViews
: https://httpd.apache.org/docs/2.4/content-negotiation.html#multiviews -
SymLinksIfOwnerMatch
:
-
-
Alias
: Mapeja un URL dins el nostre site a un directori determinat dins el sistema de fitxers del servidor. Cal que tinguem accés a aquest directori. Un exemple seria:Alias "/imatges" "/ftp/pub/image" <Directory "/ftp/pub/image"> Require all granted </Directory>
-
Require
: Serveix per a definir el control d'accés a diferents llocs del servidor. Per a permetre accés a tothom especificaremRequire all granted
, però sempre podem posar seguretat a nivell de IP, d'usuari, etc. Recomano accedir a la documentació d'Apache on parla de control d'accés.
-
-
En Nginx la configuració la podem especificar en els següents contextos:
-
Podem trobar més informació a la pàgina web de la documentació de Nginx
-
El directori base on tenim els fitxers de configuració del Nginx és
/etc/nginx
. Dins d'aquest directori trobarem el fitxer prinipal nginx.conf on ja se'ns informa de l'estrutura de directoris/etc/nginx/ |-- nginx.conf |-- mime.types | |-- conf.d | `-- *.conf | |-- modules-available | |-- modules-enabled | `-- *.conf | |-- sites-available | `-- default | `-- sites-enabled `-- default
-
El directori on s'emmagatzemen els fitxers de log per defecte és
/var/log/nginx
. Dins d'aquest directori trobarem:isard@ubuntu:/~$ ls -l /var/log/nginx/ total 2890172 -rw-r----- 1 root adm 9915 Nov 4 18:22 access.log -rw-r----- 1 root adm 2220 Nov 10 16:30 error.log
-
En els fitxers de configuració, les línies que comencen per # són comentaris i el servidor les ignora.
-
Les directives que entrem en els fitxers de configuració acaben en punt i coma
;
. -
Podem incloure altres fitxers amb la directiva include.
-
Després tenim 2 parelles de carpetes amb el mateix nom però acabades amb
enabled
oavailable
.Apache funciona de forma que podem 'preparar' coses (mòduls, configuracions, etc) però activar-les només si ens interessa (a partir de symlinks, ho veurem més endavant)
-
sites-*
: les diferentes configuracions pels llocs web - Hosting Virtual o hppts -
mods-*
: els mòduls disponibles
-
-
Al directori
conf.d
hi tenim diferents configuracions, en fitxers acabats en.conf
-
Les dues primeres directives que ens han de servir són:
-
root /var/www/html
: especifica el directori on ha d'anar a buscar els fitxers de la web o del directori virtual. En l'exemple/var/www/html
. -
index index.html index.htm index.nginx-debian.html;
: indica una llista de recursos, fitxers, a buscar, quan una petició de client sol·licita un URL sense especificar el recurs. Pot ser general o particular per a qualsevol context següent: http, server, location.
-
-
Altres directives:
-
location [ = | ~ | ~* | ^~ ] uri { ... }
: Inclou un grup de directives que només s'apliquen a lauri
especificada Per exemple:Lalocation /despres { # Ruta absoluta del directori al sistema de fitxers alias /var/www/despres; index despres.html; autoindex on; }
uri
es pot definir mitjançant una cadena de prefix o una expressió regular.Utilitzant el modificador
=
, definim una coincidència exacta d'URI i ubicació.Les expressions regulars poden portar el prefix
~*
per tal de no distingir entre majúscules i minúscules o el prefix~
per tal que distingeixi entre majúscules i minúscules. -
return
: Envia una redirecció externa demanant al client que obtingui un URL diferent. Contextos: server, location, if. Com a exemple:location ~* ^/cerca { return 307 http://www.google.es; }
en aquest cas hem redirigit a un URL extern. Per a redirigir a un URL intern només cal posar com a segon paràmetre un path relatiu.
El protocol HTTP ho indica a partir dels codis 3xx on indica al client que ha de realitzar una acció addicional per a completar la petició. Aquesta acció normalment va sense interacció de l'usuari i ho fa el navegador del client.
Tenim dos tipus principals de redireccions:
-
Permanents: el recurs s'ha mogut a un altre URL per sempre. El codi és el 301. És el que cal que fem quan ho volem notificar als buscadors (per temes de page ranking principalment)
-
Temporals: el recurs existeix però es troba a un altre URL de forma temporal. El codi és el 302 i és el comportament per defecte.
-
-
algunes de les opcions que podem habilitar i deshabilitar en Apche, en la directiva
Options
, en nginx cal configurar-ho amb diferents directives:-
disable_symlinks off
: El servidor SÍ seguirà enllaços simbòlics en aquest context. Aquesta és la configuració predeterminada. -
autoindex off
: Si es demana un URL que s'assigna a un directori i no hi ha cap fitxer deindex
(per exemple,index.html
) en aquest directori, es retornarà, o no una llista amb format del directori. Per defecte està configurat amb la opcióoff
. Per habilitar-ho cal especificar el valor a ´on´.
-
-
allow
/deny
: S'utilitza per definir el control d'accés a diferents llocs del servidor. Per a permetre accés a tothom especificaremallow all
però sempre podem posar seguretat a nivell de IP. Recomano accedir a la documentació de nginx on parla de [control d'accés]control_acces_nginx]{target="_blank"} a tots nivells.location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; }
-
Fitxers de log
-
error_log
: Especifica el nom i ubicació del fitxer on es guardarà el registre dels errors que succeeixin al servidor. Contextos: http, server, location, if in location, limit_except. També podem especificar el nivell de log:debug
,info
,notice
,warn
,error
,crit
,alert
, oemerg
. -
access_log
: Especifica el nom, la ubicació i el format del fitxer de log de les peticions al servidor. Contextos: http, server, location, if in location, limit_except.
Opcions a tenir en compte en Producció
-
Servertokens
: Controla les capçaleres de resposta del nostre servidor permetent mostrar o ocultar certa informació. Contextos: server config. -
MaxKeepAliveRequests
: especifica el nombre de connexions obertes que pot gestionar alhora. -
TimeOut
: Permet establer el temps màxim, en segons, que esperarà per a les connexions amb els clients. -
LogLevel
: Controla el tipus de missatges que apareixeran al fitxer d'errors.
-
server_tokens off
: Amaga la versió del sistema. Contextos: http, server, location. -
desactivem els mètodes que no s'utilitzin al nostre servidor web. Per això, cal afegir al fitxer de configuració, al context que creiem oportú, les següents línies:
## Mètodes que acceptem: GET HEAD POST if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } ## Bloqueja DELETE, SEARCH i altres mètodes
-
en linux, posem els fitxers del servidor web en una partició a part i muntem la partició amb els permisos necessaris. Per exemple, muntem la partició
/dev/sda3
al directori/var/www/nginx
amb permisos noexec, nodev i nosetuid/dev/sda3 /var/www/nginx ext4 defaults,nosuid,noexec,nodev 1 2
-
en linux, podem afegir el paquet
nginx-extras
i ens permetrà configurar nous paràmetres, com aramore_set_headers 'Server: Algun nom pel servidor';
havent instal·lat el paquet de la forma habitual
apt install nginx-extras
La documentació del mòdul
headers-more
la podem trobar aquí
Mòduls per habilitar o almenys tenir en compte en Apache
-
userdir
: Permet configurar un espai web per a cadascun dels usuaris del sistema que tinguem creats. Podem escollir la ubicació i nom de la carpeta a crear. Per defecte serà el directori$HOME/public_html
. Aquest pot canviar-se de nom i fins i tot de lloc. -
alias
: defineix els alias tot i que seran per a tots els sites, ja que, en carregar el mòdul es defineix en el context de server.Sovint definirem els alias dins de cadascun dels Hosts Virtuals.
-
autoindex
: el tenim normalment ja habilitat, però és interessant veure el contingut deautoindex.conf
per si volem canviar les icones per defecte de cada extensió de fitxer. -
dir
: defineix la directivaDirectoryIndex
pel context de servidor. Tot i això, podem redefinir-lo en cas necessari a altres contextos com server config, virtual host, directory i .htaccess. -
info
: permet accedir a http://ipDelServidor.cat/server-info i veure'n informació del servidor. Per a provar-ho possiblement cal modificar la líniaRequire local
pel que creiem oportú. -
status
: permet accedir a http://ipDelServidor.cat/server-status i veure'n informació de l'estat. Per a provar-ho possiblement cal modificar la líniaRequire local
pel que creiem oportú.