Phân biệt nginx và apache

Nginx và Apache đang là hai Web Server phổ biến nhất hiện nay. Thị trường máy chủ web đang thay đổi từng ngày, Apache đang dần bị thu hẹp, còn Nginx không chỉ bắt kịp với Apache, mà hiện còn là lựa chọn của nhiều trang web lưu lượng truy cập cao. Vậy apache phải chăng đã lỗi thời? Để hiểu rõ hơn về vấn đề này các bạn hãy tham khảo bài viết của mình dưới đây nhé.

I.Tìm hiểu Web Server?

1. Web Server là gì?

- Web Server là máy chủ web, là một dạng máy chủ trên Internet mỗi máy chủ là một IP khác nhau và có thể đọc các ngôn ngữ như file *.htm và *.html…

- Web server có thể là phần cứng hoặc phần mềm cũng có thể bao gồm cả hai.

  • Phần cứng: Máy chủ Web là một máy tính lưu trữ các file ảnh, HTML, CSS, JavaScript của một Website và truyền chúng tới người dùng cuối. Máy chủ Web được kết nối Internet và truy cập thông qua một tên miền như là kiemtientuweb.com chẳng hạn.
  • Phần mềm: Máy chủ Web bao gồm một số phần điều khiển người dùng truy cập đến file lưu trữ trên một máy chủ HTTP. Máy chủ HTTP là một phần mềm, nó có khả năng hiểu được các địa chỉ website (URL) và giao thức trình duyệt sử dụng để xem các website (HTTP).

2. Cách xuất bản một trang Web

- Web được chia làm 2 loại là Web tĩnh và Web động.

- Để xuất bản Web tĩnh đơn giản ta chỉ cần Web Server tĩnh bao gồm một máy tính và một HTTP server. Vì đơn giản Web tĩnh là những Web không thay đổi nội dung khi được Web Server gửi đi đến người dùng cuối.

- Để xuất bản Web động ta cần một Web Server tĩnh là một số phần mềm hổ trợ đặc biệt mà phổ biến nhất là một application server (máy chủ ứng dụng) và một database. Chúng ta gọi nó là động là bởi vì application server cập nhật các file được lưu trữ trước khi gửi chúng tới tình duyệt của bạn thông qua HTTP server

3. Cách xử lý của Web Server

- Khi bạn cần truy cập đến một trang web, trình duyệt của bạn sẽ gửi yêu cầu đến Server. Web server sẽ xử lý và tìm kiếm file được yêu cầu đó trong bộ nhớ của Web Server. Trong việc tìm file, Server sẽ đọc file đó xử lý nó nếu cần rồi gửi nó về cho trình duyệt.

4. Các bước lấy dữ liệu của một Website

Bước 1: Web server lưu trữ các file của website – Hosting file 

- Web Server phải là nơi lưu trữ tất cả các file của trang Web hay là soure code của Website. 

- Về bản chất bạn có thể lưu trữ tất cả các file đó trên máy tính hay laptop cá nhân của mình để làm 1 Web Server miễn là bạn phải cài đặt đảm bảo đủ các yếu tố sau: 

  • Luôn chạy và hoạt động liên tục.
  • Luôn luôn kết nối với mạng internet.
  • Luôn có crung một địa chỉ IP. 
  • Được bảo trì bởi một bên cung cấp thứ 3.

- Vì các yêu cầu kia khá là khó khăn với một cá nhận, nên nhiều dịch vụ cung cấp Hosting, Vps ra đời từ đây.

Bước 2: Giao tiếp qua HTTP

Web server sẽ hỗ trợ giao thức truyền phát siêu văn bản – HTTP. HTTP là tập hợp các quy tắc kết nối giữa hai máy tính bao gồm Textual và Stateless.

  • Textual: Mọi lệnh đều là văn bản thuần túy và người dùng có thể đọc được nó.
  • Stateless: Khi cả người dùng và máy chủ không nhớ kết nối trước đó.

HTTP có quy tắc rõ ràng về giao tiếp giữa client và server như sau:

  • Duy nhất client có thể tạo ra yêu cầu HTTP đến server. Các server chỉ có thể đáp trả yêu cầu HTTP của client.
  • Client phải cung cấp URL của file khi yêu cầu file đó thông qua HTTP.
  • Tất cả yêu cầu HTTP sẽ được web server trả lời

