Voici cinq conseils pour optimiser les performances du serveur Apache :
(Partage de vidéos d'apprentissage : Vidéo de programmation)
1 , Mettez toujours à jour Apache vers sa dernière version
Sans aucun doute, l'installation de la dernière version d'Apache est probablement la première chose à considérer. Depuis le 19 novembre 2015, la dernière version d'Apache dans les référentiels CentOS 7 est la 2.4.6, tandis que la dernière version de Debian est la 2.4.10.
Cependant, une amélioration ou une correction de bug peut avoir été récemment ajoutée à une version stable nouvellement publiée, qui peut ensuite être téléchargée et installée à partir des sources. Les instructions de compilation et d'installation sont également fournies ici. Veuillez garder à l'esprit que si vous choisissez cette méthode de mise à jour, vous devrez peut-être sauvegarder vos fichiers/sites/hôtes virtuels de configuration actuels par mesure de précaution.
Vous pouvez vérifier la version actuellement installée comme suit :
# httpd -v [基于RedHat / CentOS的系统] # apache2 -v [基于Debian / Ubuntu的系统]
En règle générale, sauf s'il n'y a pas d'autre moyen, respectez les packages de la distribution choisie La méthode de mise à jour fournie par le gestionnaire (yum update httpd ou aptitude safe-upgrade apache2, pour CentOS ou Debian respectivement).
2. Si vous utilisez un noyau antérieur à 2.4, veuillez envisager de mettre à niveau immédiatement
Pourquoi ? Les versions 2.4 et supérieures du noyau activent l'appel système du noyau sendfile par défaut. Ceci, à son tour, facilite les transferts de fichiers réseau hautes performances (requis dans le contexte de la communication serveur-client Web) et permet à Apache de diffuser du contenu statique plus rapidement et de réduire l'utilisation du processeur en effectuant des opérations de lecture et d'envoi simultanées.
Vous pouvez afficher le noyau actuellement installé à l'aide de la commande suivante :
# uname -r
Bien que ce ne soit pas un processus convivial pour les débutants, la mise à niveau de votre noyau est un exercice amusant pour en savoir plus sur les composants internes de Linux.
3. Choisissez le module multi-traitement (MPM) qui convient le mieux à votre situation
En fait, MPM accepte les requêtes des clients et l'utilisation de sous-processus (et de threads non plus) pour gérer de telles requêtes, étendant ainsi les capacités modulaires d'Apache.
À partir de la version 2.4, Apache propose trois MPM différents parmi lesquels choisir, en fonction de vos besoins :
Le preforkMPM utilise plusieurs processus enfants sans avoir à créer de threads. Chaque processus gère une connexion à la fois sans créer de threads distincts pour chaque processus. Sans entrer dans les détails, on peut dire que ce MPM est utilisé uniquement lors du débogage d'applications ou lorsque l'application doit gérer des modules non thread-safe comme mod_php.
Le workerMPM utilise plusieurs threads par processus enfant, et chaque thread gère une connexion à la fois. C'est un bon choix pour les serveurs à fort trafic, car il permet de gérer davantage de connexions simultanées en utilisant moins de RAM que le cas précédent.
Enfin, eventMPM est le MPM par défaut dans la plupart des installations Apache à partir de la version 2.4 et supérieure. Il est similaire au MPM de travail dans le sens où il crée également plusieurs threads par processus enfant mais présente un avantage : il fait que les connexions KeepAlive ou inactives (pendant qu'elles restent dans cet état) sont gérées par un seul thread, libérant ainsi la mémoire qui peut être alloué à d’autres threads. Ce MPM ne convient pas à une utilisation avec des modules non thread-safe tels que mod_php et doit être remplacé par un tel PHP-FPM.
Pour vérifier quel MPM votre installation Apache utilise, vous pouvez procéder comme suit :
# httpd -V
L'image ci-dessous montre que ce serveur Web particulier utilise le MPM prefork.
Pour modifier ce paramètre, vous devez modifier :
/etc/httpd/conf.modules.d/00-mpm.conf [basé sur RedHat / Systèmes CentOS]
/etc/apache2/mods -available/load [Systèmes basés sur Debian/Ubuntu]
qui peut être mpm_event, mpm_worker ou mpm_prefork.
et décommentez la ligne qui charge les modules requis comme suit :
#LoadModule mpm_event_module modules/mod_mpm_event.so
Remplacez par :
LoadModule mpm_event_module modules/mod_mpm_event.so
Remarque : pour que l'événement MPM fonctionne dans Debian, vous devrez peut-être installer le package libapache2-mod-fastcgi à partir d'un référentiel non libre.
De plus, pour CentOS, vous avez besoin de php-fpm (avec fcgi et mod_fcgid), alors que dans Debian, cela s'appelle php5-fpm (avec apache2-mpm-event).
Enfin, redémarrez le serveur Web et le service php-fpm (ou php5-fpm) nouvellement installé :
Sur RedHat/CentOS
# systemctl restart httpd php-fpm && systemctl activer httpd php-fpm
Sur Debian/Ubuntu
# systemctl restart apache2 php5-fpm && systemctl activer apache2 php5-fpm
Pendant que vous le pouvez Si vous configurez Apache pour utiliser un MPM spécifique, cette configuration peut être remplacée pour chaque hôte virtuel de la même manière que celle décrite précédemment.
只需将相应的标签放入每个虚拟主机的配置文件中即可开始使用 - 但请确保每个虚拟主机使用一个且只有一个MPM。
最后,请注意,无论您选择的发行版如何,php-fpm都依赖于FastCGI的实现,这就是为什么我之前推荐了额外的软件包安装的原因。
有关php-fpm的更多详细信息和示例以及它如何与事件MPM一起提高Apache的性能,您应该参考官方文档。
这是我在上一张图片所示的同一个框中将默认MPM从prefork更改为event后所看到的:
在CentOS 7中,您需要确保通过防火墙启用了http和https服务,并且网络接口已正确添加到默认区域。
例如:
# firewall-cmd --zone = internal --add-interface = tun6to4
# firewall-cmd --zone = internal --add-interface = tun6to4 --permanent
# firewall-cmd --set-default-zone = internal
# firewall-cmd --add-service = http
# firewall-cmd --add-service = https
# firewall-cmd --add-service = http --permanent
# firewall-cmd --add-service = https --permanent
# firewall-cmd --reload
我提出这个问题的原因是因为我最近遇到了一个问题,即云VPS 中的默认firewalld配置设置阻止了php-fpm和Apache处理php文件。
作为一个基本的测试(我相信你可以想到更复杂或更紧张的),我将创建一个php文件,检查是否存在另外test.php两个CentOS 7服务器的同一目录中具有相同硬件特性和负载的文件但是与不同的MPM。其中一个将使用事件,另一个将使用prefork:
这是我保存到名为的文件的PHP代码checkiffileexists.php:
<?PHP
$ filename =‘test.php’;
if(file_exists($ filename)){
echo“文件$ filename存在”;
} else {
echo“文件$ filename不存在”;
}
?>
然后我们将运行Apache基准测试工具(ab),同时发出200个请求,直到2000个请求完成:
# ab -k -c 100 -n 2000 localhost/checkiffileexists.php
让我们运行测试并比较结果。注意性能统计:
正如您所看到的,带有事件的服务器的性能在此测试的每个方面都高于其prefork对应物。
四、明智地为Apache分配RAM
也许最重要的硬件项是要为每个Apache进程分配的RAM量。虽然您无法直接控制它,但您可以通过MaxRequestWorkers指令(以前在Apache 2.2中称为MaxClients)限制子进程的数量,这将限制Apache对RAM的使用。同样,您可以在每个主机或每个虚拟主机的基础上设置此值。
要做到这一点,你应该注意Apache使用的平均RAM量,然后乘以MaxRequestWorkers的数量,这就是为Apache进程分配的内存量。您从不希望Web服务器做的一件事是开始使用swap,因为这会显着降低其性能。因此,您应始终将Apache的RAM使用限制在您能够承受的范围内,并且永远不要依赖交换。
例如,以下块将同时客户端的数量限制为30。如果有更多客户端访问主机,他们可能会遇到延迟或暂时故障,可以通过刷新浏览器轻松解决。虽然这可能被认为是不合需要的,但它对于服务器来说更健康,从长远来看,对您的网站也是最好的。
您可以将此块放在内部,/etc/httpd/conf/httpd.conf或者/etc/apache2/apache2.conf取决于您使用的是CentOS还是Debian。
请注意,同样的原则适用于所有MPM - 我在此处使用事件继续前面提示中概述的概
五、了解您的应用程序
根据经验,您不应加载任何非严格需要的Apache模块才能运行。这至少需要了解服务器上运行的应用程序的全部知识,特别是如果您是系统管理员并且还有另一个负责开发的团队。
您可以列出当前加载的模块:
# httpd -M [基于RedHat / CentOS的系统] # apache2ctl -M [基于Debian / Ubuntu的系统]
要卸载/禁用CentOS中的模块,您需要注释掉以LoadModule开头的行(在主配置文件中或在/etc/httpd/conf.modules.d中的辅助文件中)。
另一方面,Debian提供了一个名为a2dismod的工具来禁用模块,其用法如下:
# a2dismod module_name
要启用它:
# a2enmod module_name
在任何一种情况下,请记住重新启动Apache以使更改生效。
Résumé
Dans cet article, nous avons passé en revue 5 conseils qui vous aideront à régler votre serveur Web Apache et à améliorer ses performances. De plus, vous devez vous rappeler que l'optimisation et les performances sans sécurité n'ont aucun sens, vous pouvez donc vous référer à Installer mod_pagespeed pour améliorer les performances du serveur Web et à l'article sur les conseils de renforcement d'Apache de Tecmint.com.
Recommandations associées : tutoriel Apache
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!