Tìm hiểu về Nginx

Tìm hiểu về Nginx

Tìm hiểu về Nginx

1. Các khái niệm cần biết
Web Server
  • Máy chủ Web (Web Server) là máy tính mà trên đó cài đặt phần mềm phục vụ web, đôi khi người ta cũng gọi chính phần mềm đó là web server. Tất cả các web server đều hiểu và chạy được các file *.htm và *.html.
  • Ở phần lõi của máy chủ web là một dịch vụ web phục vụ nội dung tĩnh cho một trình duyệt bằng cách tải một tập tin từ đĩa (máy chủ) và chuyển nó lên mạng, tới một người sử dụng trình duyệt web. Sự trao đổi hoàn toàn này được thực hiện gián tiếp thông qua một trình duyệt và một máy chủ kết nối tới một thiết bị khác sử dụng HTTP. Bất kỳ máy tính nào cũng có thể vào trong một dịch vụ web bằng cách cài đặt phần mềm dịch vụ và kết nối internet.
  • Máy Web Server là máy chủ có dung lượng lớn, tốc độ cao, được dùng để lưu trữ thông tin như một ngân hàng dữ liệu, chứa những website đã được thiết kế cùng với những thông tin liên quan khác. (các mã Script, các chương trình, và các file Multimedia)
  • Tất cả các Web Server đều có một địa chỉ IP (IP Address) hoặc cũng có thể có một Domain Name. Giả sử khi bạn đánh vào thanh Address trên trình duyệt của bạn một dòng http://www.abc.com sau đó gõ phím Enter bạn sẽ gửi một yêu cầu đến một Server có Domain Name là www.abc.com. Server này sẽ tìm trang Web có tên là index.htm rồi gửi nó đến trình duyệt của bạn.
  • Bất kỳ một máy tính nào cũng có thể trở thành một Web Server bởi việc cài đặt lên nó một chương trình phần mềm Server Software và sau đó kết nối vào Internet. Server phải hoạt động liên tục 24/24 giờ, 7 ngày một tuần và 365 ngày một năm, để phục vụ cho việc cung cấp thông tin trực tuyến. Vị trí đặt server đóng vai trò quan trọng trong chất lượng và tốc độ lưu chuyển thông tin từ server và máy tính truy cập.
Load balancer
Load balancer
- Load balancing (hay còn gọi là Cân bằng tải) là một kỹ thuật thường được sử dụng để tối ưu hóa việc sử dụng tài nguyên, băng thông, giảm độ trễ, và tăng cường khả năng chịu lỗi của 1 website.
- Các website hiện đại có lưu lượng truy cập cao phải phục vụ hàng trăm nghìn, thậm chí hàng triệu các requests đồng thời từ người dùng hoặc khách hàng, đồng thời phải phản hồi chính xác lại các văn bản, hình ảnh, video hoặc dữ liệu ứng dụng, tất cả đều được thực hiện rất nhanh chóng và đáng tin cậy. Để đáp ứng hiệu quả khối lượng lớn các yêu cầu và phản hồi một cách tiết kiệm nhất, cách tốt nhất thường sẽ là sử dụng thêm servers.
- Khi chúng ta có nhiều hơn một Web Server, cùng với đó là sự gia tăng lưu lượng truy cập thì việc bổ sung thêm một máy chủ để phân phối lưu lượng này một cách hợp lý là cần thiết.
Một load balancer (Cân bằng tải) hoạt động như "traffic cop" (cảnh sát giao thông) ở phía trước server và routing các request của client trên tất cả các servers có khả năng thực hiện các request đó, sao cho tối ưu về tốc độ và hiệu suất nhất và đảm bảo rằng không có server nào phải hoạt động quá mức. Nếu một server đơn lẻ bị hỏng, cân bằng tải (load balancer) sẽ chuyển hướng lưu lượng truy cập đến các server trực tuyến còn lại. Khi một server mới được thêm vào nhóm máy chủ, bộ cân bằng tải sẽ tự động bắt đầu gửi yêu cầu đến máy chủ mới thêm này.
Reference:
Reverse proxy server
Reverse Proxy
- Proxy server là một máy chủ trung gian hoặc trung gian chuyển tiếp các yêu cầu nội dung từ nhiều máy khách (Client) đến các máy chủ (Server) khác nhau trên Internet.
- Reverse proxy server là một proxy server thường nằm sau tưởng lửa trong một mạng riêng và kiểm soát các request mà clients gửi đến. Nếu xác định những request này hợp lệ thì Reverse proxy sẽ thực hiện nhiệm vụ luân chuyển đến các server thích ứng. Trái ngược với một proxy chuyển tiếp (forward proxy), là một trung gian cho các clients liên hệ với nó liên lạc với bất kỳ máy chủ nào, Reverse proxy là một trung gian cho các máy chủ liên hệ với nó được liên lạc bởi bất kỳ clients nào. Các reverse proxy thường được triển khai để giúp tăng cường bảo mật, cân bằng tải (Load balancing), tăng tốc độ trang web, hiệu suất và độ tin cậy.
- Ưu điểm lớn nhất của việc sử dụng Reverse proxy là khả năng quản lý tập trung. Mọi request được gửi lên bởi clients đều được kiểm soát và được bảo mật một cách tốt nhất.

Reference:

2. Giới thiệu về Nginx
Nginx
- nginx được đọc (phát âm) là "Engine X".
- nginx là dạng rút gọn sau khi bạn xóa cả hai chữ e khỏi “Engine X”.
- nginx là một phần mềm web server mã nguồn mở (tương tự như Apache - but very light weight) sử dụng phổ biến các giao thức HTTP, HTTPS, SMTP, POP3 và IMAP. Ban đầu nó dùng để phục vụ web HTTP (với vai trò là web server). Tuy nhiên, ngày nay nó cũng được dùng làm reverse proxy server, HTTP load balancer, HTTP cache, và email proxy như IMAP, POP3, và SMTP.
- nginx được phát triển bởi Igor Sysoev năm 2002, với phiên bản phát hành công khai đầu tiên vào tháng 10 năm 2004. Igor xem phần mềm này ban đầu như một câu trả lời cho vấn đề C10k (là một vấn đề liên quan đến vấn đề hiệu suất xử lý 10.000 kết nối cùng lúc).
- nginx được phát triển cho các mục đích tối ưu việc sử dụng RAM (bộ nhớ thấp) nhưng phục vụ được nhiều kết nối đồng thời cao hơn. NGINX sử dụng kiến trúc hướng sự kiện (event-driven) không đồng bộ (asynchronous). Tính năng này khiến NGINX server trở nên đáng tin cậy, tốc độ và khả năng xử lý hàng triệu users kết nối đồng thời để truy cập tài nguyên mà không làm chậm máy chủ khiến nó trở thành lựa chọn số một của nhiều doanh nghiệp để triển khai hệ thống của mình.
3. Tính năng của Nginx
Những tính năng của máy chủ HTTP Nginx
  • Có khả năng xử lý hơn 10.000 kết nối cùng lúc với bộ nhớ thấp.
  • Phục vụ tập tin tĩnh (static files) và lập chỉ mục tập tin.
  • Tăng tốc reverse proxy bằng bộ nhớ đệm (cache), 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 FastCGI, uwsgi, SCGI, và các máy chủ memcached.
  • Kiến trúc modular, tăng tốc độ nạp trang bằng nén gzip tự động.
  • Hỗ trợ mã hoá SSL và TLS.
  • Cấu hình linh hoạt; lưu lại nhật ký truy vấn
  • Chuyển hướng lỗi 3XX-5XX
  • Rewrite URL (URL rewriting) dùng regular expressions
  • Hạn chế tỷ lệ đáp ứng truy vấn
  • Giới hạn số kết nối đồng thời hoặc truy vấn từ 1 địa chỉ
  • Khả năng nhúng mã PERL
  • Hỗ trợ và tương thích với IPv6
  • Hỗ trợ WebSockets
  • Hỗ trợ truyền tải file FLV và MP4
Những tính năng máy chủ mail proxy của Nginx
Các phương pháp xác thực :
  • POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
  • IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
  • SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
  • Hỗ trợ SSL, STARTTLS và STLS
Hạn chế của Nginx
4. Kiến trúc của Nginx
  • Khi được khởi chạy service, nginx khởi tạo mọt tiến trình chủ và cũng là tiến trình duy nhất tồn tại trong bộ nhớ Master Process. Tiến trình này không chịu trách nhiệm tự xử lý bất kỳ request nào từ phía client mà thay vào đó nó sinh ra các tiến trình con gọi là Worker Process để xử lý các request này.
Nginx Architecture
  • Để định nghĩa cho các Worker Process này, chúng ta cần sử dụng tệp tin cấu hình để xác định số tiến trình, số lượng kết nối , tài khoản và nhóm tài khoản mà mỗi Worker Process chạy.
5. Nguyên lý hoạt động của Nginx
Nginx work
  • Nginx hoạt động theo kiến trúc bất đồng bộ (asynchronous), hướng sự kiện (event driven). Kiến trúc này có thể hiểu là những threads tương đồng nhau sẽ được quản lý trong một tiến trình (process), và mỗi tiến trình hoạt động chưa các thực thể nhỏ hơn gọi là worker connections. Cả bộ đơn vị này chịu trách nhiệm xử lý các threads.
  • Worker connections sẽ gửi các truy vấn cho một Worker Process, Worker Process sẽ gửi nó tới process cha (Master Process). Cuối cùng, Master Process sẽ trả kết quả cho những yêu cầu đó.
  • Điều này có vẻ đơn giản, một worker connection có thể xử lý đến 1024 yêu cầu tương tự nhau. Vì vậy, NGINX có thể xử lý hàng ngàn yêu cầu mà không gặp rắc rối gì. Đây cũng là lý do vì sao NGINX tỏ ra hiệu quả hơn khi hoạt động trên môi trường thương mại điện tử, trình tìm kiếm, và cloud storage.
6. Cách kiểm 1 website đang chạy Nginx
Trên hầu hết mọi website, bạn có thể dễ dàng kiểm tra HTTP header của máy chủ để xem rằng nó đang chạy NGINX hoặc là Apache. Bạn có thể thấy HTTP header bằng cách mở network tab trong Chrome Devtools. Hoặc bạn có thể kiểm tra header với công cụ như Pingdom hoặc GTmetrix. Tuy nhiên, HTTP header có thể không luôn luôn tiết lộ máy chủ web ở bên dưới. Ví dụ nếu site WordPress của bạn nằm sau dịch vụ proxy như là Cloudfare, thì HTTP header máy chủ hiện chữ cloudfare.
HTTP Header

Reference:

Đăng nhận xét

Mới hơn Cũ hơn