HTTP có trách nhiệm xử lý và trả lời các yêu cầu đến qua các bước:

  • Khi nhận được một yêu cầu, HTTP sẽ kiểm tra URL được yêu cầu có khớp với file hiện có không?
  • Nếu trùng khớp, máy chủ web sẽ gửi nội dung file trả lại trình duyệt. Trường hợp không trùng khớp, một Application server sẽ tạo ra file được yêu cầu.
  • Web server sẽ gửi trả lại một thông điệp lỗi cho trình duyệt (phổ biến nhất là 404 Not Found) nếu nó không thể xử lý được.

II. Các Web Server thông dụng hiện nay

1. Apache

1.1 Apache là gì?

- Apache (chương trình máy chủ HTTP) có tên đầy đủ là Apache HTTP Server. Đây là một server mã nguồn mở miễn phí và được sử dụng phổ biến hiện nay. Apache server được hệ thống Apache Software Foundation phát triển và điều hành. 

- Apache là chương trình máy chủ HTTP là một chương trình dành cho máy chủ đối thoại qua giao thức HTTP. Apache chạy trên các hệ điều hành tương tự như Unix, Microsoft Windows, Novell Netware và các hệ điều hành khác.

- Apache hoạt động tốt với cả server Unix và Windows và là phần mềm đa nền tảng.

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

- Apache làm nhiệm vụ thiết lập kết nối giữa Server và trình duyệt Web (Firefox, Chrome, Safari,...), sau đó chịu trách nhiệm chuyển file qua lại giữa Server và trình duyệt Web (cấu trúc hai chiều client-server). 

1.3 Apache có những tính năng gì?

- Apache có những tính năng sau

  • Static file serving
  • SSL/TLS support
  • Virtual hosts
  • Reverse proxying
  • Load balancing
  • Compression
  • Access controls
  • URL rewriting
  • Custom logging
  • Server-side includes
  • Limited WebDAV
  • FLV streaming
  • FastCGI
  • Digest access authentication
  • CGI
  • Administrative console
  • .htaccess

1.4 Ưu nhược điểm của Apache

- Ưu điểm:

  • Apache là phần mềm miễn phí mã nguồn mở
  • Cấu hình đơn giản và thân thiện với cả những người mới bắt đầu làm quen với ứng dụng này
  • Apache có độ ổn định và đáng tin cậy
  • Phần mềm này được cập nhật thường xuyên
  • Phát hiện và báo lỗi bảo mật liên tục giúp người dùng ngăn chặn kịp thời, không để thông tin bị đánh cắp
  • Các thể thức cấu trúc Module linh hoạt
  • Apache hoạt động hiệu quả và nhanh nhạy với WordPress sites
  • Cộng đồng sử dụng Apache lớn nên có thể tương trợ và giải đáp mọi thắc mắc

- Nhược điểm:

  • Thỉnh thoảng chậm hay gặp trục trặc trong quá trình truy vấn bởi có nhiều người truy cập Apache cùng một lúc
  • Khả năng bảo mật đôi khi còn chưa hiệu quả bởi là phần mềm miễn phí nên người dùng có thể chọn nhiều cách thiết lập khác nhau

2. Nginx

1.1 Nginx là gì?

- Nginx là một máy chủ mã nguồn mở nổi tiếng. Khi mới ra đời, Nginx được dùng để phục vụ web HTTP. Tuy nhiên, hiện nay nó được dùng để làm Reverse Proxy, Email Proxy (IMAP, POP3, SMTP) và và một trình cân bằng tải (load balancer) và proxy ngược (reverse proxy) cho các máy chủ HTTP, TCP và UDP.

- Nginx được Sysoev cho ra đời chính thức vào tháng 10/2004. Nginx sử dụng kiến trúc sự kiện không đồng bộ. Tính năng này giúp Nginx tăng tốc độ, mở rộng tính năng và đáng tin cậy hơn. Rất nhiều website có traffic lớn đã sử dụng Nginx cũng vì khả năng mạnh mẽ và xử lý hàng nghìn kết nối cùng lúc của nó.

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

- Nginx hoạt động theo kiến trúc Asynchronous và Event Driven. Kiến trúc này là những Threads được quản lý trong một tiến trình, mỗi tiến trình hoạt động dựa vào các thực thể nhỏ hơn – Worker Connections.

- Worker Process sẽ nhận các truy vấn từ Worker Connections và gửi các truy vấn đó đến Process cha – Master Process. Master Process sẽ trả lại kết quả cho những yêu cầu đó. Một Worker Connections có khả năng xử lý được 1024 yêu cầu tương tự nhau. Do đó, Nginx xử lý được hàng nghìn yêu cầu mà không gặp bất cứ khó khăn gì.

- Nginx luôn hiệu quả hơn khi hoạt động trên môi trường tìm kiếm, thương mại điện tử và Cloud Storage.

