nginx¶

2018

Installation¶

apt install nginx

Organisation des répertoires :

  • fichiers de configuration : /etc/nginx/

  • fichier de logs : /var/log/nginx

  • site web : /var/www/

Le rĂ©pertoire correspondant Ă  un site sera nommĂ© par le nom de domaine. Exemple, le fichier du site web a.example.com se trouve dans le rĂ©pertoire /var/www/a.example.com avec un fichier de configuration du mĂȘme nom. Si le site n’a pas de nom de domaine, les rĂ©pertoires porteront le nom de l’adresse IP.

Le site web par dĂ©faut est accessible Ă  l’adresse http://127.0.0.1.

Certificat via Let’s Encrypt¶

Installer certbot¶

Ajouter dans le fichier /etc/apt/sources.list

# For debian 8
deb http://ftp.debian.org/debian jessie-backports main

Puis installer cerbot :

sudo apt update
sudo apt install certbot -t jessie-backports

Masquer le numĂ©ro de version de Nginx dans les en-tĂȘtes et les pages d’erreur

server_tokens off;

CrĂ©er un certificat Let’s Encrypt¶

certbot certonly -d x.exemple.com

L’argument certonly permet uniquement de gĂ©nĂ©rer un certificat sans l’installer, nous ferons cela plus tard. L’autre argument -d permet de saisir le domaine pour lequel le certificat sera gĂ©nĂ©rĂ©. La liste de tous les arguments est disponible avec la commande man cerbot.

Toujours utiliser la mĂ©thode standalone, vous devez d’abord arrĂȘter tous les services associĂ©s aux ports 80 et 433 tels que Nginx ou Apache.

Renouvellement automatique¶

Pour effectuer le renouvellement automatique des certificats. Ajouter la ligne ci-dessous au fichier ‘/etc/crontab’ et redĂ©marrer le service cron.

@daily service nginx stop && certbot renew --quiet && service nginx start

Configuration d’un hĂŽte virtuel¶

sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096

Ajouter le fichier /etc/nginx/snippets/ssl-params.conf avec les éléments suivants communs à tous les hÎtes virtuels.

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

# To avoid so-called “man in the middle” attacks
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Ajouter la configuration ci-dessous au nouveau fichier /etc/nginx/sites-available/x.example.com. Un lien symbolique de celui-ci est créé dans le dossier sites-enabled pour activer le site.

server {
        listen 80;
        listen [::]:80;

        server_name x.exemple.com;
        return 302 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;

        server_name x.exemple.com;
        root /var/www/x.exemple.com;
        index index.html;

        ssl_certificate /etc/letsencrypt/live/x.exemple.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/x.exemple.com/privkey.pem;
        
        include snippets/ssl-params.conf;


        error_page 404 /40X/;
        error_page 403 /40X/;

        location /40X/ {
                return 0;
        }
}

GoAccess, analyseur de logs web¶

  • Compilation et installation

apt install -y gcc autoconf gettext autopoint build-essential libssl-dev libmaxminddb-dev libncursesw5-dev
git clone https://github.com/allinurl/goaccess.git
cd goaccess
autoreconf -fiv
./configure --enable-utf8 --enable-geoip=mmdb --with-openssl
make
make install
  • RĂ©cupĂ©rer les logs depuis docker avec nginx. Éditer le fichier ./goaccess-nginx.conf et ajouter

time-format %H:%M:%S
date-format %d/%b/%Y
log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

port 443
real-time-html true
ssl-cert /etc/ssl/certs/certificate.cer
ssl-key /etc/ssl/certs/key.key
ws-url wss://example.com
  • RĂ©cupĂ©rer les logs (via un conteneur) et lancer GoAccess

docker logs -f prod-nginx  2>/dev/null | goaccess -p ./goaccess-nginx.conf -o html - > /mnt/data-website/prod-proxy/data/html/goaccess/index.html