Nous n'aborderons pas les paramètres de base du serveur Nginx lui-même et de ses fonctionnalités, nous l'avons déjà fait dans notre article précédent. Mais certains paramètres doivent être pris en compte.
Définir et spécifier le nombre de handlers et le nombre de connexions par processeur. Pour cela, nous allons spécifier les valeurs dans le fichier /etc/nginx/nginx.conf :
worker_processes 1; worker_connections 1024;
L'idée de base dans le choix de ces valeurs est que le nombre de clients servis est égal au nombre de handlers multiplié par le nombre de connexions pour chaque processeur. Dans notre cas, il s'agit donc de 1 024 clients. Pour éviter les problèmes d'entrée-sortie, suivez la règle 1 du processeur par cœur de processeur. Vous pouvez déterminer le nombre de noyaux par commande :
cat /proc/cpuinfo | grep processor processor : 0
Mon processeur a un noyau. Le nombre de processeurs est donc de un. Le nombre de connexions peut être ajouté en fonction des besoins. Ce paramètre est déjà sélectionné dans la pratique.
Pour des raisons de sécurité, la directive peut être activée
server_tokens off
Extrait du manuel : "Autorise ou interdit l'émission de la version de Nginx dans les messages d'erreur et dans le champ "Server" du titre de la réponse."
Cette directive est ajoutée à la section http/server/local du fichier de configuration.
Spécifions la taille des données transmises par le serveur :
client_max_body_size 20m; client_body_buffer_size 128k;
Cette directive est ajoutée à la section http/server/local du fichier de configuration.
Configurons le cache pour les fichiers statiques. Cela permet d'économiser les ressources du serveur et la bande passante. Désactivez la journalisation et fixez la date d'expiration de l'en-tête à 100 jours pour les fichiers statiques.
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
Pour interagir avec PHP-FPM, vous pouvez spécifier un socket Unix. Pour ce faire, nous devons écrire dans notre halo de configuration :
# Pass PHP scripts to PHP-FPM
location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
Dans les paramètres de PHP-FPM, vous devez spécifier d'écouter l'IP et le port spécifiés dans notre configuration. Ceci est fait par la directive listening du fichier de configuration du pool.
Pour des raisons de sécurité, vous pouvez empêcher l'accès aux fichiers cachés.
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}
La configuration de PHP-FPM elle-même peut être divisée en 2 étapes : la définition des paramètres globaux qui est effectuée dans le fichier
/etc/php5/fpm/php-fpm.conf
et la configuration du pool. La configuration du pool est spécifiée dans les fichiers du répertoire
/etc/php5/fpm/pool.d/
Les paramètres globaux ne sont pas très intéressants et peuvent être consultés dans la documentation, mais ce sont les principaux paramètres de la configuration des pools que nous allons examiner.
Chaque pool est configuré dans un fichier distinct. Si vous effectuez une commande
ls -l /etc/php5/fpm/pool. d/
nous verrons que le système possède déjà un fichier de configuration pour le pool www. Examinons la configuration dans son exemple.
Un point important de la configuration consiste à choisir le nombre de gestionnaires utilisés pour exécuter les scripts PHP. Leur nombre doit être choisi judicieusement. Un nombre insuffisant de gestionnaires ne permettra pas un traitement efficace et rapide des requêtes, mais un nombre trop élevé épuisera les ressources dont le serveur a besoin pour d'autres tâches. Le nombre de processeurs doit être choisi en tenant compte du fait que, même en cas de pic des demandes adressées au serveur, l'utilisation de ses ressources doit rester dans des limites raisonnables et ne pas conduire à sa surcharge.
Maintenant, regardons un peu le fichier de configuration et spécifions les options suivantes. Ah oui, dans le fichier de configuration, les lignes commençant par le symbole " ;" sont des commentaires et ne sont pas considérées comme des directives.
Spécifier le mode dynamique de création des processus, ainsi le nombre de processus PHP-FPM démarrés dépendra directement de la charge du serveur.
pm = dynamic
Définissez le nombre maximum de processus enfants.
pm.max_children = 6
Ensuite, vous devez spécifier le nombre de processus enfants qui s'exécuteront dès que le serveur sera chargé. Par défaut, cette valeur est de 2. Vous pouvez l'augmenter si les ressources le permettent ; fixons-la à 3.
pm.start_servers = 3
Vous devez également spécifier le nombre minimum et le nombre maximum de processus inactifs. Le nombre minimum est égal au nombre de processus en cours d'exécution au démarrage du serveur. Nous fixerons le nombre maximum en partant du principe qu'il ne doit pas dépasser le nombre maximum autorisé de processus enfants.
pm.min_spare_servers = 3
pm.max_spare_servers = 5
Ces valeurs sont données à titre d'exemple et d'explication. Mais dans chaque situation spécifique, elles peuvent varier. Les valeurs optimales dépendent des capacités du serveur et des ressources disponibles, du nombre et de la complexité du code PHP, du nombre de requêtes et de la charge du serveur. Ces paramètres ne peuvent être obtenus que par une application pratique et un test du site créé.
Examinons maintenant les paramètres spécifiques.
Tout d'abord, nous allons configurer l'enregistrement d'informations sur les scripts qui s'exécutent lentement. Ces informations seront utiles pour clarifier les raisons des retards du site. Tout d'abord, nous allons définir un seuil de temps à partir duquel l'exécution du script sera considérée comme lente.
request_slowlog_timeout = 10s
Les unités de temps peuvent être spécifiées en secondes (s), minutes (m), heures (h) ou jours (d). Nous avons spécifié un temps de 10 secondes.
Nous allons maintenant spécifier le nom du fichier dans lequel les informations seront envoyées.
slowlog = /var/log/slowphp.log
Ce fichier peut être utilisé pour l'étude des scripts "lents".
Si vous souhaitez exécuter des scripts dans un environnement isolé ou un environnement chroot. Cette option est généralement utilisée à des fins de sécurité. Vous devez définir l'option chroot pour activer cette fonctionnalité.
Lorsque vous définissez cette option, vous devez garder à l'esprit que cela entraînera des changements dans le traitement des scripts PHP.
Tous les chemins d'accès aux fichiers seront désormais considérés comme relatifs au répertoire spécifié, et les scripts PHP ne pourront pas accéder aux sockets situés en dehors du répertoire spécifié.
Pour gérer plusieurs sites, il peut être nécessaire d'ajouter des pools supplémentaires. Cela vous permet de configurer des paramètres différents pour chaque site individuellement. Pour créer un pool supplémentaire, copiez notre fichier
/etc/php5/fpm/pool.d/www.conf
sous un nouveau nom, par exemple
/etc/php5/fpm/pool.d/www2.conf
Ouvrez un nouveau fichier et changez le nom du pool. Pour ce faire, en haut du fichier, remplacez la ligne [www] par [www2].
Et modifiez la ligne :
listen = /var/run/php5-fpm.sock
on
listen = /var/run/www2.sock
Si nous voulons que le gestionnaire écoute sur la paire ip:port, la directive listen se présentera comme suit
listen = 127.0.0.1:9000
Ensuite, nous redémarrons le service
/etc/init. d/php5-fpm restart