Nginx và Apache – Đánh Giá Ưu Nhược Điểm

Hôm nay chúng ta cùng đánh giá công nghệ được sử dụng trong  các web hosting phổ biến nhất: NGINXApache, qua 6 yếu tố  chính: (hiệu suất cho các nội dung tĩnh vs động, hỗ trợ hệ điều hành, bảo mật, tính linh hoạt, tài liệu hướng dẫn và hỗ trợ). Chúng ta sẽ thấy rằng cả hai là đối thủ cạnh tranh xứng tầm với nhau nhưng tập tin htaccess của Apache làm cho nó đặc biệt hấp dẫn đối với khách hàng hosting.

Trong khi đó, NGINX chuyên hỗ trợ nội dung động, và một phần do các tính năng tiên tiến hơn của nó, được sử dụng phổ biến nhất bởi VPS và người dùng dedicated hosting. Cuối cùng, chúng ta sẽ xem các lời khuyên của chúng tôi để bạn có lựa chọn đúng đắn nhất.

Có một thời kỳ (cuối những năm 90 của thế kỷ 20 đến năm 2011) khi máy chủ web Apache phục vụ khoảng 60%  các trang web trên thế giới.

Tỷ lệ phần trăm này kể từ đó đã giảm xuống dưới 35% và vẫn đang giảm với tốc độ khá đáng kể. Trong khi đó, máy chủ web IIS của Microsoft đã phần nào giữ ổn định, tăng nhẹ thị phần của thị trường, đạt được 30% hiện nay.

Vị trí thứ ba được thuộc về một đối thủ được gọi là NGINX (phát âm “engine x”), mà hiện đang phục vụ khoảng 16% của tất cả các trang web, và tỉ lệ này đang tăng đều khoảng một phần trăm mỗi năm.

Tôi sẽ lưu ý rằng một số điều tra viên web đánh giá thị trường cổ phiếu của Apache và NGINX cao hơn nhiều, họ xem xét IIS như một đối thủ cạnh tranh yếu hơn.

Thực tế nó có thể nằm đâu đó ở giữa, nhưng xu hướng chung là rõ ràng. Chỉ xét các trang web được truy cập nhiều nhất trên web, Apache chiếm khoảng 46% thị phần, nhưng tỷ phần đó giảm khoảng 4% hàng năm.

NGINX giữ một vị trí thứ hai mạnh mẽ với 24% thị phần và đang tăng trưởng với tốc độ khoảng 3% mỗi năm. Rõ ràng NGINX đang thu hút nhiều website giá trị nhất thế giới!

Netcraft Kết quả khảo sát cho Web Server Thị phần So sánh Web Server thị trường SharesNetCraft của:

web-server-market-share-comparison Tất cả các trang web (trái) & Across Top Sites tỷ được truy cập nhiều nhất (phải)

Trong bài viết này, chúng tôi sẽ so sánh NGINX và Apache trong các lĩnh vực sau:

  • Hiệu suất
  • Hỗ trợ hệ điều hành
  • Bảo vệ
  • Tính linh hoạt
  • Tài liệu
  • Hỗ trợ người dùng

Trước tiên, hãy chắc chắn rằng tất cả chúng ta đã quen thuộc với các máy chủ web mà chúng ta đang so sánh … Hoặc bạn có thể bỏ qua để xem xét tóm tắt của chúng tôi về Apache và NGINX, trong đó bao gồm các lời khuyên hosting của chúng tôi.

Tổng quan về Apache

apache_logo

Apache là một thành phần web server của các LAMP phổ biến (Linux, Apache, MySQL, PHP). Mặc dù ngày nay có rất nhiều thành phần web stack khác (ví dụ, NodeJS, rich clients JS frameworks, dịch vụ đám mây khác nhau, vv), LAMP vẫn còn rất phổ biến.

