CitizenZ

Blog Libre, Net & Société

[NOTE] Installer Nginx stable pour Debian 7 et 8

Rédigé par citizenz 3 commentaires

La version de Nginx dans les ports de Debian 8 est actuellement la 1.6.2-5+deb8u4

Cela ne pose pas de problème en soit mais vous pouvez installer la version "stable" depuis les ports officiels Nginx afin de disposer d'une appli plus à jour (version actuelle : 1.12.0) et qui permet d'avoir accès à certaines "fonctions" ou "configs" comme par exemple l'utilisation de HTTP2 (qui sert à améliorer le temps de chargement des pages d’un site web sécurisé ) ou une légère différence dans la mise en place de la configuration. En effet, avec la version "stable", finis les répertoires "sites-enabled" et autres "sites-available". Tout se trouve dans le rep /etc/nginx/conf.d.

Sur le Net, on trouve ces précisions :
Qu’est-ce HTTP/2 ?
Le protocole HTTP/2 reprend les bases du protocole HTTP 1.1 tout en ajoutant de la rapidité et de la sécurité (support du SSL) car basé sur le code de SPDY, un protocole développé par Google.
La grande force du protocole HTTP/2 est de pouvoir faire du « Multiplexing », qui permet d’envoyer dans un seul flux de données tous les fichiers d’un site web.
Pour résumé HTTP/2 c’est : support du protocole SSL + Multiplexing = Chargement de page web sécurisé très rapide !

Pour installer cette version "stable", c'est assez simple :

wget -O - https://nginx.org/keys/nginx_signing.key | apt-key add -
echo "deb http://nginx.org/packages/debian/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list
apt update
apt install nginx

Les "Stats" pour les Nuls : Netdata

Rédigé par citizenz Aucun commentaire

​Afficher les stats d'un serveur, cela peut être bien utile : vérifier la charge processeur, la RAM utilisée, la "santé" de sa base de données SQL, etc.
Jusqu'à maintenant, j'avais l'habitude d'installer Munin qui nous propose de jolis graphiques. Mais, à mon goût, l'un des inconvénients de Munin, c'est que, outre l'aspect esthétique graphique un peu répétitif, ça devient vite "assez lourd" sur des petits systèmes (sur un petit VPS avec un proc et 2 GO de RAM, vous êtes vite dépassé niveau charge avec des crêtes d'utilisation assez élevées...).

Et puis je suis tombé sur Netdata. Un site proposait d'aller "voir" ses stats en ligne : ahurissant !
Netdata, c'est du "live", "temps réel", "en direct", blablabla, ... et vous avez beau descendre dans la page de stats, vous en avez toujours, encore et encore.
C'est ULTRA complet, esthétiquement à des années lumières de Munin. Ca flash !

C'est quoi Netdata ?
Netdata est un outil de supervision en temps réel pour les systèmes Linux qui va nous permettre de visualiser les éléments importants d'un système (processeur, mémoire, débit du disque dur, traffic réseau, application, etc.).
C'est assez exhaustif et vous serez surpris du nombres d'éléments visualisables ! 

Comment on installe Netdata ?
Bon : on va l'installer sur notre serveur Debian. Mais avant cela, on va installer quelques éléments indispensables :

$sudo apt install zlib1g-dev gcc make git autoconf autogen automake pkg-config

J'ai l'habitude d'installer mes sites web dans /var/www/monsite.com/web.
Je pars du postulat que Nginx (version stable depuis le dépot officiel), php5 ou php7 sont installés.
N'oubliez pas de changer monsite.com avec vos propres infos.

Pour plus d'aisance, on passe directement en root :

$sudo -s

Puis on crée le répertoire web qui va accueillir les fichiers netdata :

#mkdir /var/www/netdata.mondomaine.com

Si vous n'avez jamais encore configuré de site dans ce répertoire, entrez plutôt la commande suivante : 

#mkdir -p /var/www/netdata.mondomaine.com

On se place dans le répertoire web qu'on vient de créer :

#cd /var/www/netdata.mondomaine.com

La ligne suivante est facultative (mais ça me permet de placer les logs du site afin de les consulter facilement, notamment en cas de soucis...)

#mkdir logs

On va maintenant cloner le repertoire git du projet Netdata :

#git clone https://github.com/firehol/netdata.git netdata --depth=1

L'étape suivante est facultative. Je renomme le répertoire netdata pour coller avec ma config et mon "organisation" :

#mv netdata/ web/

On se place dans le répertopire web/ :

#cd web/

... et on installe Netdata :

#./netdata-installer.sh

... et c'est tout !

Configuration Nginx
Il reste quand même à configurer Nginx :

#cd /etc/nginx/conf.d
#vim netdata.mondomaine.com.conf

Cerise sur le gateau, nous allons configurer le vhost Nginx avec HTTPS Let's Encrypt :
- netdata écoute, par défaut, sur le port 19999
- IPV6 ready
- tous les accès sur le port 80 sont "automagiquement" renvoyer sur le port 443 (HTTPS)
- on ne log pas les accès sur le port 80
- on ajoute plusieurs options SSL "qui vont bien" ...
- nous configurerons Let's Encrypt juste après cette partie

Voici le fichier :

