HTTP a WWW servery

David Nemec, xnemec5@fi.muni.cz

Obsah

Hypertext Transfer Protocol (HTTP)

Princíp komunikácie

Metódy

Stavové kódy

Stavový kód je súčasťou hlavičky odpovede na dotaz klienta, upresňuje ako bola odpoveď spracovaná serverom:

Ďalšie stavové kódy viz. Wikipedia

Range request

Príklad komunikácie

Klient odošle požiadavku na server:
GET / HTTP/1.1
Host: example.com
Server odpovedie požadovaným dokumentom:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 155
Connection: close
Date: Sat, 07 Nov 2020 12:35:33 GMT
Last-Modified: Thu, 06 Jun 2019 04:19:28 GMT
ETag: "92b6819fcf2865f6be341e02390d23bf"
Accept-Ranges: bytes
Server: AmazonS3

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    <p>Hello World, this is a very simple HTML document.</p>
  </body>
</html>

HTTP server Nginx

Konfigurácia

Hlavný konfiguračný súbor je uložený v /etc/nginx/nginx.conf

Príklad hlavného konfiguračného súboru podla ArchWiki
user http;
worker_processes auto;
worker_cpu_affinity auto;

events {
    multi_accept on;
    worker_connections 1024;
}

http {
    charset utf-8;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    server_tokens off;
    log_not_found off;
    types_hash_max_size 4096;
    client_max_body_size 16M;

    # MIME
    include mime.types;
    default_type application/octet-stream;

    # logging
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log warn;

    # load configs
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Virtuálne servery

server {
    listen 80;
    listen [::]:80;
    server_name example1.xyz;
    
    root /usr/share/nginx/example1.xyz/html;
}

server {
    listen 80;
    listen [::]:80;
    server_name example2.xyz;
    
    root /usr/share/nginx/example2.xyz/html;
}

SSL/TLS

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name examplesecure.xyz;

    ssl_certificate /etc/nginx/ssl/examplesecure.crt;
    ssl_certificate_key /etc/nginx/ssl/examplesecure.key;

    root /usr/share/nginx/examplesecure.xyz/html;
}

Autentizácia

Príklad Konfigurácie HTTP Basic Auth vo web serveri Nginx:
location /private {
    auth_basic "Password protected area";
    auth_basic_user_file /path/to/generated/htpasswd;
}
Súbor, ktorý obsahuje mená a heslá užívateľov je možné vygenerovať pomocou programu htpasswd:
xnemec5@proto12 $ htpasswd -c passwd_file user1
New password:
Re-type new password:
Adding password for user user1

xnemec5@proto12 $ htpasswd passwd_file user2
New password:
Re-type new password:
Adding password for user user2
Výsledný súbor passwd_file:
user1:$apr1$x3lgFcQD$WI09oPxWmGfiKrFmnPdSL/
user2:$apr1$82OFsu8E$jkH7mCt8hsk.fqaaeIpTz.

CGI

HTTP/2

Zapnutie podpory HTTP/2 v konfigurácii virtuálneho servera:
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name examplehttp2.xyz;

    ssl_certificate /etc/nginx/ssl/examplehttp2.crt;
    ssl_certificate_key /etc/nginx/ssl/examplehttp2.key;

    root /usr/share/nginx/examplehttp2.xyz/html;
}

Literatúra