Các máy chủ web Apache có một tập hợp phong phú các tính năng có thể được kích hoạt thông qua cài đặt một trong số khoảng 60 module chính thức hoặc một trong nhiều module không chính thức khác cũng tồn tại.

Nhiều năm qua, Apache đã phát triển một số phương pháp để xử lý các yêu cầu web để cải thiện hiệu quả của nó (chủ yếu là bộ nhớ RAM và độ trễ). Trong một thế giới mà nhiều điều xảy ra yêu cầu web đồng thời xử lý những vấn đề đó, và dung lượng của trang đã lớn hơn rất nhiều, những phương pháp mới là cần thiết.

Các phương pháp xử lý yêu cầu của Apache có thể được cấu hình theo một trong ba cách. Tôi sẽ trình bày ba Multi-Processing module (MPMs) chính dưới đây:

Process model: Đây là bản gốc của phương pháp “pre-fork”; nó cũng không vận hành tốt với nhiều kết nối đồng thời, vì nó tiêu tốn rất nhiều RAM và thậm chí có thể từ chối các kết nối ở thời điểm load cao điểm. Các trang web nhỏ hơn sẽ không nhận thấy điều này, nhưng các trang web lớn có khả năng sẽ bị như vậy.

Worker Process: Điều này tạo ra một quá trình điều khiển duy nhất có trách nhiệm triển khai các tiến trình con. Mỗi tiến trình con sau đó tạo ra một số lượng cố định các thread, cũng như một listener thread. Các listener thread cho các kết nối và chuyển chúng đến một thread để xử lý khi chúng đến nơi. Mặc dù mô hình này độ co giãn tốt hơn nhiều so với các phương pháp pre-fork, nó vẫn có thể mắc phải vấn đề scale khi trang web có lưu lượng truy cập cao.

Event model: giống với mô hình worker, nhưng nó tạo ra một listener thread mà lắng nghe cho các kết nối và chuyển chúng vào một worker thread để xử lý. MPM này xử lý các kết nối dài chạy hiệu quả hơn nhiều trên một thread duy nhất (KeepAlive xử lý). Kể từ Apache 2.4, event model đã được coi là ổn định và bây giờ cũng là thiết lập mặc định nếu hệ điều hành có thể hỗ trợ nó.

Bạn cũng có thể thử các tùy chọn compile-time and run-time options để cải thiện hiệu suất của Apache.

Đánh giá Tổng quan về NGINX

NGINX đã được tạo ra để đáp ứng với những thách thức C10K xử lý ít nhất 10.000 khách hàng kết nối đồng thời trên một máy chủ duy nhất. NGINX sử dụng một kiến trúc event-driven không đồng bộ để xử lý những số lượng kết nối khổng lồ này. Kiến trúc này làm cho việc xử lý cao và dao động tải nhiều hơn dự đoán về cách sử dụng bộ nhớ RAM, sử dụng CPU, và độ trễ.

nginx-architecture

Bản đồ của kiến trúc event-driven NGINX Event-Driven ArchitectureNGINX giúp dự đoán RAM và CPU, cũng như độ trễ, cho việc tải nhiều / dao động bất thường.

Sự khác biệt chính giữa NGINX và Apache, về các event model, là NGINX không thiết lập quy trình worker thêm cho mỗi kết nối. Trong hầu hết các trường hợp, các cấu hình NGINX đề nghị được chạy một quá trình worker cho mỗi CPU, tối đa hóa hiệu quả của phần cứng.

NGINX cũng có một bộ tính năng phong phú và có thể thực hiện vai trò máy chủ khác nhau:

  • Một máy chủ proxy ngược cho HTTP, HTTPS, SMTP, POP3, và giao thức IMAP
  • Một cân bằng tải và một bộ nhớ cache HTTP
  • Một lối vào proxy cho Apache và máy chủ web khác, kết hợp linh hoạt của Apache với hiệu năng tốt nội dung tĩnh của NGINX

