NGINX và Apache – Đâu là Web Server tốt nhất ? (Ưu Nhược Điểm)

Hôm nay chúng ta cùng đánh giá công nghệ, được sử dụng hầu hết trên các web hosting hiện nay là: 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
  • 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 Apache với file .htaccess, làm cho nó trở nên đặc biệt hấp dẫn hơn với người dùng.

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ó.

NGINX được sử dụng rất phổ biến nhất trên VPS và Dedicated Hosting.

Cuối cùng, chúng ta sẽ hãy xem NGINX và Apache đâu là web server tốt nhất?

Nhưng trước hết tôi muốn giới thiệu qua cho các bạn về web server là gì?

Apache-va-Nginx

Web Server là gì?

Web server hay còn được gọi là máy chủ web, nó là một chương trình sử dụng giao thức HTTP (Hypertext Transfer Protocol), để cung cấp các file để tạo thành các trang của website cho người dùng, đáp ứng nhu cầu của họ (request), cuối cùng được phân phát tới thiết bị của user.

cach-web-server-hoat-dong

Tóm lại bạn có thể hiểu web server là máy chủ, nơi lưu các file của một website như (HTML, CSS, JavaScript, Ảnh). Sau đó cung cấp chúng cho người dùng, thông qua mạng internet.

Thị phần của Apache và NGINX

Có một thời kỳ (cuối những năm 90 của thế kỷ 20 đến năm 2011) khi web server Apache chiếm 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 web server 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 chiếm khoảng 16% của tất cả các website.

Và tỉ lệ này đang tăng đều khoảng một phần trăm mỗi năm.

Mình có để ý 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 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!

Kết quả khảo sát thị phần Web Server của SharesNetCraft:

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 với các yếu tố 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

Apache là gì ?

apache_logo

Apache là một web server rất phổ biến đến tận ngày nay. Được duy trì và phát triển bởi Apache Software Foundation.

Nó là một free open source, được sử dụng trên rất nhiều website nổi tiếng như: IBM, Adobe, VMware, LinkedIn, Facebook, AT&T, Siemens, eBay.. (nguồn).

Nếu bạn đã từng nghe nói đến LAMP (Linux, Apache, MySQL, PHP).

Một trong những web stack ( nền tàng web) phổ biến nhất hiện nay và Apache chính là một trong số đó.

Mặc dù ngày nay còn rất nhiền tảng web khác như (NodeJS, rich clients JS frameworks, various cloud services…)

Nhưng Apache vẫn rất được yêu thích và tin dùng.

Web server 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 khoảng 60 module chính thức (có nhiều cái không được phát hành chính thức).

Nhiều năm qua, Apache đã phát triển một số phương pháp để cái thiện hiệu năng (chủ yếu là bộ nhớ RAM và độ trễ).

Ngày nay dung lượng website ngày càng lớn và cần có những phương pháp mới.

Cách hoạt động của Apache

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 3 cách.

Tôi sẽ trình bày 3 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.

NGINX là gì ?

Nginx cũng là một open source web server được viết bởi Igor Sysoev, một kỹ sư người Nga.

Dự án này được bắt đầu từ năm 2002, và được hoàn thành và công bố vào năm 2004.

Kể từ đó NGINX đã trở thành một tiêu chuẩn phổ biến cho các trang web có performace cao, và khả năng mở rộng.

Hàng chục triệu trang web ngày nay sử dụng NGINX, bao gồm top 100.000 trang web lớn nhất thế giới.

Gồm các công ty như: Airbnb, Box, Dropbox, Netflix, Tumblr, WordPress.com…

Do nó được sinh ra để là tối ưu hóa hiệu suất theo quy mô lớn.

Nginx thường vượt trội so với các web server phổ biến khác trong các thử nghiệm.

Đặc biệt là trong các tình huống có nội dung tĩnh và / hoặc nhiều request cùng lúc.

NGINX hoạt động như thế nào?

NGINX đã được tạo ra để đáp ứng với 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.

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.

Với kiến trúc này làm cho mang đến khả năng chịu tải cao hơn, tận dụng dự đoán về cách sử dụng bộ nhớ RAM, sử dụng CPU, và độ trễ để đạt hiệu quả cao hơn.

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 worker process 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 worker process 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ú như:

  • Reverse proxy with caching
  • IPv6
  • Load balancing
  • FastCGI support with caching
  • WebSockets
  • Handling of static files, index files, and auto-indexing
  • TLS/SSL with SNI

NGINX hỗ trợ FastCGI và SCGI xử lý để phục vụ các nội dung động như PHP và Python.

Nó sử dụng các LEMP web stack (nền tảng web): một biến thể của LAMP (Linux, “En-juhn-ex”, MySQL, PHP).

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

Bây giờ chúng ta hãy so sánh cả hai web server 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 từng trường hợp

Mỗi web server 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.

Hiệu suất

