Salta el contingut

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ò:

  • 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 directiva Overrides

  • 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 o available.

    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. El DocumentRoot 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 excepte MultiViews.

      • 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 de DirectoryIndex ( 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 especificarem Require 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: NginxContextos

    • http: Configuració general per a tot el servidor web

    • server: Configuració general per a tot un site

    • location: Configuració general per a directoris virtuals

    • events: Configuració general per a tot el servidor

  • 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 o available.

    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 la uri especificada Per exemple:

      location  /despres {
          # Ruta absoluta del directori al sistema de fitxers
          alias /var/www/despres;
          index despres.html;
          autoindex on;
      }
      
      La 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 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 de index (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 especificarem allow 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

Documentació de logs en Apache

  • ErrorLog: Especifica el nom i ubicació del fitxer on es guardarà el registre dels errors que succeeixin al servidor. Contextos: server config, virtual host.

  • CustomLog: Especifica el nom, la ubicació i el format del fitxer de log de les peticions al servidor. Contextos: server config, virtual host.

Documentació de logs en Nginx

  • 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, o emerg.

  • 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 ara

    more_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 de autoindex.confper si volem canviar les icones per defecte de cada extensió de fitxer.

  • dir: defineix la directiva DirectoryIndex 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ínia Require 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ínia Require local pel que creiem oportú.