>운영 및 유지보수 >엔진스 >Apache HTTP 또는 Nginx 중 어떤 엔진이 더 좋습니까?

Apache HTTP 또는 Nginx 중 어떤 엔진이 더 좋습니까?

王林
王林앞으로
2023-05-11 15:49:06922검색

HTTP 미들웨어

브라우저에 웹 링크를 입력하면 브라우저는 HTTP(s) 전송 프로토콜을 기반으로 해당 서버에 요청을 보냅니다. 서버는 해당 요청을 수신하고 프로세스를 전달합니다. , 해당 정보를 브라우저에 반환하면 브라우저는 http의 내용을 구문 분석하여 웹 페이지 형식으로 표시합니다. HTTP(s)传输协议向相应的服务器发送一个请求,服务器收到相应的请求后经过处理,返回相应的信息给浏览器,然后由浏览器解析http中的内容,以网页的形式表现出来。

服务器负责接收请求,并在处理之后返回相应的数据,而其中又可以细分为处理http连接的服务部分和执行服务内容的应用部分(WordPress使用PHP生成需要的页面,就属于应用部分)

而不论应用部分执行的是何种应用,处理http连接的部分几乎是相同的,所以出现了专门处理http连接的中间件,目前最常见的是ApacheNginx

Apache

正式名称是“Apache HTTP Server”,是一款开源的HTTP服务器中间件,诞生于1995年,曾经是HTTP服务领域的龙头老大,拥有大量的用户和丰富的社区资源。Apache的一大优点就是方便与Wordpress等CMS软件进行集成,只需要简单的设定就能搭建一个基于CMS的网站。

Apache的内部处理模型

内部构造方面,Apache采用多进程的方式,每有一个连接就会为这个连接开辟一个进程,专门用于处理这个连接上的请求,直到连接结束。这样做的好处是:

  • 来自不同客户端的连接会立刻得到相应且互不干扰,而且不会因为某一个服务占用了较长的时间而使其它的连接得不到响应。

但是缺点也是显而易见的:

  • 当同时访问数比较多的时候,Apache会建立大量的进程,占用过多的内存资源。

  • 大量线程间的调度也会造成CPU处理能力的大量浪费。

由此产生了被称为C10K的难题,C即客户端(Client),10K是指1万,即不论服务器的性能和网络带宽有多高,Apache都难以同时处理1万个以上的连接。

Nginx

读作Engine-X,和Apache一样也是用于HTTP服务的开源中间件,诞生于2004年。NginxApache的历史要短,但是正因为是后来者,Nginx吸取了Apache的教训,在设计初期就考虑到了处理大量连接时的效率问题,解决了诸如C10K等随着互联网规模壮大而产生的难题。

Nginx的内部处理模型

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 연결을 처리하는 서비스 부분과 서비스 콘텐츠를 실행하는 애플리케이션 부분(WordPress code><code>PHP를 사용하여 애플리케이션 부분에 속하는 필수 페이지를 생성합니다)🎜🎜어플리케이션 부분이 어떤 종류의 애플리케이션을 실행하든 http를 처리하는 부분은 연결은 거의 동일하므로 http 연결을 특별히 처리하는 미들웨어가 등장했으며 현재 가장 일반적인 것은 ApacheNginx입니다. 🎜🎜Apache🎜🎜공식 명칭은 "Apache HTTP Server"이며, 1995년에 탄생하여 예전에는 였던 오픈소스 <code>HTTP 서버 미들웨어입니다. HTTP많은 사용자와 풍부한 커뮤니티 자원을 보유한 서비스 분야의 선두주자입니다. Apache의 장점 중 하나는 Wordpress와 같은 CMS 소프트웨어와 쉽게 통합할 수 있다는 점입니다. 간단한 설정만으로 CMS 기반 웹사이트를 구축할 수 있습니다. 🎜🎜Apache의 내부 처리 모델🎜🎜내부 구조 측면에서 Apache는 연결이 있을 때마다 이 연결을 위해 특히 요청을 처리하는 데 사용되는 다중 프로세스 접근 방식을 채택합니다. 이 연결이 끝날 때까지. 이것의 장점은 다음과 같습니다: 🎜
  • 🎜다른 클라이언트의 연결은 서로 방해하지 않고 즉시 응답하며 특정 서비스는 시간이 오래 걸리지 않습니다. 다른 연결이 응답하지 않게 됩니다. 🎜
🎜하지만 단점도 분명합니다: 🎜
  • 🎜동시 접속자가 많은 경우 Apache A 많은 수의 프로세스가 생성되어 과도한 메모리 리소스를 차지하게 됩니다. 🎜
  • 🎜많은 수의 스레드 사이에 스케줄을 지정하면 CPU 처리 능력이 많이 낭비됩니다. 🎜