NGINX hỗ trợ FastCGI và SCGI xử lý để phục vụ cho các kịch bản nội dung động như PHP và Python. Nó sử dụng các LEMP xếp chồng lên nhau: một biến thể của LAMP bằng cách sử dụng chính tả ngữ âm của NGINX (Linux, “En-juhn-ex”, MySQL, PHP).

NGINX vs Apache: So sánh Hiệu suất, hỗ trợ, bảo mật, và Documents

Bây giờ chúng ta hãy so sánh cả hai máy chủ web WordPress trong một số lĩnh vực. Chúng ta sẽ thấy rằng Apache và NGINX là đối thủ cạnh tranh xứng đáng, nhưng tùy thuộc vào trường hợp sử dụng của bạn, một máy chủ có thể phù hợp hơn cho dự án của bạn hơn cái còn lại. Đừng lo lắng, tôi sẽ tóm tắt lại trong kết luận so sánh NGINX / Apache của tôi.

Hiệu suất

Dưới đây chúng tôi sẽ tương phản hiệu suất của Apache (sử dụng các sự kiện MPM) với hiệu suất của NGINX trong cả hai vai trò nội dung phục vụ tĩnh và động.

Nội dung tĩnh

NGINX là nhanh hơn khoảng 2,5 lần so với Apache dựa trên kết quả của một thử nghiệm benchmark chạy lên đến 1.000 kết nối đồng thời. Một điểm chuẩn chạy với 512 kết nối đồng thời, cho thấy NGINX là nhanh hơn khoảng hai lần và tiêu thụ một chút ít bộ nhớ (4%).

Rõ ràng, NGINX phục vụ nội dung tĩnh nhanh hơn nhiều so với Apache. Nếu bạn cần phải phục vụ rất nhiều nội dung tĩnh ở mức cao, NGINX có thể là một công cụ trợ giúp thực sự.

Nội dung động

Một nội dung động năm 2015 điểm chuẩn so sánh phục vụ bởi Apache và NGINX cho thấy rằng Apache event MPM, khi ghép nối với các module PHP-FPM, có thể xử lý về đồng thời giống như có thể NGINX với PHP.

Một máy chủ web so sánh hiệu năng cho thấy kết quả tương tự. Lý do cho điều này là gần như tất cả các thời gian yêu cầu xử lý là chi tiêu trong môi trường PHP chạy chứ không phải là một phần cốt lõi của máy chủ web. Các môi trường PHP thời gian chạy là khá giống nhau giữa cả hai máy chủ web.

apache-vs-nginx-dynamic-content-benchmark

Nội dung chuẩn động Speedemy của – Apache vs điểm chuẩn máy chủ web NGINXSpeedemy của kết quả tìm thấy tương tự như sử dụng cả Apache và NGINX để phục vụ nội dung động.Xét về PHP (và các ngôn ngữ khác), hiệu suất máy chủ trang động là thực tế tương đương với một thiết lập Apache module thích hợp (PHP-FPM + FastCGI). Nếu bạn thực sự muốn tăng tốc độ trang động, bạn có một vài lựa chọn: thêm một Varnish hoặc lớp Memcached caching, chuyển sang một thời gian chạy PHP nhanh hơn (ví dụ, HHVM), làm cân bằng tải, hoặc thêm nhiều phần cứng hơn.

Thật không may, trang của NGINX không dịch để phục vụ các trang động. Cả hai máy chủ web đều ghi điểm bằng nhau về điểm này.

Hỗ trợ Hệ điều hành

Apache chạy trên tất cả các loại hệ thống Unix-like (ví dụ, Linux hoặc BSD) và hỗ trợ đầy đủ cho Microsoft Windows. NGINX cũng chạy trên một số hệ thống Unix hiện đại và có một số hỗ trợ cho Windows, nhưng hiệu suất Windows của nó không tăng mạnh như các nền tảng khác.

Về điểm nay, Apache mạnh hơn một chút.

Bảo vệ