1.3 Nginx có những tính năng gì?

- Nginx bao gồm những tính năng sau đây:

  • Có khả năng xử lý cùng một lúc hơn 10.000 kết nối với bộ nhớ thấp
  • Phục vụ Static Files và lập chỉ mục cho tập tin
  • Dùng bộ nhớ đệm Cache để tăng tốc Proxy ngược, cân bằng tải đơn giản và khả năng chịu lỗi
  • Hỗ trợ tăng tốc với bộ nhớ đệm của WSGI, SCGI, FastCGI và các máy chủ Memcached
  • Có cấu hình linh hoạt và khả năng lưu lại nhật ký truy vấn
  • Chuyển hướng lỗi 3XX – 5XX
  • Sử dụng Regular Expressions để Rewrite URL
  • Hạn chế tỷ lệ đáp ứng truy vấn
  • Giới hạn truy vấn từ một địa chỉ hoặc số kết nối đồng thời
  • Có khả năng nhúng mã PERL
  • Tương thích và hỗ trợ IPv6
  • Hỗ trợ WebSockets
  • Hỗ trợ truyền tải file MP4 và FLV
  • Rewrite URL,…

3. So sánh Nginx và Apache

3.1 Hiệu suất

3.1.1 Web tĩnh

hieu suat cua apache va nginx

- Nginx nhanh hơn 2,5 lần Apache dựa trên một thử nghiệm kiểm chuẩn chạy tới 1000 kết nối đồng thời.

- Trong một thử nghiệm khác với 512 kết nối đồng thời, Nginx nhanh hơn khoảng 2 lần và và tiêu thụ ít bộ nhớ hơn (4%).

3.1.2 Web động

so sanh hieu xuat apache va nginx

- Đối với Web động thì không có sự khác biệt mấy. Bởi vì hầu hết các request đang xử lý trong PHP runtime environment khá giống nhau cho cả hai web server.

Senmo

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

- Apache hoạt động 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 vài hệ thống trong số chúng và cũng hỗ trợ Window tuy nhiên hiệu suất không được mạnh bằng.

3.3 Bảo mật

- Về phần bảo mật thì cả hai đều rất là coi trọng vấn đề này, cả hai thường có những phát hành báo cáo bảo mật và những tư vấn, đảm bảo rằng khía cạnh bảo mật được tăng cường ở mọi cấp độ.

3.4 Hỗ trợ và tài liệu

- Cả Nginx và Apache đều cung cấp tài liệu, bao gồm hầu hết mọi chủ đề và tính năng cần thiết. Tài liệu này bao gồm release notes, user guides, tutorials... Nginx thậm chí có wiki riêng.

3.5 Tính linh hoạt

- Một máy chủ web phải đủ linh hoạt để cho phép các tùy chỉnh. Apache làm điều đó khá tốt, thông qua việc sử dụng các công cụ .htaccess mà Nginx không hỗ trợ.

- Ngoài ra apache cho phép phân cấp nhiệm vụ admin. Admin bên thứ ba và admin cấp hai có thể bị ngăn truy cập vào máy chủ chính.

- Apache còn cung cấp hơn 60 module giúp apache có khả năng mở rộng cao. Đó là lý do tại sao Apache phổ biến hơn với các nhà cung cấp dịch vụ hosting chia sẻ.

III. Kết luận

- Cả Nginx web server và Apache web server đều là những ứng cử viên sáng giá trong các lĩnh vực khác nhau. Nginx là người chiến thắng rõ ràng đối với các nội dung tĩnh, trong khi nội dung động không tạo ra sự khác biệt thực sự giữa các máy chủ web.

- Apache xuất sắc hơn xét về tính linh hoạt, đặc biệt đối với shared hosting user. Tệp .htaccess của Apache và các mô-đun động chắc chắn sẽ phù hợp hơn, trong khi Nginx sẽ tốt hơn cho VPS và dedicated hosting.

Bài viết nên đọc

Trên đây là những kiến thức từ kinh nghiệm bản thân mình nên các bạn có thể tham khảo. Nếu các bạn có góp ý cho mình thì hãy gửi vào đây, mình sẵn sàng nhận ý kiến đóng góp từ các bạn.

Ngoc Phuong

Ngoc Phuong - 66 bài viết - Đánh giá:

Có 2 cách học hiệu quả nhất, 1 là nói cho người khác biết thứ bạn mới học được, 2 là nói cho người khác biết thứ bạn sắp quên. Tôi mới học được rất nhiều thứ. Tôi cũng sắp quên rất nhiều thứ.

Để lại bình luận

Địa chỉ email của bạn sẽ không được công khai