Maison >Opération et maintenance >Nginx >Quel moteur est le meilleur, Apache HTTP ou Nginx ?
Lorsque nous entrons un lien web dans le navigateur, le navigateur envoie une requête au serveur correspondant en fonction du protocole de transport HTTP(s)
Après recevant la requête correspondante, le serveur la traite et renvoie les informations correspondantes au navigateur. Le navigateur analyse ensuite le contenu en http
et l'affiche sous la forme d'une page web. HTTP(s)
传输协议向相应的服务器发送一个请求,服务器收到相应的请求后经过处理,返回相应的信息给浏览器,然后由浏览器解析http
中的内容,以网页的形式表现出来。
服务器负责接收请求,并在处理之后返回相应的数据,而其中又可以细分为处理http
连接的服务部分和执行服务内容的应用部分(WordPress
使用PHP
生成需要的页面,就属于应用部分)
而不论应用部分执行的是何种应用,处理http
连接的部分几乎是相同的,所以出现了专门处理http
连接的中间件,目前最常见的是Apache
和Nginx
。
正式名称是“Apache HTTP Server
”,是一款开源的HTTP
服务器中间件,诞生于1995年,曾经是HTTP
服务领域的龙头老大,拥有大量的用户和丰富的社区资源。Apache
的一大优点就是方便与Wordpress
等CMS软件进行集成,只需要简单的设定就能搭建一个基于CMS的网站。
内部构造方面,Apache
采用多进程的方式,每有一个连接就会为这个连接开辟一个进程,专门用于处理这个连接上的请求,直到连接结束。这样做的好处是:
来自不同客户端的连接会立刻得到相应且互不干扰,而且不会因为某一个服务占用了较长的时间而使其它的连接得不到响应。
但是缺点也是显而易见的:
当同时访问数比较多的时候,Apache
会建立大量的进程,占用过多的内存资源。
大量线程间的调度也会造成CPU处理能力的大量浪费。
由此产生了被称为C10K
的难题,C即客户端(Client),10K是指1万,即不论服务器的性能和网络带宽有多高,Apache
都难以同时处理1万个以上的连接。
读作Engine-X
,和Apache
一样也是用于HTTP
服务的开源中间件,诞生于2004年。Nginx
比Apache
的历史要短,但是正因为是后来者,Nginx
吸取了Apache
的教训,在设计初期就考虑到了处理大量连接时的效率问题,解决了诸如C10K
等随着互联网规模壮大而产生的难题。
Nginx
采用了非阻塞IO
和异步消息驱动的方式,即在称作worker
的线程中使用循环来处理队列中的连接请求。而根据硬件的情况,可以设定多个worker
线程,充分利用CPU
的核心资源。
解决了处理大量连接时消耗内存过多,调度效率低下的问题,同时还能充分的利用所有的CPU核心。在相同硬件下处理并发连接的能力是Apache
的10到100倍。
但是Nginx
这种方式也不是没有缺点。
当服务器单核性能较差时,基于CMS的动态网站可能需要较长的时间来执行一个请求,此时来自其他客户端的请求将无法立即被执行。当CPU
核心数较少,worker
线程不足时会更加明显。
好在现在服务器的性能越来越强,在AMD
的带领下CPU
核心数也越来越多,Nginx
的缺点足以被弥补,而高效的优势也愈发显现出来。
Apache Nginx
处理能力有限10-100倍是否会被复杂任务阻塞否有可能会设定难度比较简单相对复杂社区资源丰富相对较少
近年来,Nginx
的市场占有率不断提高,2019年已经达到了和Apache
持平的水平。而对于有极大访问量的大型网站,可以看到访问量越大,Nginx
的占比也就越高。这也从侧面印证了Nginx
在处理大量访问时的优越性能。
Nginx
除了可以作为HTTP服务器使用,其强大的反向代理功能还被广泛地用作负载均衡前端服务器,逐渐取代了基于硬件的负载均衡器。
在Nginx
中可以配置若干个后端服务器,Nginx
在收到HTTP
http
et la partie application qui exécute le contenu du service ( WordPress
utilise PHP
pour générer les pages requises, qui appartiennent à la partie application) #🎜🎜##🎜🎜# Quel que soit le type d'application exécutée par la partie application, le traitement Les parties de la connexion http
sont presque les mêmes, c'est pourquoi un middleware est apparu qui gère spécifiquement la connexion http
. Actuellement, les plus courants sont Apache et <code>Nginx. #🎜🎜##🎜🎜#Apache#🎜🎜##🎜🎜#Le nom officiel est "<code>Apache HTTP Server
", qui est un middleware de serveur HTTP
open source. Née en 1995, elle était autrefois leader dans le domaine des services HTTP
, avec un grand nombre d'utilisateurs et de riches ressources communautaires. L'un des avantages de Apache
est qu'il est facile à intégrer à un logiciel CMS tel que Wordpress
. Vous pouvez créer un site Web basé sur un CMS avec uniquement des paramètres simples. #🎜🎜##🎜🎜#Le modèle de traitement interne d'Apache#🎜🎜##🎜🎜#En termes de structure interne, Apache
adopte une approche multi-processus. Chaque fois qu'il y a une connexion, une nouvelle. une connexion sera ouverte pour cette connexion. Processus dédié au traitement des requêtes sur cette connexion jusqu'à la fin de la connexion. L'avantage de ceci est : #🎜🎜#Apache
va créer un grand nombre de processus, occupant trop de ressources mémoire. #🎜🎜#C10K
C est le client (Client), et 10K fait référence à 10 000, c'est-à-dire, peu importe. Quelles que soient les performances du serveur et la bande passante du réseau, il est difficile pour Apache
de gérer plus de 10 000 connexions en même temps. #🎜🎜##🎜🎜#Nginx#🎜🎜##🎜🎜# se prononce comme Engine-X
, et comme Apache
, il est également utilisé pour HTTP
Middleware open source pour services, né en 2004. Nginx
a une histoire plus courte que Apache
, mais précisément parce qu'il est un retardataire, Nginx
a retenu les leçons de Apache
>. Dès les premières étapes de la conception, les problèmes d'efficacité liés à la gestion d'un grand nombre de connexions ont été pris en compte, résolvant des problèmes tels que C10K
qui sont apparus à mesure que l'échelle d'Internet s'est développée. #🎜🎜##🎜🎜#Le modèle de traitement interne de Nginx#🎜🎜##🎜🎜#Nginx
adopte des E/S non bloquantes
et des méthodes asynchrones basées sur les messages, c'est-à-dire in Une boucle est utilisée dans un thread appelé worker
pour gérer les demandes de connexion en file d'attente. Selon les conditions matérielles, plusieurs threads worker
peuvent être définis pour utiliser pleinement les ressources de base du CPU
. #🎜🎜#Apache
. #🎜🎜#Nginx
cette méthode n'est pas sans défauts. #🎜🎜#CPU
est petit et qu'il n'y a pas suffisamment de threads worker
. #🎜🎜#AMD
, le nombre de CPUcode> a également augmenté. De plus en plus, les défauts de <code>Nginx
suffisent à être compensés, et les avantages d'une haute efficacité deviennent de plus en plus évidents. #🎜🎜##🎜🎜#Comparaison complète#🎜🎜##🎜🎜#Apache Nginx
a une puissance de traitement limitée de 10 à 100 fois. Sera-t-il bloqué par des tâches complexes ? le niveau de difficulté ? C'est relativement simple. Il existe relativement peu de ressources communautaires complexes#🎜🎜##🎜🎜#Ces dernières années, la part de marché de Nginx
a augmenté, et en 2019 elle a atteint le même niveau que Apache
. Pour les grands sites Web avec un grand nombre de visites, vous pouvez constater que plus le nombre de visites est élevé, plus la proportion de Nginx
est élevée. Cela confirme également de côté les performances supérieures de Nginx
dans la gestion d'un grand nombre d'accès. #🎜🎜##🎜🎜#Load Balancing#🎜🎜##🎜🎜#Nginx
En plus d'être utilisé comme serveur HTTP, sa puissante fonction de proxy inverse est également largement utilisée comme façade d'équilibrage de charge -serveur final, remplaçant progressivement les équilibreurs de charge matériels. #🎜🎜##🎜🎜# Plusieurs serveurs backend peuvent être configurés dans Nginx
Nginx
suivra certaines règles après avoir reçu la requête HTTP
(. Polling, hachage IP, randomisation des priorités), etc. transmettent la demande au serveur back-end pour obtenir une répartition moyenne ou pondérée de la charge sur plusieurs serveurs. #🎜🎜#En même temps, en tant que front-end d'équilibrage de charge, il peut également mettre en cache les données renvoyées par le back-end pour soulager la pression sur le serveur back-end. Le front-end utilise Nginx
pour l'équilibrage de charge afin de limiter le nombre de connexions à chaque serveur, et il n'est pas rare que le serveur back-end exécute Apache
. Nginx
做负载均衡限制每个服务器的连接数,后端服务器运行Apache
的模式也并不少见。
硬件负载均衡器的业界大佬F5 networks
在2019年收购了Nginx
,推出了包含收费服务的负载均衡解决方案Nginx+
Réseaux F5
a acquis Nginx
en 2019 et a lancé une solution d'équilibrage de charge Nginx+
qui inclut des services payants >. 🎜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!