#/etc/nginx/conf.d/netdata.mondomaine.com.conf
upstream backend {
    server 127.0.0.1:19999;
    keepalive 64;
}
server {
    listen 80;
    listen [::]:80;
    server_name netdata.mondomaine.com;
    return 301 https://$server_name$request_uri;
    access_log /dev/null;
    error_log /dev/null;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name netdata.mondomaine.com;
    charset utf-8;
    access_log /var/www/netdata.mondomaine.com/logs/netdata.access.log combined;
    error_log /var/www/netdata.mondomaine.com/logs/netdata.error.log error;
    ssl_certificate /etc/letsencrypt/live/netdata.mondomaine.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/netdata.mondomaine.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/netdata.mondomaine.com/chain.pem;
    ssl_protocols TLSv1.2;
    ssl_ecdh_curve prime256v1;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_prefer_server_ciphers on;
    resolver 80.67.169.12 80.67.169.40 valid=300s;
    resolver_timeout 5s;
    ssl_session_cache shared:SSL:10m;
    add_header Strict-Transport-Security "max-age=15768000";
    add_header Referrer-Policy "strict-origin-when-cross-origin";
    location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header Connection "keep-alive";
        proxy_store off;
    }
}

Et voila. Vous enregistrez ce fichier après avoir adapté les passages avec netdata.mondomaine.com.

Configuration de Let's Encrypt
On passe à la config Let's Encrypt. On installe d'abord les backports Debian (à moins que cela ne soit déjà fait ...) :

#echo "deb http://httpredir.debian.org/debian jessie-backports main" >> /etc/apt/sources.list

On met à jour : 

#apt update && apt full-upgrade -y

On installe Let's Encrypt :

#apt install -t jessie-backports letsencrypt

Pour obtenir un certificat Let's Encrypt, il faut arrêter Nginx (port 80) :

#service nginx stop

Puis on génére le certifcat (à adapter pour netdata.mondomaine.com et l'adresse e-mail) :

#letsencrypt certonly -d netdata.mondomaine.com --agree-tos -m contact@mondomaine.com --rsa-key-size 4096 --standalone

Si vous voyez "Congratulations..." etc., c'est bon, votre certificat Let's Encrypt a été créé et installé dans /etc/letsencrypt/live/netdata.mondomaine.com/.
Vous y trouverez plusieurs fichiers : fullchain.pen, chain.pem, privkey.pem, ...

Redémarrez maintenant votre serveur Nginx :

#service nginx start

Si vous ne voyez pas d'erreur : VICTOIRE !

Vous pouvez aller voir vos superbes stats sur l'adresse https://netdata.mondomaine.com !
 

[NOTE] Corriger l'erreur Nginx "(13: Permission denied) while connecting to upstream"

Rédigé par citizenz Aucun commentaire

Si Nginx vous envoie paître (Bad Gateway) et que vous voyez l'erreur suivante dans vos log :

*1 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client xx.xx.xx.xx ...

Alors voila le remède :

usermod -a -G www-data nginx

Et HOP ! Redémarrez Nginx et c'est tout bon !

Certificat SSL signé gratuit avec Let's Encrypt et Nginx

Rédigé par citizenz Aucun commentaire

Voici un moyen simple et gratuit pour passer son site en HTTPS. Il s'agit d'installer et générer un certificat via Let's Encrypt pour Nginx.
Attention : Les certificats générés ne sont valables que 90 jours. Il faudra ensuite les renouveler en réutilisant la méthode décrite dans un autre article.
Sous Debian et avec le serveur Nginx, tout se fait en 2 coups de cuillère à pot.

On commence par installer la version stable de Nginx depuis les dépots officiels :

wget -O - https://nginx.org/keys/nginx_signing.key | apt-key add -
echo "deb http://nginx.org/packages/debian/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list
apt update
apt install nginx

On ajoute ensuite les backports Debian puis on installe letsencrypt :

echo "deb http://httpredir.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
apt update && apt full-upgrade -y
apt install -t jessie-backports letsencrypt
service nginx stop

Maintenant, il s'agit de demander un certificat pour notre site (notre nom de domaine). Rien de compliqué :

letsencrypt certonly -d www.domaine.tld -d domaine.tld --agree-tos -m contact@domaine.tld --rsa-key-size 4096 --standalone
service nginx start

Maintenant que vos certificats ont été générés et placés dans /etc/letsencrypt/live/monsite.com, on va configurer le fichier du vhost Nginx (fichier .conf dans /etc/nginx/conf.d/).

Voici un exemple complet :

server {
    listen 80;
    server_name monsite.com www.monsite.com;
    return 301 https://www.monsite.com$request_uri;
    access_log /dev/null;
    error_log /dev/null;
}

server {
    listen 443 ssl http2;
    server_name monsite.comwww.monsite.com;

    if ($host = monsite.com) {
        return 301 https://www.monsite.com$request_uri;
    }

    root /var/www/monsite.com/web;

    index index.html index.htm index.php;

    # HTTPS : mise en place de la config et des certificats
    ssl_certificate /etc/letsencrypt/live/www.monsite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.monsite.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/www.monsite.com/chain.pem;

    ssl_protocols TLSv1.2;
    ssl_ecdh_curve prime256v1;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_prefer_server_ciphers on;
    resolver 80.67.169.12 80.67.169.40 valid=300s;
    resolver_timeout 5s;

    ssl_session_cache shared:SSL:10m;
    add_header Strict-Transport-Security "max-age=15768000";

    location / {
        try_files $uri $uri/ =404;
    }

    access_log /var/www/monsite.com/logs/access.log combined;
    error_log /var/www/monsite.com/logs/error.log error;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}

On redémarre nginx (service nginx restart) et admirez le "zoli" cadenas vert dans votre barre d'adresse. ON peut lire (en passant la souris sur le cadenas) : "Vérifié par Let's Encrypt) !

Fil RSS des articles de ce mot clé