
Source: unixmen.com
Cet article est surtout là pour me servir de pense-bête en cas de réinstallation d’un serveur, mais sait-on jamais, il peut être utile à d’autres 🙂
Le but est de mettre en place un serveur web qui soit le plus léger possible ; pour ce faire, j’utilise Linux et sa distribution Debian (8 Jessie pour le tutoriel ci-dessous, mais facilement adaptable pour d’autres version), Nginx en remplacement d’Apache, PHP 7 en FPM et MariaDB en remplacement de MySQL.
La première étape consiste en la modification de
/etc/apt/sources.list
auquel il faut ajouter les repositories nécessaires pour Nginx, MariaDB et Dotdeb pour PHP7 :
# Nginx
deb http://nginx.org/packages/debian/ jessie nginx
deb-src http://nginx.org/packages/debian/ jessie nginx
# MariaDB
deb [arch=amd64,i386] http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.1/debian jessie main
deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.1/debian jessie main
# Dotdeb
deb http://packages.dotdeb.org jessie all
Ajout des clés nécessaires à l’authentification des repositories :
wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
Mise à jour des listes
apt-get update
Installation des paquets
apt-get install nginx
apt-get install php7.0-fpm
apt-get install php7.0-mysql
apt-get install mariadb-server
Si on n’installe que php7.0-fpm sans php7.0-mysql, l’extension mysqli ne sera pas installée et on ne pourra pas se servir de phpMyAdmin par exemple.
J’aime bien mettre mes sites dans /var/www et utiliser des dossiers sites-available et sites-enabled pour Nginx, ainsi je modifie
/etc/nginx/nginx.conf
de la façon suivante :
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
 worker_connections 8192;
 multi_accept on;
 use epoll;
}
http {
 ##
 # Basic Settings
 ##
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout 4;
 types_hash_max_size 2048;
 server_tokens off;
 client_max_body_size 20m;
 client_body_buffer_size 128k;
 include /etc/nginx/mime.types;
 default_type application/octet-stream;
 ##
 # Logging Settings
 ##
 access_log /var/log/nginx/access.log;
 error_log /var/log/nginx/error.log;
    gzip  on;
    gzip_static on;
    gzip_comp_level 9;
    gzip_min_length 1400;
    gzip_types  text/plain text/css image/png image/gif image/jpeg application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary  on;
    gzip_http_version 1.1;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
 ##
 # nginx-naxsi config
 ##
 # Uncomment it if you installed nginx-naxsi
 ##
 #include /etc/nginx/naxsi_core.rules;
 ##
 # Virtual Host Configs
 ##
 include /etc/nginx/conf.d/*.conf;
 include /etc/nginx/sites-enabled/*;
}
Ensuite, dans /etc/nginx, on crée les deux dossiers sites-available et sites-enabled. On crée le fichier :
/etc/nginx/sites-available/default
avec
server {
 listen 80 default_server;
 listen [::]:80 default_server ipv6only=on;
 root /var/www;
 index index.html index.htm index.php;
 # Make site accessible from http://localhost/
 server_name localhost;
 # PHP
 location ~ \.php$ {
 root /var/www;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 fastcgi_index   index.php;
 include fastcgi_params;
 fastcgi_param   SCRIPT_FILENAME /var/www$fastcgi_script_name;
 }
}
Puis on active la configuration par défaut créée ci-dessus en faisant un lien symbolique :
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
On recharge la configuration de Nginx et tout doit fonctionner :
nginx -s reload
Chaque nouveau site devra être ajouté dans sites-available avec un lien symbolique dans enabled et un server_name correspondant au nom du site web, par exemple :
server {
    listen       80;
    server_name  www.test.com;
    return       301 http://test.com$request_uri;
}
server {
 listen       80;
 server_name test.com;
 root /var/www/test.com;
 location / {
 root /var/www/test.com;
 index index.php index.html index.htm;
 try_files $uri $uri/ /index.php?$args;
 access_log /var/log/nginx/test.com.access;
 error_log /var/log/nginx/test.com.error error;
 location ~ \.php$ {
 root /var/www/test.com;
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;
 fastcgi_index   index.php;
 include fastcgi_params;
 fastcgi_param   SCRIPT_FILENAME /var/www/test.com$fastcgi_script_name;
 }
 }
}
Ici, on crée le site test.com avec www.test.com redirigeant vers test.com, le site se trouvant dans /var/www/test.com.