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.