Je vais revenir durant cet article sur l’installation d’une debian 9 (Stretch) avec Nginx, PHP7-FPM et MySQL. Ceci ayant pour but de faire tourner dans un premier temps mon blog. Cela sert aussi de base pour des tests pour un déploiement sur un serveur avec plusieurs sites.
Tout d’abord on va mettre à jour le système d’exploitation par défaut je considère que vous êtes connecté en root :
Cette commande va mettre à jour la liste des paquets disponibles :
apt-get update
Celle-ci va mettre à jour votre système d’exploitation :
apt-get upgrade
apt-get install nginx
vi /etc/nginx/nginx.conf
# Deux processus fonctionnent bien pour un seul processeur si + de cpu mettre le nb de cpu
user www-data;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
include /etc/nginx/mime.types;
# Nginx fait la journalisation
access_log /var/log/nginx/access.log;
# TCP
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
server_names_hash_bucket_size 64;
server_tokens off;
# Laissez nginx faire la compression, désactivez le mod_deflate d'Apache
gzip on;
gzip_vary on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_comp_level 6;
gzip_min_length 1400;
gzip_proxied any;
# le type mime text / html est automatiquement inclus pour gzip, il faut ajouter le reste
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/rss+xml text/javascript;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4';
ssl_session_cache shared:SSL:10m;
proxy_cache_path /var/cache/nginx levels=2:2:2 keys_zone=STATIC:1000m inactive=24h max_size=1g;
proxy_temp_path /var/lib/nginx/proxy;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
MySQL va vous demander notamment de saisir le mot de passe de l’utilisateur root, le root de MySQL pas celui de votre serveur, un conseil mettez un mot de passe le plus fort possible :
apt-get install mysql-server mysql-client mysql-common
apt-get install php7.0 php7.0-fpm php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-msgpack php7.0-memcached php7.0-intl php7.0-gmp php7.0-geoip php7.0-mbstring php7.0-xml php7.0-zip
Attention les paquets installés au-dessus sont un minimum vous pouvez bien entendu en ajouter d’autres par la suite.
Vous allez voir la partie un peu plus compliquée de cet article. En effet contrairement à une installation avec apache et PHP5, PHP7-FPM ne fonctionne pas tout de suite avec nginx. Pour qu'il soit pris en compte vous allez devoir modifier très légèrement votre configuration.
Armé de notre fidèle nano, ou vi pour les plus chevronnés, vous allez éditer votre fichier de configuration nginx du site par défaut via la commande :
vi /etc/nginx/sites-available/default
Ajoutez une section “location” pour les fichiers PHP comme suit :
server { listen 80; root /var/www/html/; index index.php index.html index.htm index.nginx-debian.html; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_param PHP_VALUE "max_execution_time=1800 post_max_size=1500M upload_max_filesize=32M max_input_time=1800 max_file_uploads=300"; } location / { try_files $uri $uri/ =404; } location ~ /\.ht { deny all; } }
Vous avez presque terminé votre installation ! Vous allez maintenant modifier le fichier php.ini via la commande suivant :
vi /etc/php/7.0/fpm/php.ini
Il vous faut trouver dans le fichier le paramètre suivant : cgi.fix_pathinfo=0 si il y a un ; devant la ligne retirez le et assurez-vous que la valeur est bien de 0. Le but de le mettre à 0 va vous éviter beaucoup de soucis dans vos applications web car les chemins d'appels seraient différents avec une valeur à 1.
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0
Pour finir on va relancer nos deux services que sont PHP7-FPM et nginx pour qu'ils prennent en comptes les modifications :
service php7.0-fpm reload service nginx reload
Petite explication de différence entre reload et restart. Reload va simplement recharger la configuration du service sans l'interrompre. Alors que restart va interrompre le service avant de le redémarrer. En production le restart va s'utiliser que dans des cas très rares.
Il nous reste plus cas tester que tout fonctionne pour cela on va créer le fichier suivant :
vi /var/www/html/info.php
Dedans on va mettre le code qui suit (qui a simplement pour but d'afficher le phpinfo) :
<?php phpinfo();
Si vous voyez apparaître ceci c'est que le serveur et PHP7 fonctionne :