Fork me on GitHub

Nginx & Pelican setup

Adamantio.net è un sito totalmente html-based che utilizza Pelican per la pubblicazione dei contenuti e per servire le pagine utilizza Nginx.

Nginx non è presente nei repo di base di centos-rhel, ma nei repository epel o sourceforge.

Installare quindi, prima il repo epel e poi il pacchetto nginx:

[[email protected] ~]$ sudo yum install epel-release
[[email protected] ~]$ sudo yum install nginx

Il pacchetto installerà anche le dipendenze fra cui GeoIP per la risoluzione geografica degli ip, il pacchetto nginx-filesystem che specifica i files e le directory di configurazione predefiniti, ovviamente openssl ed altro se non già presente sul sistema.

Per gli impazienti, è possibile avviare il server immediatamente con:

[[email protected] ~]$ sudo systemctl start nginx.service
[[email protected] ~]$ sudo systemctl enable nginx.service

La "document root" predefinita è /usr/share/nginx/html, per la pubblicazione mediante Pelican i permessi vanno opportunamente adattati. Il file di configurazione in cui è indicata la document root ed altre impostazioni è /etc/nginx/conf.d/default.conf mentre il file di configurazione globle che regola il comportamento del server è /etc/nginx/nginx.conf, se si ha un certificato ssl (facilmente ottenibile gratuitamente da startssl.com ), va configurato in /etc/nginx/conf.d/ssl.conf.

Nella scelta delle cipher suites utilizzare il sito della Qualys SSL labs per verificarne l'eficacia con almeno queste entry è possibile ottenere una bella "A":

  ssl_ciphers 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS';
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 5m;
  ssl_stapling          on;
  ssl_stapling_verify   on;
  resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=300s;
  resolver_timeout      10s;
  ssl_prefer_server_ciphers on;

per qualsiasi riferimento sulle cyper suites consultare la risorsa openssl.org.

Per quanto riguarda i benchmarks, è consigliabile attivare la compressione gzip ed imporre gli header che determinano i tempi di scadenza dei contenuti per i files statici, con almeno le sottonotate direttive:

gzip on;
gzip_static on;
gzip_comp_level 9;
gzip_min_length 1400;
gzip_types text/plain text/css image/png image/gif image/jpeg application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
  etag on;

location ~* \.(?:manifest|appcache|html?|xml|json)$ {
  expires -1;
}

location ~* \.(?:rss|atom)$ {
  expires 1h;
  add_header Cache-Control "public";
}

location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
  expires 1M;
  access_log off;
  add_header Cache-Control "public";
}

location ~* \.(?:css|js|woff2)$ {
  expires 1y;
  access_log off;
  add_header Cache-Control "public";
}

Ancora sulle performance, è possibile abilitare il protocollo SPDY per quei browsers che lo supportano con la direttiva:

  listen 443 ssl spdy;

Per maggiori informazioni sul protocollo SPDY vedere wikipedia.

Controllare gli header con curl in questo modo:

[email protected] ~ $ curl -I https://www.adamantio.net
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 26 Apr 2015 15:33:04 GMT
Content-Type: text/html
Content-Length: 11787
Last-Modified: Sun, 26 Apr 2015 08:53:58 GMT
Connection: keep-alive
ETag: "553ca7a6-2e0b"
Expires: Sun, 26 Apr 2015 15:33:03 GMT
Cache-Control: no-cache
Strict-Transport-Security: max-age=31536000; includeSubdomains;
X-Frame-Options: SAMEORIGIN 
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Accept-Ranges: bytes

Per Pelican è possibile generare la favicon.ico online, ed aggiungerla al sito assieme al file robots.txt come riportato in questo documento di tip and tricks su github, modificando il file pelicanconf.py.

Per minimizzare i tempi di caricamento un occhio va dato ai contenuti del sito. Minimizzare quindi le dimensioni dei files immagine, evitare le direttive @import per i files css, unificandoli e compattandoli, aggiustare il caricamento dei fonts ed altri ritocchi estetici che impattano sulle latenze dei motori di rendering dei browser.

Per migliorare la fruibilità del sito sui dispositivi mobili, aggiungere agli header delle pagine il seguente meta tag, altrimenti il rendering sui piccoli display renderà illegibili alcune parti:

<meta name=viewport content="width=device-width, initial-scale=1">

Valutare in fine l'utilizzo di un CDN per servire le immagini statiche. Per verificare la qualità e le performance è possibile utilizzare le seguenti risorse: www.webpagetest.org e pagespeed insights oppure come plugin per il browser YSlow per Firefox o PageSpeed per Chrome

Commenti !

blogroll

social