Comment créer un serveur web Nginx : Différence entre versions

De Free 4 Funs
Aller à : navigation, rechercher
(Installation de PhpMyAdmin)
 
(13 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
=<font color="blue">Introduction</font>=
 
=<font color="blue">Introduction</font>=
  
[[Fichier:warning.png]] Ce tutoriel n'est pas destiné aux administrateurs ayant installé un serveur lampp !!
+
{{Warning|Ce tutoriel n'est pas destiné aux administrateurs ayant installé un serveur lampp !}}
  
 
Ce Tutoriel a été réalisé afin de vous montrez comment créer un serveur web avec nginx, php, mysql et phpmyadmin.
 
Ce Tutoriel a été réalisé afin de vous montrez comment créer un serveur web avec nginx, php, mysql et phpmyadmin.
Ligne 7 : Ligne 7 :
 
Au final vous pourrez installer votre site web, cms etc...
 
Au final vous pourrez installer votre site web, cms etc...
  
 +
Il faut savoir que ce tutoriel est destiné aux utilisateurs ayant quelques bases sur l'utilisation de Linux et ses dérivés.
  
[[Fichier:warning.png]] Il faut savoir que ce tutoriel est destiné aux utilisateurs ayant quelques bases sur l'utilisation de Linux et ses dérivés.
+
{{Note|C'est une configuration type basé sur ce que j'ai trouvé sur la toile donc à vous de tester et de peaufiner la configuration de Nginx pour obtenir le meilleur de votre serveur web.}}
 
+
[[Fichier:warning.png]] C'est une configuration type basé sur ce que j'ai trouvé sur la toile donc à vous de tester et de paufiner la configuration de Nginx pour obtenir le meilleur de votre serveur web.
+
 
+
[[Fichier:warning.png]] Pensez à faire une sauvegarde de chaque fichier AVANT d'effectuer toute modifications !
+
 
+
[[Fichier:warning.png]] Free 4 Funs ne pourra être tenue responsable d’une instabilité du système résultant d’une mauvaise installation du système d’exploitation. [[Fichier:warning.png]]
+
  
 +
{{Warning|Pensez à faire une sauvegarde de chaque fichier AVANT d'effectuer toute modifications !
 +
Free 4 Funs ne pourra être tenue responsable d’une instabilité du système résultant d’une mauvaise installation du système d’exploitation.}}
  
 
=<font color="blue">Requis</font>=
 
=<font color="blue">Requis</font>=
  
 +
Connecter vous en '''[[Comment_se_connecter_en_root|ROOT]]''' via puTTY.
  
Connecter vous en '''ROOT''' via puTTY.
+
Nous allons utiliser les dépôts DotDeb pour avoir une version de Nginx à jour.
 
+
Nous mettons à jour la machine :<br />
+
<code>aptitude update && aptitude upgrade</code><br />
+
 
+
nous allons utiliser les dépôts DotDeb pour avoir une version de Nginx à jour.
+
  
 
Comme toujours, nous procédons à une sauvegarde du fichier :
 
Comme toujours, nous procédons à une sauvegarde du fichier :
Ligne 35 : Ligne 28 :
 
Ajouter à la fin :<br />
 
Ajouter à la fin :<br />
  
<blockquote>
+
<code>
 
deb http://packages.dotdeb.org wheezy all<br />
 
deb http://packages.dotdeb.org wheezy all<br />
 
deb-src http://packages.dotdeb.org wheezy all<br />
 
deb-src http://packages.dotdeb.org wheezy all<br />
</blockquote><br />
+
</code><br />
  
 
Si vous souhaitez avoir php 5.5, ajouter ceci à la suite :<br />
 
Si vous souhaitez avoir php 5.5, ajouter ceci à la suite :<br />
<blockquote>
+
<code>
 
deb http://packages.dotdeb.org wheezy-php55 all<br />
 
deb http://packages.dotdeb.org wheezy-php55 all<br />
 
deb-src http://packages.dotdeb.org wheezy-php55 all<br /><br />
 
deb-src http://packages.dotdeb.org wheezy-php55 all<br /><br />
</blockquote><br />
+
</code><br />
  
 
Faite '''CTRL''' + '''X''' puis '''O''' pour sauvegarder la modification.<br />
 
Faite '''CTRL''' + '''X''' puis '''O''' pour sauvegarder la modification.<br />
Ligne 60 : Ligne 53 :
 
<code>aptitude update && aptitude upgrade</code><br />
 
<code>aptitude update && aptitude upgrade</code><br />
  
 +
Vous pouvez aussi mettre les dépôts pour debian pour obtenir la version '''mainline''' (1.9.0 à ce jour).
 +
 +
<code>nano /etc/apt/sources.list</code><br />
 +
 +
Ajouter à la fin :<br />
 +
 +
<code>
 +
deb http://nginx.org/packages/mainline/debian/ wheezy nginx<br />
 +
deb-src http://nginx.org/packages/mainline/debian/ wheezy nginx<br />
 +
</code>
 +
 +
On met à jour :<br />
 +
<code>aptitude update && aptitude upgrade</code><br />
 +
 +
et procéder à l'installation...
  
 
=<font color="blue">Installation nginx</font>=
 
=<font color="blue">Installation nginx</font>=
Ligne 104 : Ligne 112 :
 
'''NOTE''': On sauvegarde dans un emplacement différent pour que Nginx ne le charge pas ce qui évitera des conflits inutiles.
 
'''NOTE''': On sauvegarde dans un emplacement différent pour que Nginx ne le charge pas ce qui évitera des conflits inutiles.
  
<code>cp /etc/nginx/default{,.origine}</code><br />
+
<code>cp /etc/nginx/sites-enabled/default /etc/nginx/default</code><br />
  
 
On édite le fichier :<br />
 
On édite le fichier :<br />
Ligne 272 : Ligne 280 :
  
 
<blockquote>
 
<blockquote>
worker_priority -10; # priorite donne a nginx par le systeme
+
worker_priority -10; # priorite donne a nginx par le systeme<br />
 
worker_rlimit_nofile 50000;
 
worker_rlimit_nofile 50000;
 
</blockquote><br />
 
</blockquote><br />
Ligne 422 : Ligne 430 :
  
 
<blockquote>APC Support</blockquote>
 
<blockquote>APC Support</blockquote>
 
  
 
==<font color="blue">Configuration fcgiwrap</font>==
 
==<font color="blue">Configuration fcgiwrap</font>==
 +
 +
Vous devez avoir Nginx d'installé avant de commencer !
  
 
Installation et configuration de '''fcgiwrap'''.
 
Installation et configuration de '''fcgiwrap'''.
 
  
 
<code>aptitude install fcgiwrap</code>
 
<code>aptitude install fcgiwrap</code>
 +
 +
{{command|cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf}}
  
 
Sauvegarde :
 
Sauvegarde :
Ligne 458 : Ligne 468 :
 
<code>#      fastcgi_pass unix:/var/run/php5-fpm.sock;</code>
 
<code>#      fastcgi_pass unix:/var/run/php5-fpm.sock;</code>
  
Après '''}''' et avant '''# deny access to .htaccess''', ajouter :
+
On copie le fichier de configuration dans le répertoire de Nginx :
 +
 
 +
{{command|cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf}}
 +
 
 +
Maintenant on vas déclarer la prise en compte des fichiers de type '''.cgi'''.
 +
 
 +
On édite notre virtualhost:
 +
<code>nano /etc/nginx/sites-enabled/default</code>
  
 +
Avant '''# deny access to .htaccess''', ajouter :
  
 
         location /cgi-bin/ {<br />
 
         location /cgi-bin/ {<br />
Ligne 514 : Ligne 532 :
 
         /etc/init.d/php5-fpm restart<br />
 
         /etc/init.d/php5-fpm restart<br />
 
         /etc/init.d/nginx restart<br />
 
         /etc/init.d/nginx restart<br />
 
  
 
=<font color="blue">Installation du serveur MySQL</font>=
 
=<font color="blue">Installation du serveur MySQL</font>=
Ligne 639 : Ligne 656 :
 
A la question
 
A la question
 
<blockquote>Faut-il configurer la base de données de phpmyadmin avec │
 
<blockquote>Faut-il configurer la base de données de phpmyadmin avec │
│ dbconfig-common</blockquote> , répondre '''Non'''.
+
│ dbconfig-common</blockquote> , répondre '''Oui'''.
  
 
On créer un lien symbolique:
 
On créer un lien symbolique:
Ligne 649 : Ligne 666 :
  
 
A ce stade tout est prêt, vous pouvez accéder a votre base de donnée via http://votre-site.com/phpmyadmin.
 
A ce stade tout est prêt, vous pouvez accéder a votre base de donnée via http://votre-site.com/phpmyadmin.
 +
 +
=<font color="blue">Protéger l'accès à PhpMyAdmin</font>=
 +
 +
<code>nano /etc/nginx/sites-available/default</code>
 +
 +
<code>
 +
  location /phpmyadmin {
 +
    alias /usr/share/nginx/html/phpmyadmin/;
 +
    allow VOTRE_IP;
 +
    allow IP_ADMIN1;
 +
    ## Pour afficher un message personnalise
 +
    rewrite ^(.*)$ http://i.imgur.com/11LyTX1.png redirect;
 +
    ## On interdit l'acces a tout le monde sauf a nous
 +
    deny all;
 +
    index index.php index.html index.htm;
 +
  }
 +
</code>
 +
 +
 +
==<font color="blue">Création d'une base de donnée</font>==
 +
 +
Accéder à PhpMyAdmin avec votre navigateur.
 +
 +
[http://votredomaine.net/phpmyadmin http://votredomaine.net/phpmyadmin]
  
 
=<font color="blue">Hotlinking</font>=
 
=<font color="blue">Hotlinking</font>=
Ligne 759 : Ligne 800 :
 
<font color="red">Q</font> J'ai l'erreur '''24: Too many open files''', que faire ?
 
<font color="red">Q</font> J'ai l'erreur '''24: Too many open files''', que faire ?
  
<font color="blue">R</font> Vous devrer augmenter la valeur '''worker_rlimit_nofile''' en conséquence.
+
<font color="blue">R</font> Vous devez augmenter la valeur '''worker_rlimit_nofile''' en conséquence.
  
 
<font color="red">Q</font> Vous avez un problème lors de l'upload d'un fichier ?
 
<font color="red">Q</font> Vous avez un problème lors de l'upload d'un fichier ?
 
   
 
   
 
<font color="blue">R</font> Si vous avez modifié '''upload_max_filesize''' et '''post_max_size''' dans php, il vous faudra augmenter la variable '''client_max_body_size''';
 
<font color="blue">R</font> Si vous avez modifié '''upload_max_filesize''' et '''post_max_size''' dans php, il vous faudra augmenter la variable '''client_max_body_size''';
 +
 +
<font color="red">Q</font> J'ai l'erreur '''Headers and client library minor version mismatch''', que faire ?
 +
 +
<font color="blue">R</font> Vous devez installer le paquet '''php5-mysqlnd''' [https://www.dotdeb.org/2014/04/04/about-the-mysql_connect-headers-and-client-library-minor-version-mismatch-warning-2/ Source].
 +
  
 
<font color="red">Q</font> Comment tester les performances de Nginx ?
 
<font color="red">Q</font> Comment tester les performances de Nginx ?
  
 
<font color="blue">R</font> [http://www.joedog.org/siege-home Siege], [http://redmine.lighttpd.net/projects/weighttp/wiki Weighttp] et bien d'autres présent sur la toile.
 
<font color="blue">R</font> [http://www.joedog.org/siege-home Siege], [http://redmine.lighttpd.net/projects/weighttp/wiki Weighttp] et bien d'autres présent sur la toile.

Version actuelle en date du 2 septembre 2015 à 10:03

Introduction

Warning WARNING
Ce tutoriel n'est pas destiné aux administrateurs ayant installé un serveur lampp !

Ce Tutoriel a été réalisé afin de vous montrez comment créer un serveur web avec nginx, php, mysql et phpmyadmin.

Au final vous pourrez installer votre site web, cms etc...

Il faut savoir que ce tutoriel est destiné aux utilisateurs ayant quelques bases sur l'utilisation de Linux et ses dérivés.

Note.png Note

C'est une configuration type basé sur ce que j'ai trouvé sur la toile donc à vous de tester et de peaufiner la configuration de Nginx pour obtenir le meilleur de votre serveur web.

Warning WARNING
Pensez à faire une sauvegarde de chaque fichier AVANT d'effectuer toute modifications !

Free 4 Funs ne pourra être tenue responsable d’une instabilité du système résultant d’une mauvaise installation du système d’exploitation.


Requis

Connecter vous en ROOT via puTTY.

Nous allons utiliser les dépôts DotDeb pour avoir une version de Nginx à jour.

Comme toujours, nous procédons à une sauvegarde du fichier :

cp /etc/apt/sources.list{,.defaut}

nano /etc/apt/sources.list

Ajouter à la fin :

deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all

Si vous souhaitez avoir php 5.5, ajouter ceci à la suite :
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all


Faite CTRL + X puis O pour sauvegarder la modification.

Maintenant, on ajoute la clé :
wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -

Cela nous retourne :

OK

On met à jour :
aptitude update && aptitude upgrade

Vous pouvez aussi mettre les dépôts pour debian pour obtenir la version mainline (1.9.0 à ce jour).

nano /etc/apt/sources.list

Ajouter à la fin :

deb http://nginx.org/packages/mainline/debian/ wheezy nginx
deb-src http://nginx.org/packages/mainline/debian/ wheezy nginx

On met à jour :
aptitude update && aptitude upgrade

et procéder à l'installation...

Installation nginx


aptitude install nginx php5-fpm php-apc

On vérifie que tout fonctionne, dans votre navigateur, taper http://votre_ip_ou_domaine.fr

Vous devriez voir :

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

Dans ce tutoriel, nous installons le minimum mais vous pouvez inclure les modules php que vous souhaitez, voici une petite liste parmi les plus utilisés :
php5-curl php5-intl php-pear php5-imagick php5-imap php5-memcache php5-memcached php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached

Vérification de la version de Nginx :

nginx -V


Configuration Nginx

Voici ce qu'il faut savoir sur les différentes configuration :

  • nginx.conf: C'est le fichier de configuration du serveur, c'est ici que tout se jouera sur la stabilité de votre serveur hormis votre machine bien entendu.
  • sites-available: Fichier de configuration pour les vhosts qui par défaut sont ignoré par Nginx.
  • sites-enabled: C'est un lien symbolique du fichier de configuration qui sera dans sites-available
  • conf.d : Utilisé pour faire une configuration commun aux divers sites, pour désactiver un fichier .conf, il faudra le renommer en .disabled.


Configuration php5-fpm

Sauvegarde :
NOTE: On sauvegarde dans un emplacement différent pour que Nginx ne le charge pas ce qui évitera des conflits inutiles.

cp /etc/nginx/sites-enabled/default /etc/nginx/default

On édite le fichier :
nano /etc/nginx/sites-enabled/default

Chercher :

#location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# fastcgi_index index.php;
# include fastcgi_params;
#}


Remplacer par :

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}


On active la redirection en cas d'erreur de type 50X :
Chercher :

#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
#root /usr/share/nginx/html;
#}

Remplacer par :

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}



ensuite, on interdit la lecture des fichirs .htaccess :
Chercher :

#location ~ /\.ht {
# deny all;
#}

Remplacer par :

location ~ /\.ht {
deny all;
}


On ajoute la lecture des fichiers de type *.php.

Chercher index index.html index.htm;, ajouter après index.htm et avant ; :

index.php

Ceci doit ressembler à :
index index.html index.htm index.php;


On ajoute un système de cache pour les fichiers dit statique (images, css, js etc...), soit on l'intègre en dur dans la configuration soit on créer notre propre configuration (ce qui en fera l'objet ici) :

nano /etc/nginx/conf.d/nginx-caches.conf

server {

location ~* \.(?:rss|atom)$ {
expires 1h;
add_header Cache-Control "public";
}
location ~* \.(?:jpg|jpeg|gif|png|ico|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M; # ou mettre la valeur à max si vous le souhaiter
access_log off;
add_header Cache-Control "public";
try_files $uri $uri/ @rewrite;
gzip off;
}
location ~* \.(jpg|jpe?g|gif|png|ico|html|xml)$ {
access_log off;
expires 30d;
}
location ~* \.(mp3|wav)$ {
expires 1y;
access_log off;
gzip off;
}
location ~* \.(css)$ {
expires 1d;
access_log off;
}
location ~* \.(js)$ {
access_log off;
log_not_found off;
expires 7d;
}
location = /favicon.ico {
access_log off;
return 204;
}
location ~ /\.ht {
deny all;
}
}


On déclare notre fichier nginx-caches.conf :
nano /etc/nginx/nginx.conf

Chercher :

include /etc/nginx/sites-enabled/*;


Ajouter après :

## caches nginx
include /etc/nginx/conf.d/nginx-caches.conf;



Pour vous protéger des flood http, vous pouvez ajoutez ceci dans votre configuration :

Sauvegarde :
cp /etc/nginx/nginx.conf{,.origine}

nano /etc/nginx/nginx.conf

Chercher :

worker_processes 4;


Remplacer par :

worker_processes 1; #ou mettre la valeur en auto, egale a la valeur du nombre de processeur


Chercher :

worker_processes 1;

Ajouter après :

worker_priority -10; # priorite donne a nginx par le systeme
worker_rlimit_nofile 50000;



Dans le block events { :

Chercher :

worker_connections 768;

Remplacer par :

worker_connections 1024; use epoll;


Dans le block http { :

Cette étape regroupe plusieurs modifications donc soyez vigilant !

Chercher :

# Basic Settings ##


Ajouter et/ou Remplacer par :

limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

connection_pool_size 256;
request_pool_size 4k;
## Start: Size Limits & Buffer Overflows ##
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
## END: Size Limits & Buffer Overflows ##

keepalive_requests 100000;
server_tokens off;
server_names_hash_bucket_size 64;

## Start: Timeouts ##
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
## End: Timeouts ##

output_buffers 1 32k;
postpone_output 1460;

types_hash_max_size 2048;

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+$


On peut définir error_log ce qui prendra en compte uniquement les erreurs critiques :
error_log /var/log/nginx/error.log crit;

Vous pouver également désactiver la variable access_log si vous souhaiter avoir de meilleur performance, ceci aura pour effet de ne plus sauvegarder les informations de vos visiteurs :

Chercher :
access_log /var/log/nginx/access.log;

Remplacer par :

  1. access_log /var/log/nginx/access.log;


Chercher include /etc/nginx/sites-enabled/*; :

Ajouter après :

limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

server {
limit_conn conn_limit_per_ip 10;
limit_req zone=req_limit_per_ip burst=10 nodelay;
}


Faite CTRL + X puis O pour sauvegarder la modification.

Maintenant, éditons le fichier php.ini :

Sauvegarde :
cp /etc/php5/fpm/php.ini{,.origine}

nano /etc/php5/fpm/php.ini

Chercher (Ligne 754) :
;cgi.fix_pathinfo=1

Remplacer par :
cgi.fix_pathinfo=0

Avant de redémarer, on peut vérifier que la configuration est correcte :
nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
</blocquote>

On redémarre Nginx et php5-fpm :

service php5-fpm restart
service nginx restart

Vérifions que le module apc soit bien chargé :

nano /usr/share/nginx/html/info.php

Ajouter :
echo "<?php phpinfo(); ?>" >> /usr/share/nginx/html/info.php


Faite CTRL + X puis O pour sauvegarder la modification.

Dans votre navigateur, taper http://votre_ip_ou_domaine.fr/info.php

Sous Firefox, appuyer sur CTRL + F et taper apc puis Entrée et vous devriez trouver :

APC Support

Configuration fcgiwrap

Vous devez avoir Nginx d'installé avant de commencer !

Installation et configuration de fcgiwrap.

aptitude install fcgiwrap

Command
cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf

Sauvegarde : cp /etc/php5/fpm/pool.d/www.conf{,.origine}

On édite le fichier www.conf: nano /etc/php5/fpm/pool.d/www.conf

Chercher : listen = /var/run/php5-fpm.sock

Remplacer par : listen = 127.0.0.1:9000

On édite notre virtualhost: nano /etc/nginx/sites-enabled/default

Chercher : # fastcgi_pass 127.0.0.1:9000;

Remplacer par : fastcgi_pass 127.0.0.1:9000;

Chercher : fastcgi_pass unix:/var/run/php5-fpm.sock;

Remplacer par : # fastcgi_pass unix:/var/run/php5-fpm.sock;

On copie le fichier de configuration dans le répertoire de Nginx :

Command
cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf

Maintenant on vas déclarer la prise en compte des fichiers de type .cgi.

On édite notre virtualhost: nano /etc/nginx/sites-enabled/default

Avant # deny access to .htaccess, ajouter :

       location /cgi-bin/ {
# Disable gzip (it makes scripts feel slower since they have to complete
# before getting gzipped)
gzip off;
# Set the root to /usr/lib (inside this location this means that we are
# giving access to the files under /usr/lib/cgi-bin)
root /usr/share/nginx/html;
# Fastcgi socket
fastcgi_pass unix:/var/run/fcgiwrap.socket;
# Fastcgi parameters, include the standard ones
include /etc/nginx/fastcgi_params;
# Adjust non standard parameters (SCRIPT_FILENAME)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Faite CTRL + X puis O pour sauvegarder la modification.

On vérifie que tout est ok:
nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Création du répertoire cgi-bin:
mkdir -p /usr/share/nginx/html/cgi-bin

On créer un fichier test.cgi :
nano /usr/share/nginx/html/cgi-bin/test.cgi


#!/usr/bin/perl -w

# Tell perl to send a html header.
# So your browser gets the output
# rather then <stdout>(command line
# on the server.)
print "Content-type: text/html\n\n";
# print your basic html tags.
# and the content of them.
print "<html><head><title>Hello World!! </title></head>\n";

print "<body>

Hello world

</body></html>\n";

Faite CTRL + X puis O pour sauvegarder la modification.

chmod 755 /usr/share/nginx/html/cgi-bin/test.cgi

On recharge et redémarre nginx ainsi que php-fpm:

       /etc/init.d/nginx reload
/etc/init.d/php5-fpm restart
/etc/init.d/nginx restart

Installation du serveur MySQL

aptitude install mysql-server-5.5 php5-mysql

Mettez un mot de passe puis confirmer celui-ci et la configuration sera terminée.

Définisser un mot de passe pour le compte administrateur ROOT de MySQL.

F4f mysql.jpg

F4f mysql confirm.jpg

On installe les tables Mysql:

A exécuter en root :

mysql_install_db

Il faudra créer un utilisateur, n'oublier pas qu'on a choisis de ne pas utiliser la base de donnée de phpmyadmin (dbconfig-common) :

A exécuter en root :

mysql -p

après :

use mysql;

ensuite :

NOTE: Penser à modifier votreutilisateur avant de copier/coller...

GRANT ALL PRIVILEGES ON *.* TO votreutilisateur@localhost IDENTIFIED BY 'votre_mot_de_passe' WITH GRANT OPTION;

flush privileges;

exit

Warning.png Concernant l'étape ci-dessous, nous vous recommandons de répondre y à ces questions :

* Remove anonymous users,
* Remove test database and access to it

Après, ce n'est qu'une recommandations, vous faites comme bon vous semble. ;)

On peut sécuriser MySQL en exécutant : /usr/bin/mysql_secure_installation





NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
... skipping.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
... skipping.

By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...



All done! If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!


Installation de PhpMyAdmin

aptitude install phpmyadmin

Lors de la question Serveur web à reconfigurer automatiquement, ne rien sélectionner et appuyez sur Entrée.
A la question

Faut-il configurer la base de données de phpmyadmin avec │ │ dbconfig-common
, répondre Oui.

On créer un lien symbolique: ln -s /usr/share/phpmyadmin /usr/share/nginx/html

On redémarre Nginx :

service nginx restart

A ce stade tout est prêt, vous pouvez accéder a votre base de donnée via http://votre-site.com/phpmyadmin.

Protéger l'accès à PhpMyAdmin

nano /etc/nginx/sites-available/default

 location /phpmyadmin {
   alias /usr/share/nginx/html/phpmyadmin/;
   allow VOTRE_IP;
   allow IP_ADMIN1;
   ## Pour afficher un message personnalise
   rewrite ^(.*)$ http://i.imgur.com/11LyTX1.png redirect;
   ## On interdit l'acces a tout le monde sauf a nous
   deny all;
   index index.php index.html index.htm;
 }


Création d'une base de donnée

Accéder à PhpMyAdmin avec votre navigateur.

http://votredomaine.net/phpmyadmin

Hotlinking

Je vous conseil fortement de mettre en place cette astuce si votre bande passante est limitée, ceci empêchera tout webmaster de prendre le lien de vos images.

Deux exemples, bien entendu, vous pouvez modifier cet exemple:

 location ~ .(gif|png|jpe?g|tga|bmp)$ {
    valid_referers none blocked .nomdudomaine.com;
    if ($invalid_referer) {
       return   403;
   }
 }

Ici, le "voleur" aura une joli erreur 403.

Vous pouvez également effectuer une redirection avec le module rewrite.

Placer l'image de votre choix dans votre FTP puis insérer ce code dans votre vhost :

 location ~ .(gif|png|jpe?g|tga|bmp)$ {
    valid_referers none blocked .nomdudomaine.com;
    if ($invalid_referer) {
       rewrite (.*)\.(jpg|jpeg|png|gif)$ http://nomdudomaine.com/chemin_de_votre_images/no-hotlink.jpg;
   }
 }


Ici, le "voleur" aura votre image qui s'affichera sur son site à la place de l'image.


Protéger un répertoire ?

Il nous faudra installer l'outil d'apache :

aptitude install apache2-utils

Création du fichier .htpasswd dans le dossier test

htpasswd -c /usr/share/nginx/html/test/.htpasswd free4funs

New password: Re-type new password: Adding password for user free4funs

On déclare à nginx : nano /etc/nginx/sites-enabled/default

A ajouter dans le block server { :

       location /test {
index index.html index.htm index.php;
auth_basic "Accès Restreint !";
auth_basic_user_file /usr/share/nginx/html/test/.htpasswd;

autoindex on; #Affiche l'index du dossier si aucun fichier, a retirer si vous voulez cacher vos fichiers

       }


On redémarre Nginx :

service nginx restart

Maintenant, dans votre navigateur, essayer d'entrer dans votre dossier :

Nginx htpasswd.jpg

et si vous n'indiquez pas le bon identifiant :

Nginx 401 htpasswd.jpg


URL rewriting

Nous n'allons pas expliquer en détails mais vous montrez quelques exemples de réécriture d'URL.

Créer une page test.html avec un peu de contenu : <html>

 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>Test rewrite Nginx</title>
 </head>
 <body>
   Test du module rewrite
 </body>

</html>

Maintenant, éditons notre vhost :

 nano /etc/nginx/sites-enabled/default

Ajouter après server { :

 location /trouver { rewrite ^/trouver\.html$ /test.html break; }

Sauvegarder la modification puis redémarrer nginx.

Maintenant, dans votre navigateur, entrer votredomaine.net/trouver.html

Il devrait afficher Test du module rewrite. Si toutefois, cela ne fonctionnais pas, vider le cache du navigateur et actualiser la page.

EN COURS D'ÉDITION...


F.A.Q

Q J'ai l'erreur 24: Too many open files, que faire ?

R Vous devez augmenter la valeur worker_rlimit_nofile en conséquence.

Q Vous avez un problème lors de l'upload d'un fichier ?

R Si vous avez modifié upload_max_filesize et post_max_size dans php, il vous faudra augmenter la variable client_max_body_size;

Q J'ai l'erreur Headers and client library minor version mismatch, que faire ?

R Vous devez installer le paquet php5-mysqlnd Source.


Q Comment tester les performances de Nginx ?

R Siege, Weighttp et bien d'autres présent sur la toile.