🎜이로 인해 C10K라는 문제가 발생했습니다. C는 클라이언트를 의미하고 10K는 서버 성능 및 네트워크 대역폭에 관계없이 10,000을 나타냅니다. 아무리 높아도 Apache가 동시에 10,000개 이상의 연결을 처리하기는 어렵습니다. 🎜🎜Nginx🎜🎜는 Engine-X로 발음됩니다. Apache와 마찬가지로 HTTP 서비스를 위한 오픈 소스 미들웨어였습니다. 2004년생. NginxApache에 비해 역사는 짧지만 후발주자이기 때문에 NginxApache의 교훈을 얻었습니다. > 설계 초기에는 많은 수의 연결을 처리하는 데 따른 효율성 문제를 고려하여 인터넷 규모가 커지면서 발생하는 C10K 등의 문제를 해결했습니다. 🎜🎜Nginx의 내부 처리 모델🎜🎜Nginxnon-blocking IO와 비동기식 메시지 기반 메서드, 즉 worker라는 스레드를 채택합니다. 루프는 대기열의 연결 요청을 처리하는 데 사용됩니다. 하드웨어 조건에 따라 여러 개의 worker 스레드를 설정하여 CPU의 핵심 리소스를 최대한 활용할 수 있습니다. 🎜
  • 🎜 많은 수의 연결을 처리할 때 과도한 메모리 소비와 낮은 스케줄링 효율성 문제를 해결하는 동시에 모든 CPU 코어를 최대한 활용합니다. 동일한 하드웨어에서 동시 연결을 처리하는 능력은 Apache의 10~100배입니다. 🎜
🎜그러나 Nginx 이 방법에도 단점이 없는 것은 아닙니다. 🎜
  • 🎜서버의 싱글 코어 성능이 좋지 않을 경우 CMS 기반의 동적 웹사이트에서는 요청을 실행하는 데 오랜 시간이 걸릴 수 있습니다. 다른 클라이언트에서는 즉시 실행할 수 없습니다. 이는 CPU 코어 수가 적고 worker 스레드가 부족한 경우 더욱 분명해집니다. 🎜
🎜다행히 서버의 성능은 점점 더 강해지고 있으며, AMD 주도 하에 CPU 코어 수는 또한 증가하고 있으며, Nginx는 충분히 보완될 만큼 효율성이 높다는 장점이 점점 더 뚜렷해지고 있습니다. 🎜🎜종합 비교🎜🎜Apache Nginx는 처리 능력이 10~100배로 제한되어 있습니다. 복잡한 작업에 의해 차단될까요? 난이도를 상대적으로 단순하게 설정할 수 있나요? 🎜🎜최근 몇 년 동안 Nginx의 시장 점유율이 계속 증가하여 2019년에는 Apache와 같은 수준에 도달했습니다. 방문수가 많은 대규모 웹사이트의 경우 방문수가 많을수록 Nginx의 비중이 높아지는 것을 확인할 수 있습니다. 이는 또한 많은 수의 액세스를 처리하는 데 있어 Nginx의 탁월한 성능을 측면에서도 확인시켜 줍니다. 🎜🎜로드 밸런싱🎜🎜강력한 역방향 프록시 기능은 HTTP 서버로 사용되는 것 외에도 로드 밸런싱 프런트 엔드 서버로도 널리 사용되며 점차 하드웨어 기반 로드 밸런서를 대체합니다. 🎜🎜 Nginx에서 여러 백엔드 서버를 구성할 수 있습니다. HTTP 요청을 받은 후 Nginx는 특정 규칙(폴링, IP)을 따릅니다. 임의 우선순위) 등은 요청을 백엔드 서버로 전달하여 여러 서버에서 평균 또는 가중 부하 분산을 달성합니다. 🎜

동시에 로드 밸런싱 프런트엔드로서 백엔드에서 반환된 데이터를 캐시하여 백엔드 서버에 대한 부담을 완화할 수도 있습니다. 프런트엔드는 로드 밸런싱을 위해 Nginx를 사용하여 각 서버에 대한 연결 수를 제한하며, 백엔드 서버가 Apache를 실행하는 것은 드문 일이 아닙니다. Nginx做负载均衡限制每个服务器的连接数,后端服务器运行Apache的模式也并不少见。

硬件负载均衡器的业界大佬F5 networks在2019年收购了Nginx,推出了包含收费服务的负载均衡解决方案Nginx+

하드웨어 로드 밸런서 분야의 업계 리더인 F5 Networks는 2019년에 Nginx를 인수하고 유료 서비스가 포함된 로드 밸런싱 솔루션 Nginx+를 출시했습니다.> 🎜

위 내용은 Apache HTTP 또는 Nginx 중 어떤 엔진이 더 좋습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제