Trong so sánh này, hãy xem 2 web server này cung cấp nội dung tĩnh và động cái nào nhanh hơn.

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 bechmark khác 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ụ ít bộ nhớ một chút (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 thử nghiệm năm 2015 so sánh các nội dung động được phân phối 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ý đồng thời giống như NGINX với PHP.

Về mặt hiệu năng cho thấy kết quả tương tự, không có khác biệt.

Lý do cho điều này là toàn bộ thời gian xử lý yêu cầu được sử dụng trong môi trường PHP, chứ không phải là một phần lõi của máy chủ web.

Thời gian chay trong các môi trường PHP, là khá giống nhau giữa cả hai máy chủ web.

apache-vs-nginx-dynamic-content-benchmark

Điểm benchmark trên Speedemy web server có kết quả, 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 lớp bộ nhớ đệm Varnish hoặc Memcached caching.

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 (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 mật

Cả Apache và NGINX đều có thành tích tuyệt về bảo mật về bộ mã nguồn của mình.

Mã nguồn của NGINX khá nhỏ gọn, do đó chắc chắn là một điểm cộng lớn từ góc độ an ninh.

Apache từng được báo cáo là có cách lỗ hổng bảo mật từ version 2.2 và 2.4.

NGINX cũng có một danh sách các tư vấn về vấn đề bảo mật 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 brute force attacks.

Bạn cũng có thể tìm thấy các chủ đề để đối phó với các mối đe dọa DDoS trên blog NGINX.

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

Các web server có thể tùy biến thêm bằng cách viết các module.

Apache đã cung cấp các dynamic module từ lâu, vì vậy tất cả các module Apache đều hỗ trợ điều này.

Tuy nhiên,với NGINX thì lại là một vấn đề khác. Đầu năm 2016 NGINX mới hỗ trợ cho các dynamic module.

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ó khá nhiều các module với nhiều tính năng:

Apache module:

Thật không may, các module bên thứ ba dường như không được update và kiểm tra.

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.

Không có cái nào tốt hơn, mà chỉ là cái này phù hợp với bạn hơn.

module NGINX:

Đánh giá qua thấy rằng Apache hay NGINX, đều khá tương đông về các tính năng mở rộng.

Hầu hết các module cần thiết như ( proxy, caching, cân bằng tải…) đều có cả trên cả 2 webserver.

NGINX tốt hơn khi hoạt động như một reverse proxy cho TCP và các kết nối TCP và email (SMTP, IMAP, POP3).

Đối với các media streaming module, phiên bản NGINX có vẻ đang hoạt động tốt hơn.

Apache .htaccess:

NGINX không có file .htaccess giống như Apache.

Với file .htaccess, cho phép bạn ghi đè lên các thiết lập toàn hệ thống trên cho mỗi thư mục;

Tuy nhiên, cho hiệu suất tối ưu, các lệnh trên .htaccess nên được đưa vào file các tệp cấu hình chính.

Điều này là không thể đổi với shared hosting.

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, họ thậm chí còn cung cấp cả chứng chỉ.

Hỗ trợ

Apache cung cấp các phương thức hộ trợ như email, IRC, Stack Overflow.

Có các dịch vụ hỗ trợ trả phí của bên thứ 3 như: OpenLogic, nhưng không có dịch vụ chỉnh thức từ Apache Foundation.

NGINX cũng tương tự Apache về các phương thức hỗ trợ.

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.

Với một loạt các tính năng bổ sung: load-balancing, media streaming, và monitoring.

Đánh giá Apache vs NGINX, webserver nào tốt hơn

Cả hai webserver hiện nay, đề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 nó kém hơn một chút.

NGINX nổi bật với một số tính năng cao cấp của nó (media streaming, reverse proxying for non-HTTP protocols)

Người dùng shared hositng có thể thích sự tiện lợi của file .htaccess Apache.

Và Apache có khá nhiều dynamic module (NGINX mới chỉ bắt đầu thêm dynamic module)

NGINX được sử dụng chủ yếu cho VPS hosting, dedicated hosting, hoặc container cluster.

Với các website 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 streaming media sẽ hướng tới NGINX.

Nhưng đa phần cả 2 sẽ hoạt động tốt trong hầu hết mọi trường hợp

Bất kể với web server nào, hãy chọn một nhà cung cấp hosting tốt nhất trên nền tảng Linux.

Với VPS tôi khuyên bạn nên dùng Vultr, còn với Shared hosting Bluehost, HawkHost đều đáng sử dụng.

Về tác giả

Diều Hâu

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. Nếu bạn có bất kỳ câu hỏi nào, hãy comment ở dưới nhé, mình sẽ trả lời hết tất cả.

2
Trả Lời

avatar
 
smilegrinwinkmrgreenneutraltwistedarrowshockunamusedcooleviloopsrazzrollcryeeklolmadsadexclamationquestionideahmmbegwhewchucklesillyenvyshutmouth
1 Chủ đề bình luận
1 Trả lời chủ đề
0 Người theo dõi
 
Phản ứng nhiều nhất
Bình luận nóng nhất
2 Tác giả
Diều HâuVan Nguyen Tác giả bình luận gần đây

  Đăng ký  
mới nhất cũ nhất bình chọn nhiều nhất
Thông báo về
Van Nguyen
Đọc giả

Vậy có nghĩa là nên xài nginx phải ko bạn, tính bảo mật ra sao khi ko xài htaccess

Pin It on Pinterest

Share This

Share this post with your friends!