Nginx là một trong những web server sử dụng mã nguồn mở được ứng dụng rất nhiều trong lĩnh vực công nghệ thông tin hiện nay. Nếu như bạn đang tìm hiểu Nginx là gì cũng như các kiến thức liên quan về nó thì không nên bỏ qua những chia sẻ của ITNavi trong bài viết sau.
Tìm hiểu NGINX là gì? Hoạt động và tính năng của NGINX ra sao?
1. Khái niệm NGINX là gì?
NGINX là gì? Thực tế đây là một phần mềm web server mã nguồn mở, sử dụng kiến trúc hướng sự kiện (event-driven) không đồng bộ (asynchronous). Mục tiêu ban đầu để phục vụ HTTP cache nhưng sau được áp dụng vào reverse proxy, HTTP load balancer và các giao thức truyền mail như IMAP4, POP3, và SMTP. Cách thức vận hành của NGINX là gì? Cùng tìm hiểu nhé!
NGINX chính thức ra đời vào tháng 10/2014. Đây là phần mềm giúp server có tốc độ và khả năng mở rộng lớn nhất, đồng thời, xử lý và thao tác trên hàng nghìn kết nối cùng lúc. Do đó, rất nhiều “ông lớn” công nghệ hiện nay đều lựa chọn NGINX như Google, Adobe, Netflix, WordPress…
2. NGINX hoạt động như thế nào?
Về cơ bản, NGINX cũng hoạt động tương tự như các web server khác. Khi bạn mở một trang web, trình duyệt của bạn sẽ liên hệ với server chứa website đó. Server sẽ tìm kiếm đúng file yêu cầu của website và gửi về cho bạn. Đây là một trình tự xử lý dữ liệu single – thread, nghĩa là các bước được thực hiện theo một trình tự duy nhất. Mỗi yêu cầu sẽ được tạo một thread riêng.
Tuy nhiên, NGINX hoạt động theo kiến trúc bất đồng bộ (asynchronous) hướng sự kiện (event driven). Nó cho phép các threads tương đồng được quản lý trong một tiến process. Mỗi process hoạt động sẽ bao gồm các thực thể nhỏ hơn, gọi là worker connections dùng để xử lý tất cả threads.
Worker connections sẽ gửi các yêu cầu cho worker process, worker process sẽ gửi nó tới master process, và master process sẽ trả lời các yêu cầu đó. Đó là lý do vì sao một worker connection có thể xử lý đến 1024 yêu cầu tương tự nhau. Nhờ vậy, NGINX có thể xử lý hàng ngàn yêu cầu khác nhau cùng một lúc.
3. Các tính năng của NGINX là gì?
Tại sao nên sử dụng NGINX? Để trả lời câu hỏi này ta có thể kể đến các tính năng vượt trội của NGINX như sau:
- Có thể 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 proxy ngược 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; Xem thêm bài viết IPv6 là gì?
- Hỗ trợ WebSockets;
- Hỗ trợ truyền tải file FLV và MP4.
4. Cách thức hoạt động của Nginx là gì?
Nginx hoạt động như sau: Khi ai đó thực hiện gửi yêu cầu để mở một trang web, thì khi đó trình duyệt sẽ liên lạc đến server có chứa website đó. Sau đó, server sẽ tìm kiếm theo đúng file yêu cầu của trang web rồi gửi ngược về cho server. Đây chính là loại truy vấn đơn giản nhất từ trước đến nay.
Theo ví dụ trên thì nó sẽ được xem là một single thread, hay còn gọi là một bộ các bước xử lý dữ liệu thực thi dựa theo trình tự duy nhất. Khi đó, Web server truyền thống sẽ tạo một thread cho mỗi yêu cầu, thì Nginx hoạt động theo một cách hoàn toàn khác. Nó sẽ hoạt động dựa vào kiến trúc bất đồng bộ, hướng sự kiện.
Kiến trúc này bạn có thể hiểu là các threads tương đồng với nhau giúp quản lý trong một tiến trình và mỗi một tiến trình hoạt động chưa được xem là thực tế nhỏ hơn và được gọi là worker connections. Cả bộ đơn vị này sẽ chịu trách nhiệm cho việc xử lý các threads. Khi đó, worker connections sẽ gửi các truy vấn cho một worker process rồi worker process sẽ gửi nó tới cho process cha. Cuối cùng thì master process sẽ trả kết quả tới cho các yêu cầu đó.
Điều này đơn giản như sau, một worker connection có khả năng xử lý đến 1024 yêu cầu tương tự như nhau. Bởi vậy, Nginx sẽ xử lý hàng ngàn yêu cầu khác mà không gặp phải bất kỳ rắc rối gì. Đây chính là lý do tại sao Nginx luôn tỏ ra được nhiều hiệu quả hơn nếu như hoạt động trên môi trường thương mại điện tử, cload storage và trình tìm kiếm.
Sự khác biệt giữa Apache Server và NGINX là gì?
Trong hai thập kỷ, Apache đã thay đổi thị trường máy chủ web đang dần bị thu hẹp từng ngày. 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. Người dùng Apache có thể không đồng ý về vấn đề này. Đó là lý do tại sao rất khó để đi đến kết luận máy chủ web nào tốt hơn. Sự thật cả Apache và Nginx đều là phần cốt lõi của các web stack hoàn chỉnh (LAMP cũng như LEMP) và sự lựa chọn cuối cùng tùy thuộc vào nhu cầu của từng cá nhân.
Sự so sánh sau đây giữa Nginx và Apache sẽ cho bạn một cái nhìn toàn cảnh chính xác.
1. Mức độ phổ biến
Cho đến năm 2012, hơn 65% các trang web dựa trên Apache. Sự phổ biến không phải chỉ vì lịch sử lâu đời của Apache. Đây là một trong những phần mềm tiên phong đầu tiên cho sự phát triển của World Wide Web. Tuy nhiên, thời thế đã thay đổi. Theo W3Tech.com, kể từ ngày 14 tháng 1 năm 2019, số lượng các trang web sử dụng máy chủ Apache (44,4%) chỉ hơn Nginx một chút (40,9%). Nginx và Apache chiếm lĩnh gần 85% thị trường máy chủ web.
Khi nói đến các trang web có lưu lượng truy cập cao, biểu đồ sau đây thật thú vị. Trong đó, Nginx ở trên Apache nhưng lại nằm dưới Google Servers, dịch vụ cung cấp máy chủ cho các trang web như YouTube, Gmail và Drive. nginx là gì
Một số lượng lớn các trang web đã di chuyển từ Apache sang Nginx. Rõ ràng, Nginx được coi là một máy chủ web mới và hợp thời hơn. Các trang web có lưu lượng truy cập cao trên Apache, ví dụ, Wikipedia và New York Times, thường sử dụng proxy HTTP front-end như Varnish.
Kết luận: Khoảng cách về mức độ phổ biến giữa Apache và Nginx đang thu hẹp rất nhanh. Xét về yếu tố này, Apache và Nginx hòa nhau.
2. Tốc độ
Đặc điểm chính của một máy chủ web tốt là nó phải chạy nhanh, cũng như dễ dàng đáp ứng các kết nối và lưu lượng truy cập từ bất cứ đâu. Để đo tốc độ máy chủ, bài viết đã so sánh hai trang web du lịch phổ biến dựa trên Apache (Expedia.com) và Nginx (Booking.com).
Sử dụng một công cụ trực tuyến có tên Bitcatcha, các phép so sánh được thực hiện cho nhiều máy chủ và được đo dựa trên benchmark trên 200 ms của Google. Booking.com dựa trên Nginx được xếp hạng “đặc biệt nhanh chóng”. Trái lại, Expedia.com dựa trên Apache được xếp hạng “trên mức trung bình và có thể được cải thiện”.
Nếu đã sử dụng cả hai trang web du lịch này nhiều lần, bạn có thể xác nhận rằng Expedia chậm hơn một chút khi trả lại kết quả truy vấn so với Booking.
Dưới đây là so sánh giữa hai máy chủ cho một vài trang web khác. Nginx nhanh hơn trong hầu hết các trường hợp dưới đây ngoại trừ một ngoại lệ.
Kết luận: Nginx chiến thắng vòng này.
3. Bảo mật
Cả Nginx và Apache đều rất coi trọng tính bảo mật trên trang web của mình. Không có hệ thống mạnh mẽ nào mà lại không có những biện pháp đối phó với các cuộc tấn công DDoS, phần mềm độc hại và phishing. Cả hai máy chủ này định kỳ 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 độ.
Kết luận: Nginx và Apache lại hòa nhau trong vòng này.
4. Kết nối đồng thời
Có một điều cần lưu ý là Apache, theo một cách nào đó, không thể so sánh với quy mô và khả năng của Nginx. Rốt cuộc, Nginx ban đầu được thiết kế để tăng tốc cho các trình xử lý FastCGI và SCGI. Tuy nhiên, từ Apache 2.4 trở đi (phiên bản mặc định), đã có sự cải thiện mạnh mẽ về số lượng kết nối đồng thời. Sự cải thiện này đã tiến triển đến đâu là điều đáng để tìm hiểu. nginx là gì
Dựa trên các bài kiểm tra tại Loadimpact.com, bài viết lại so sánh Booking.com (Nginx) với Expedia.com (Apache). Đối với 25 người dùng ảo, trang web Nginx có thể ghi 200 yêu cầu mỗi giây, cao hơn 2,5 lần so với Apache (80 yêu cầu mỗi giây). Rõ ràng, nếu bạn có một trang web lưu lượng truy cập cao chuyên dụng, Nginx là một lựa chọn an toàn hơn.
Kết luận: Nginx chiến thắng vòng này.
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ợ. Nó 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. Hơn nữa, Apache hỗ trợ hơn 60 mô-đun, giúp nó 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ẻ.
Kết luận: Apache chiến thắng vòng này.
6. Các thông số khác
Trước đây, Nginx không hỗ trợ tốt lắm cho hệ điều hành Windows, không giống như Apache. Tuy nhiên, điều này không còn nữa. Ngoài ra, Apache cũng từng bị coi là khá yếu về cân bằng tải và reserve proxy. Nhưng mọi thứ bây giờ đã thay đổi!
Cách cài đặt và chạy Nginx Server trên Windows 10
Đến bây giờ, Nginx đã đề cập rằng mình sẽ giải quyết tất cả những vấn đề trong các bản phát hành cho Windows tương lai. Để cài đặt và chạy Nginx thành công trên Windows 10, hãy làm theo các bước dưới đây.
1. Tải Nginx server
Có nhiều phiên bản tải xuống của Nginx cho Windows và Nginx khuyên bạn nên sử dụng phiên bản chính. Tuy nhiên, bạn sẽ không thấy bất kỳ vấn đề nào, nếu tải xuống phiên bản ổn định gần đây nhất cho Windows.
Chọn file zip mới nhất và tải nó vào một thư mục mới.
Bước đầu tiên, bạn cần giải nén thư mục mới. Bạn có thể sử dụng 7-zip, WinRAR hoặc bất kỳ phần mềm giải nén phổ biến nào khác.
Sau khi giải nén nội dung file trong thư mục gốc, bạn phải di chuyển toàn bộ thư mục đi kèm với bản sao tải xuống tích hợp. Ví dụ sẽ chuyển thư mục sang “Program Files”.
Dán thư mục trong các file chương trình. Ví dụ sẽ chạy Nginx từ vị trí này như một chương trình web service.
2. Cài đặt Nginx
Để cài đặt và chạy Nginx, hãy chọn và nhấp đúp vào file Nginx.exe. Bây giờ, nó đã được kích hoạt để sử dụng.
Trong bước tiếp theo, bạn cần xác minh cài đặt có thành công không. Để làm điều này, bạn có thể truy cập trình duyệt mặc định của mình và nhập “localhost”. Nếu bạn thấy màn hình sau đây, cho biết Nginx web server đã được cài đặt thành công và đang hoạt động, sẽ không có vấn đề gì trong quá trình cài đặt Windows 10 cả.
Để dừng Nginx, bạn có thể kết thúc nó từ cửa sổ Task Manager. nginx là gì
3. Chạy Nginx trên PC Windows
Để chạy Nginx, bạn phải sử dụng Internet Information Services (IIS), một máy chủ web của Microsoft cung cấp các trang hoặc file HTML được yêu cầu. Bạn có thể kích hoạt nó từ “Turn Windows Features On or Off” trên Control Panel. Tích vào các trường bắt buộc “Web Management Tools” và “IIS Management Console”.
Sẽ mất một lúc để IIS được kích hoạt trên máy tính khi những thay đổi được áp dụng.
Bạn có thể mở IIS Manager trực tiếp từ menu Start. Tại đây, bạn sẽ có thể truy cập trang web mặc định, thường được đặt tại “inetpub wwwroot”. Đây còn được gọi là root ứng dụng web.
Việc thay đổi đường dẫn vật lý của root này thành một thư mục mong muốn rất hữu ích. Ví dụ đã tạo một thư mục mới tên “Work” trong C: và đã thay đổi đường dẫn vật lý thành C:Work.
Sau đó, đi đến thư mục Nginx mà bạn đã đổi tên trong Program Files. Nhấp vào Conf và chọn “nginx.conf”. File này có thể được chỉnh sửa bằng trình soạn thảo văn bản Notepad++.
Trong Notepad++, thay đổi root thành đường dẫn vật lý đã chỉnh sửa như những gì bài viết thảo luận ở trên.
Bạn có thể chỉnh sửa file index.html trong thư mục root trên một tab riêng. Thay đổi văn bản thành những gì bạn muốn web server hiển thị trên màn hình.
Bây giờ, hãy chạy chương trình Nginx.exe một lần nữa và gõ “localhost” trên cửa sổ trình duyệt. Nginx web server sẽ highlight các chỉnh sửa bạn đã thực hiện.
Trang web tài nguyên Nginx có một danh sách đầy đủ các ứng dụng web server mà bạn có thể sử dụng để chạy nhiều ứng dụng khác nhau trên PC Windows.
Nginx là một trong những công ty web server hàng đầu dự kiến sẽ làm “lu mờ” Apache trong tương lai. Nginx server nhanh hơn, có thể xử lý nhiều vấn đề đồng thời và rất đáng tin cậy.
Cách để sử dụng Nginx làm load balancer
Một điều rất quan trọng khi hệ thống ngày càng lớn là bạn biết cách scale nó lên để đáp ứng được nhiều user request lên server của bạn. Một cách rất kinh điển đó là scale theo bề ngang. Có nghĩa là hệ thống của bạn thay vì chạy trên 1 server thì sẽ được nhân lên thành nhiều nhiều server.
Do đó, khi có nhiều request của nhiều người dùng thì sẽ phân phối các request đó đến với các server khác nhau. Một ví dụ đơn giản là nếu 1 server có thể phục vụ được khoảng 100 người cùng lúc thì nếu ta có 2 servers thì ta sẽ phục vụ được 200 người dùng cùng lúc.
Vấn đề đặt ra là làm thế nào để phân phối các requests đó đến với các servers khác nhau? Lúc đó người ta cần dùng đến loadblancer.
1. Vậy Cân Bằng Tải (hay Load Balancing) là gì?
Cân Bằng Tải là việc phân bố đồng đều lưu lượng truy cập giữa hai hay nhiều các máy chủ có cùng chức năng trong cùng một hệ thống. Bằng cách đó, sẽ giúp cho hệ thống giảm thiểu tối đa tình trạng một máy chủ bị quá tải và ngưng hoạt động. Hoặc khi một máy chủ gặp sự cố, Cân Bằng Tải sẽ chỉ đạo phân phối công việc của máy chủ đó cho các máy chủ còn lại, đẩy thời gian uptime của hệ thống lên cao nhất và cải thiện năng suất hoạt động tổng thể.
Có rất nhiều phần mềm hỗ trợ để làm load balancer như HAProxy, nginx, lighttp,…
Hiện nay, với dự án cho công ty mình thì mình đang dùng Nginx để làm load balancer. Nginx là một web server rất nổi tiếng và đang ngày càng được nhiều developer sử dụng. Ngoài việc nó hoạt động như web server thì nginx cũng hỗ trợ rất tốt cho việc làm load balancer. Nginx được viết bằng C nên performance của nó rất tốt, tiêu tốn ít tài nguyên hệ thống (so với Apache Web Server).
2. Hướng dẫn cách config để có thể sử dụng được nginx như một load blancer
Giả sử bạn muốn đón connection từ client ở máy 10.10.10.1 với cổng là 9000 và phân tải đến 2 servers là 10.10.10.9 và 10.10.10.10. Trước hết, bạn phải chạy service ở 2 máy 10.10.10.9 và 10.10.10.10 với cổng dịch vụ là 9002.
Để sử dụng nginx làm load blancer thì bạn config trên máy 10.10.10.1 như sau:
upstream proserver {
server 10.10.10.9:9002;
server 10.10.10.10:9002;
}
Trong đó 10.10.10.9 và 10.10.10.10 là 2 servers đang chạy dịch vụ ở cổng 9002.
Chúng ta sẽ config để máy 10.10.10.1 này đón ở cổng 9000 như sau:
server {
proxy_buffering off;
client_max_body_size 5M;
listen 9000;
location / {
proxy_pass http://proserver;
} nginx là gì
}
Sau khi config xong thì chúng ta sẽ start nginx lên để nó làm load blancer cho 2 máy kia.
sudo service nginx restart
Nginx hỗ trợ việc chúng ta ưu tiên lưu lượng đến một server nào nhiều hơn server còn lại bằng tham số weight.
Chúng ta sẽ sửa lại config như sau:
upstream proserver {
server 10.10.10.9:9002 weight=1;
server 10.10.10.10:9002 weight=2;
}
Có nghĩa là lúc này, server 10.10.10.10 sẽ nhận requests nhiều gấp 2 lần server 10.10.10.9.
Ngoài ra, chúng ta còn có thể log lại dữ liệu request từ client bằng nginx.
Sau khi configure đầy đủ chúng ta sẽ được file load blancer như sau:
worker_processes 4;
user apache;
events {
worker_connections 2048;
}
http {
#limit_conn_zone $binary_remote_addr zone=addr:10m;
log_format upstream_time ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $body_bytes_sent ‘
‘”$http_referer” “$http_user_agent”‘
‘rt=$request_time urt=”$upstream_response_time”‘;
upstream proserver {
server 10.10.10.9:9002 weight=1;
server 10.10.10.10:9002 weight=2;
}
server {
if ($time_iso8601 ~ “^(d{4})-(d{2})-(d{2})”) {
set $year $1;
set $month $2;
set $day $3;
}
access_log /home/log/nginx/nginx-access-$year-$month-$day.log upstream_time;
proxy_buffering off;
client_max_body_size 5M;
listen 9000;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://proserver;
}
}
}
Các tìm kiếm liên quan:
- web server nginx là gì
- proxy_pass nginx là gì
- cấu hình nginx
- welcome to nginx là gì
- loi nginx là gì
- rewrite nginx là gì
- nginx plus là gì
- nginx download
Nội dung liên quan:
- Tag là gì? Vai trò đặc biệt của tag đối với website và facebook ra sao?
- Kiến thức Apache và hướng dẫn cài đặt chi tiết nhất
- Mạng Internet là gì? Những lợi ích của internet trong cuộc sống
Pingback: Mai Linh