On travail ici sur un serveur vierge, sous debian 8 (jessie).
On commence donc par faire une actualisation des dépots distants.
sudo apt update
Installation de nginx
nginx est inclut par défaut dans les dépôts Debian, on exécute alors
sudo apt install nginx
Installation de PHP
Depuis la version 8 de debian, php n'est plus disponible par défaut dans les dépôts. Il faut les ajouter à la main. Afin de ne pas installer n'importe quoi (les dépôts et versionde PHP par défaut changeant régulièrement), il est conseillé de consulter la documentation officielle afin d'avoir le dépôt correct.
Ici, nous allons utiliser le dépôt DotDeb, la configuration détaillé est disponible ici
C'est partie, on commence par ajouter la ligne suivante au fichier /etc/apt/sources.list
:
deb http://packages.dotdeb.org jessie all
On update
sudo apt update
On utilise Nginx, celui-ci ne possède pas de modèle préconfigurer pour PHP, comme peut l'avoir Apache. On doit donc installer php en Fast-CGI. Pour cela installons les dépendances suivantes :
sudo apt install php7.0 php7.0-fpm
NOTE : En janvier 2017, le paquet php7.0 correspondait à la version la plus stable et la plus récente de PHP
Configuration de Nginx
Un peu de culture : Sous Apache, la relation entre PHP et Apache se fait grâce à un sous programme nommé "mod_php", celui-ci permet a Apache d’interpréter directement le code PHP. Nginx ne possède pas ce sous-programme, il va alors devoir envoyer la requête à PHP via son interface Fast-CGI, qui va l'interpréter lui-même et renvoyer le résultat à Nginx, puis à l'utilisateur. Nous devons donc configurer Nginx afin qu'il sache comment communiquer avec PHP.
Commençons par creer notre server-block, pour les familier d'Apache, unserver-block est l'équivalent d'un VirtualHost. Comme je cherche ici à installer le site de la télévision, je créer le fichier
sudo vim /etc/nginx/sites-available/TVonResEl
voici la configuration la plus simple d'un server block :
http {
index index.html;
server {
listen 80 default_server;
server_name _; # This is just an invalid value which will never trigger on a real hostname.
access_log logs/default.access.log main;
server_name_in_redirect off;
root /var/www/default/htdocs;
}
}
Pour plus d'infos, voir ici
Comme j'utilise le framework Symfony, je vais utiliser le modèle donné sur la documentation officielle :
server {
server_name tv.resel.fr;
root /var/www/html/TVonResEl;
location / {
try_files $uri /app.php$is_args$args;
}
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/run/php/php7.0-fpm.sock
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/TVonResEl_error.log;
access_log /var/log/nginx/TVonResEl_access.log;
}
Dans tous les cas, la configuration du fast-cgi ce fera grâce aux lignes suivantes, disposées dans un block "location"
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_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffers 4 256k;
fastcgi_buffer_size 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
NOTE : Ceci est un exemple
La ligne fastcgi_pass unix:/run/php/php7.0-fpm.sock;
étant à modifier suivant votre version de PHP (typiquement fastcgi_pass unix:/var/run/php5-fpm.sock;
pour PHP5)
Activation du site
Pour activer le site, il faut créer un lien symbolique vers sites-enabled
:
sudo ln -s /etc/nginx/sites-available/TVonResEl /etc/nginx/sites-enabled/TVonResEl
Puis on relance nginx
sudo service nginx restart
Si aucune erreur ne se produit, votre configuration est terminée !
Dans le cas contraire, vous aurez une erreur de ce type :
Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.
Tapez systemctl status nginx.service
pour voir la ligne posant problème.