MP08 - UF1: Servidors web i de transferència de fitxers
Funcionament del servidor en una petició web - Apache2 i Nginx (iii)
Un cop ens arriba la petició i se'n fa l'anàlisi de les capçaleres, hem de veure quina configuració de site cal aplicar-li. Cal que anem a sites-enabled.
Per defecte ens trobarem la 000-default.conf
a Apache i default
a Nginx.
Aquesta és l'entrada genèrica per a quan no tenim el servidor configurat per atendre aquell domini o host en concret.
Aquest nom del servidor o domini, el podem definir a través de la directiva ServerName
a Apache i server_name
a Nginx..
En aquest fitxer, tenim definit l'entorn web per defecte amb la directiva VirtualHost
, des de l'etiqueta d'obertura a la de finalització.
Contingut del fitxer 000-default.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
En aquest fitxer hi ha configurat el mínim necessari:
-
DocumentRoot /var/www/html
: especifica el directori on ha d'anar a buscar els fitxers de la web. En l'exemple/var/www/html
. -
ErrorLog ${APACHE_LOG_DIR}/error.log
: especifica el fitxer on s'emmagatzemen els errors produïts al servidor web, fins i tot els errors, producte d'un error de codi en php. En l'exemple s'utilitzen variables d'entorn del fitxerenvvars
-
CustomLog ${APACHE_LOG_DIR}/access.log combined
: especifica el fitxer on s'emmagatzemen els accessos o intents d'accés al servidor web. -
els fitxers que buscarà, i l'ordre, quan no s'especifiqui cap fitxer concret sinó un directori a l'URL, s'especifiquen al fitxer
/etc/apache2/mods-available/dir.conf
Executantgrep -ir DirectoryIndex /etc/apache2/*
Obtenim .../etc/apache2/mods-available/dir.conf: DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
Contingut del fitxer default
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}
En aquest fitxer hi ha configurat el mínim necessari:
-
root /var/www/html
: especifica el directori on ha d'anar a buscar els fitxers de la web. En l'exemple/var/www/html
. -
index index.html index.htm index.nginx-debian.html;
: especifica els fitxers que buscarà, i l'ordre, quan no s'especifiqui cap fitxer concret sinó un directori. -
els fitxers de log on s'emmagatzemen els accessos i errors al site s'especifiquen al fitxer
/etc/ngingx/nginx.conf
Executantgrep -ir "\/var\/log" /etc/nginx/*
Obtenim ...nginx.conf: access_log /var/log/nginx/access.log; nginx.conf: error_log /var/log/nginx/error.log;
El protocol HTTP
-
El protocol HTTP controla l'intercanvi de documents d'hipertext i multimèdia via web.
-
La primera versió va ser la 0.9 llançada el 1991. Va ser millorada amb l'HTTP/1.0 llançat el 1996, finalment, el 1999 surt la versió 1.1.
-
És un protocol de petició-resposta i la seva versió estable és la HTTP/1.1.
- Així i tot, el maig del 2015 es llança l'HTTP/2. Actualment molts servidors web n'ofereixen compatibilitat.
-
L'octubre de 2018 es posa nom al protocol HTTP/3 tot i que no serà fins al 6 de juny de 2022 que l'IETF el publica com un estàndard. HTTP/3 utilitza el protocol de transport QUIC que es basa en UDP en comptes de TCP. Segons Google, QUIC és molt semblant a TCP+TLS+HTTP/2, però implementat sobre UDP.
Més informació aquí
-
Totes aquestes versions disposen d'una variant xifrada que es coneix com a HTTPS.
-
Per determinar els recursos tenim els URI (Uniform Resource Identifier).
-
Els URI bàsicament identifiquen un recurs a partir del nom del servidor, el port de les comunicacions, etc.
-
En HTTP utilitzem un tipus específic que són els URL (Uniform Resource Locator)
-
L'URL està formada per diversos elements cadascun dels quals descriu un aspecte diferent sobre la localització del recurs:
http_URL = "http" "://" host [ ":" port ] [ abs_path [ "?" query]]
Protocol :// host : port camí absolut consulta https :// moodle.institutmontilivi.cat : 443 /mod/resource/view.php ?id=165494 -
A la part de protocol, hi trobem la referència a HTTP o bé HTTPS, si no és xifrat o si sí que ho és respectivament.
-
La part de host identifica el servidor web. Tant pot ser un nom de domini com una IP.
-
Port és un element opcional que ens indica el port TCP/IP. Sota HTTP per defecte és el 80 i per HTTPS el 443.
-
El path indica la localització del recurs dins el servidor. És important saber que no té per què indicar un camí físic exacte dins l'estructura de fitxers del servidor. Hi pot haver un mapatge entre URL i directoris físics al disc del servidor.
-
La query o consulta ens permet passar paràmetres addicionals útils per a l'script del servidor.
-
Molts dels elements de l'URL són opcionals.
-
Podem diferenciar entre l'URL absoluta i la relativa.
-
Un URL absolut inclou el nom del host i del path complet del recurs
-
Un URL relatiu no inclou ni el protocol, ni el host ni el port.
Moltes vegades un URL relatiu s'anomena directament path (o camí) i, pot ser full path o relative path.
-
Complet: comencen sempre amb / i especifiquen tota la seqüència de directoris a recórrer partint del directori arrel web. (per exemple /web/index.html).
-
Relatiu: comencem amb un caràcter diferent de / i indiquen la seqüència de directoris a recórrer partint del directori on som. (per exemple ../web/index.html).
-
-
HTTP és un protocol sense estat, ja que tracta cada petició com una transacció independent que no té res a veure amb cap sol·licitud anterior.
-
Les peticions i les respostes contenen informació diferent, però les dues tenen la mateixa estructura formada per una capçalera i un cos.
-
La capçalera conté informació sobre el missatge (metadades en alfanumèric)
-
El cos és qui porta el contingut del missatge (alfanumèric o binari)
-
El contingut pot ser buit en algunes ocasions (només capçalera)
Peticions al servidor
-
Les peticions que es fan sobre un servidor web poden ser de 8 tipus diferents, entre elles
-
GET: sol·licita un document al servidor.
-
HEAD: similar al GET, però només demana les capçaleres.
-
POST: envia dades al servidor perquè les processi.
-
PUT: posa un recurs a l'URL indicat.
-
DELETE: elimina el recurs referenciat a l'URL.
-
CONNECT: permet passar connexions segures SSL a través de connexions HTTP i gestionar connexions HTTP a través de servidors intermediaris (proxies).
-
OPTIONS: demana al servidor quins mètodes HTTP es poden utilitzar sobre el recurs identificat amb un URL de la línia de petició.
-
TRACE: el mètode TRACE demana al servidor que retorni una còpia de les capçaleres de la petició tal com les ha rebut. Aquest mètode HTTP sol estar desactivat per defecte.
-
Respostes del servidor
Les respostes van amb un codi indicatiu agrupat per famílies
-
1xx
: són de tipus informatiu, informen el client que la petició ha estat rebuda i que el servidor continua processant la resposta. -
2xx
: indiquen la petició ha estat correcta i s'ha processat satisfactòriament. -
3xx
: indiquen alguna forma de redirecció. Amb un codi d'aquesta sèrie es dona a entendre al client que la petició és correcta, però que la resposta s'ha d'obtenir d'algun altre lloc. -
4xx
: indiquen que hi ha hagut una errada en el processament de la petició perquè el client ha fet alguna cosa malament pel que s'entén que l'error ha estat causat pel client. -
5xx
: indiquen que hi ha hagut una errada en el processament de la petició a causa d'una fallada en el servidor pel qual s'entén que l'error ha estat causat pel servidor.