Cả hai dự án này có một hồ sơ theo dõi an ninh tuyệt vời cho cơ sở mã C-based. Các cơ sở mã NGINX, tuy nhiên, là nhỏ hơn đáng kể của một số thứ tự của các cường độ, do đó chắc chắn là một điểm cộng lớn từ góc độ an ninh.

Có báo cáo lỗ hổng có sẵn cho Apache 2.2 và 2.4. NGINX cũng có một danh sách các khuyến cáo an ninh gần đây. Apache cung cấp lời khuyên cấu hình để xử lý cuộc tấn công DDoS, cũng như các mod_evasive để ứng phó với HTTP DoS, DDoS, hoặc các cuộc tấn công bạo lực. Bạn cũng có thể tìm thấy tài nguyên hữu ích để đối phó với các mối đe dọa DDoS trên blog NGINX.

Tính dễ tương thích

Tùy chỉnh đến máy chủ web có thể được thực hiện thông qua văn bản mô-đun. Apache đã được tải mô-đun động cho thời gian dài nhất, vì vậy tất cả các module Apache đều hỗ trợ điều này.

Đây là, tuy nhiên, không phải là trường hợp của NGINX. Vào đầu năm 2016, NGINX đã hỗ trợ cho các mô-đun nạp động; trước đây, NGINX cần các admin để biên dịch các module vào nhị phân NGINX. Hầu hết các module chưa hỗ trợ nạp động, nhưng theo thời gian họ có lẽ sẽ có.

Apache rõ ràng dẫn đầu ở điểm này.

Dynamic Module Loading & Modules

Cả Apache và NGINX có một bộ các module tính năng cụ thể lớn và ngày càng gia tăng.

Apache module:

  • Modules chính thức (bạn có thể tìm thấy trong phần module của tài liệu Apache)
  • Danh sách mô-đun trên Wikipedia

Thật không may, một danh sách duy trì tốt của tất cả các module bên thứ ba dường như không tồn tại.

apache-nginx

So sánh NGINX và ApacheNGINX và Apache cả hai đều có bộ tính năng phong phú và ngày càng mở rộng, nhưng các trường hợp sử dụng tốt nhất thay đổi khác nhau với mỗi máy chủ web.

module NGINX:

  • Modules chính thức (được tìm thấy trong các phần Modules tham khảo các tài liệu NGINX)
  • Bên thứ ba Modules

Thật không dễ dàng để đánh giá rằng Apache hay NGINX có lợi thế rõ ràng ở đây, nhưng hầu hết các lõi cần thiết chức năng module (ví dụ, proxy-ing, caching, cân bằng tải, vv) có sẵn cho cả hai máy chủ web. NGINX trông mạnh mẽ hơn trong các lĩnh vực hoạt động như một proxy ngược cho TCP và các kết nối email (SMTP, IMAP, POP3). Trong lĩnh vực truyền thông trực tuyến module, phiên bản thương mại NGINX Plus cũng trông mạnh mẽ hơn.

Apache .htaccess

NGINX không hỗ trợ cái gì đó như tập tin .htaccess của Apache.

Sử dụng tập tin .htaccess, người ta có thể ghi đè lên các thiết lập toàn hệ thống trên một cơ sở cho mỗi thư mục; Tuy nhiên, cho hiệu suất tối ưu, các chỉ thị .htaccess nên được bao gồm trong (các) tập tin cấu hình chính bất cứ khi nào có thể. Điều này là không thể trong trường hợp của các môi trường lưu trữ chia sẻ, nhưng nó có thể thêm rất nhiều tính linh hoạt cho người sử dụng lưu trữ chia sẻ.

Tài liệu

Các tài liệu cho cả Apache và NGINX đều tuyệt vời, bao gồm wiki NGINX. NGINX cũng cung cấp các khóa đào tạo trực tuyến và trên vị trí trên một loạt các chủ đề NGINX – bao gồm cả các chứng chỉ.

Hỗ trợ

