Nginx avec php7-fpm

Configuration standard pour les projets, basée sur

  • nginx
  • php-fpm (+ qq extensions pratiques)
  • (user chrooté pour accès en sftp)
  • https et certbot pour le renouvellement automatique

Après l'initialisation standard de la machine virtuelle (mémo privé), il suffit presque de cette ligne pour tout installer

apt-get install nginx-full php-fpm php-mysqli php-xml php-date 

On peut selon le cas y adjoindre subversion, git ou d'autres librairies php

apt-get install subversion git
apt-get install php-imagick php-json php-tcpdf, ...

Création typique d'un vhost unique qui devient le host par défaut

cd /etc/nginx/sites-available
cp default myvhost
ln -s /etc/nginx/sites-available/myvhost /etc/nginx/sites-enabled/myvhost
mkdir /var/www/myvhost
mkdir /var/www/myvhost/www
mkdir /var/www/myvhost/logs
chown -R www-data:www-data /var/www/myvhost

exemple de vhost simple avec php-fpm

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

        root /var/www/myvhost/www;

        access_log /var/www/myvhost/logs/nginx-access.log;
        error_log /var/www/myvhost/logs/nginx-error.log;


        index index.html index.php;

        server_name myvhost.fr www.myvhost.fr www.anotherdomaine.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
               try_files $uri =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass unix:/run/php/php7.0-fpm.sock;
               fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;
               fastcgi_read_timeout 60;
        }


        # deny access to .htaccess files
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}

Un exemple de index.php simple

a adapter, permet de vérifier les droits d'accès au système de fichier ainsi qu'à une base de données mysql.

<?php

echo '<p>Bienvenue sur votre hébergement</p>';
echo '<pre>';

if(file_put_contents('./testecriture', 'du texte à écrire') == false) {
        echo "Ecriture de fichier : Echec\n\n";
}
else {
        echo "Ecriture de fichier : OK\n\n";
}

$mysqli = new mysqli('mysql.lplab.fr', 'dbuser', 'dbpasswd', 'dbname');
if ($mysqli->connect_errno) {
        echo "Connexion à la base de données : Echec\n\n";

    // Something you should not do on a public site, but this example will show you
    // anyways, is print out MySQL error related information -- you might log this
    echo "Error: Failed to make a MySQL connection, here is why: \n";
    echo "Errno: " . $mysqli->connect_errno . "\n";
    echo "Error: " . $mysqli->connect_error . "\n";

    // You might want to show them something nice, but we will simply exit
    exit;
}
else {
        $mysqli->set_charset('utf8');
        echo "Connexion à la base de données : OK\n\n";

}

echo '</pre>';

..ne pas oublier de relancer le serveur

service nginx restart
service php7.0-fpm restart

pas utile pour moi, mais n'oubliez pas de contribuer au wiki si vous le faites !

idem que plus haut

:!: dans le cadre d'hébergements mutualisés impliquant plusieurs organisations, ou lorsque l'on souhaite optimiser les performances ou la sécurité, ne pas négliger ces deux points non développés.

Ce qui est devenu primordial aujourd'hui, par contre, c'est de présenter les site et applis web avec le protocole HTTPS et un certificat valide. Certbot permet d'automatiser la production et le renouvellement de certificats signés par l'autorité Let's encrypt.

Nouvelle méthode

Installation

Depuis début 2019, le paquet officiel correspond à la version 0.28.x, qui satisfait aux besoins de certbot-auto (version min de certbot : 0.10)

apt-get install certbot

Pour vérifier le numéro de version de certbot :

certbot --version
certbot 0.28.0

L'installation de certbot-auto se fait en téléchargeant et configurant le soft

cd
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Le script d'installation se charge de télécharger ses dépendances, et notamment de mettre à jour certbot.


Usage :

pour configurer un ou des serveurs, (re)lancer

cd
./certbot-auto

Le script scanne le répertoire /etc/nginx/site-enabled et propose par une liste de choix de configurer le ou les certificats nécessaires.

A l'issue du processus, et si tout se passe bien :

  • Le fichier de conf vhost/ssl a été généré dans /etc…/sites-enabled/ (état après certbot-auto: 2 fichiers de conf pour 2 vhosts actives)
  • La tache cron a été mise en place (pour le renouvellement)

reste à relancer le serveur

service nginx reload

(ou service apache2 reload)

:!: Attention certbot-auto n'a pas forcément les droits pour relancer le serveur, ce qui fait qu'il peut être nécessaire de le faire manuellement après chaque renouvellement du certificat. Un mail à surveiller est envoyé automatiquement à tech@serveur.

Autres approches (si ça ne fonctionne pas ...)

Installation manuelle (pistes)

Sur apache, dans une version plus ancienne

  • /var/www/dokuwiki/data/pages/2_hostmytlx/1_serveur/nginx
  • Dernière modification: 04/02/2019 23:59