Hỗ trợ cộng đồng của Apache được thực hiện thông qua danh sách gửi thư, IRC, và Stack Overflow. Hỗ trợ thương mại Apache có sẵn từ một số công ty bên thứ ba, chẳng hạn như OpenLogic, nhưng không có danh sách chính thức được duy trì bởi Apache Foundation.

NGINX đã hỗ trợ cộng đồng thông qua danh sách gửi thư, IRC, Stack Overflow, và diễn đàn. Công ty đằng sau NGINX cung cấp một sản phẩm thương mại được gọi là NGINX Plus, trong đó có hỗ trợ một loạt các tính năng bổ sung liên quan đến cân bằng tải, phương tiện truyền thông và giám sát.

Đánh giá Apache vs NGINX

Cả hai máy chủ web, xét đến phiên bản mới nhất của chúng, đều có thể cạnh tranh với nhau trong hầu hết các tiêu chí. Đối với nội dung tĩnh NGINX là vua, nhưng đối với nội dung động sự khác biệt hiệu là khá yếu thế. NGINX không tỏa sáng với một số tính năng cao cấp hơn của nó (phương tiện truyền thông, đảo ngược proxy cho các giao thức không HTTP), cũng như hỗ trợ thương mại và đào tạo.

Người dùng shared hositng có thể thích sự tiện lợi của tập tin .htaccess Apache và Apache hỗ trợ tốt hơn tải module động khác nhau, một tính năng mà NGINX chỉ thêm gần đây. NGINX được sử dụng chủ yếu cho VPS hosting, dedicated hosting, hoặc container cluster.

Các chủ sở hữu trang web có lượt truy cập cao có nhu cầu phục vụ rất nhiều nội dung tĩnh và / hoặc các dòng phương tiện truyền thông có thể sẽ thích NGINX (hoặc sử dụng một sự kết hợp của Apache và NGINX). Trong hầu hết các trường hợp sử dụng trang web khác, máy chủ web sẽ làm công việc tốt. Để bắt đầu với một trong hai máy chủ web, bạn sẽ cần một nhà cung cấp hosting tốt nhất trên nền tảng Linux. May mắn thay, đội ngũ của chúng tôi so với các nhà cung cấp tốt nhất và có thể chỉ cho bạn đi đúng hướng cho Linux hosting cho các shared server hay server ảo.

Vậy là bạn đã đọc xong bài so sánh. Nếu bạn vẫn còn thắc mắc trước khi bạn chọn NGINX hay Apache cho dự án web tiếp theo của bạn, hãy cho chúng tôi biết dưới đây!

Về tác giả

Duy Anh

Chào các bạn,

Mình là coder, đang sống và làm việc ở Mỹ. Mình thích viết lách nên muốn dành khoảng thời gian trống để chia sẻ các thủ thuật giúp các bạn xây dựng được trang web riêng của mình. Bạn nào cần xây dựng blog, web thì cứ ới, rảnh là mình giúp, tất cả FREE nhé!

2 Bình luận

    • Theo mình thì bạn nên dùng Nginx thay vì Apache. Về bảo mật thì bạn hoàn toàn yên tâm nhé. htaccess rất có lợi nhưng nó cũng làm chậm hệ thống khi truy cập vì mỗi lần như vậy, Apache sẽ phải kiểm tra lại file htaccess để kiểm tra quyền truy cập. Còn với nginx thì bạn có thể chỉnh sửa quyền trong file .conf và nginx sẽ đọc file này một lần duy nhất, mọi chỉnh sửa trong file này bạn cần phải khởi động lại nginx mới có tác dụng

Ý kiến cá nhân của bạn

bộ công cụ Wordpress hữu ích dành cho mọi website

Bộ công cụ hữu ích dành cho mọi website Wordpress

Bao gồm theme & plugin tốt nhất và được sử dụng nhiều nhất!

Xin vui lòng kiểm tra email để xác thực tài khoản!