Get 50% Discount Offer 26 Days

Nginx là gì? Cách cài đặt, cấu hình và sử dụng Nginx

Nginx là gì? Cách cài đặt, cấu hình và sử dụng Nginx

NGINX là một trong những web server và reverse proxy phổ biến nhất hiện nay, được sử dụng rộng rãi trong các hệ thống website lớn với lượng truy cập cao. Nhờ kiến trúc đơn giản, hiệu năng vượt trội và khả năng mở rộng linh hoạt, NGINX trở thành lựa chọn hàng đầu cho nhiều doanh nghiệp và tổ chức. Bài viết này sẽ giúp bạn hiểu rõ hơn về NGINX, cách thức hoạt động, cài đặt và cấu hình cơ bản của web server này.

NGINX là gì?

NGINX (đọc là “engine-x”) là một phần mềm web server mã nguồn mở, đồng thời cũng là một reverse proxy, load balancer và HTTP cache. NGINX được thiết kế để giải quyết các vấn đề về hiệu suất và khả năng mở rộng của các web server truyền thống như Apache. Với kiến trúc dựa trên sự kiện (event-driven) không đồng bộ, NGINX có thể xử lý hàng nghìn kết nối đồng thời với mức tiêu tốn tài nguyên thấp.

Không giống như Apache sử dụng kiến trúc đa luồng (multi-thread), NGINX sử dụng kiến trúc đơn luồng (single-thread) với nhiều worker processes. Mỗi worker process có thể xử lý hàng nghìn kết nối đồng thời, giúp tối ưu hóa việc sử dụng CPU và RAM. NGINX cũng hỗ trợ cơ chế bất đồng bộ (asynchronous) khi xử lý I/O, cho phép các worker process không bị block bởi các tác vụ chậm như đọc file hay kết nối tới database.

NGINX được sử dụng chủ yếu làm web server để phục vụ nội dung tĩnh như HTML, CSS, JavaScript và hình ảnh. Bên cạnh đó, NGINX cũng thường được triển khai như một reverse proxy đứng trước các web server khác như Apache hay Node.js.

NGINX là gì?
NGINX là gì?

Lịch sử hình thành và phát triển của NGINX

NGINX được tạo ra vào năm 2002 bởi Igor Sysoev, một lập trình viên người Nga. Ban đầu, NGINX được phát triển như một giải pháp cho vấn đề C10k – xử lý 10.000 kết nối đồng thời trên một server. Vào thời điểm đó, Apache đang là web server thống trị thị trường nhưng gặp khó khăn trong việc xử lý lượng kết nối lớn.

Năm 2004, phiên bản đầu tiên của NGINX được phát hành dưới giấy phép BSD. Phiên bản này mới chỉ hỗ trợ HTTP và tính năng reverse proxy cơ bản. Trong những năm tiếp theo, Igor tiếp tục phát triển và bổ sung nhiều tính năng mới cho NGINX như FastCGI caching, SSL, gzip nén, rewrite URL, IPv6 và WebSocket.

Năm 2011, công ty NGINX Inc. được thành lập để cung cấp các dịch vụ thương mại và hỗ trợ cho NGINX. Cùng năm đó, NGINX Plus ra đời – phiên bản thương mại của NGINX với nhiều tính năng bổ sung. Đến năm 2013, NGINX đạt cột mốc 100 triệu website sử dụng, chiếm khoảng 15% thị phần máy chủ web toàn cầu.

Trong những năm gần đây, NGINX tiếp tục phát triển mạnh mẽ. Phiên bản ổn định mới nhất 1.20.1 được phát hành vào tháng 7 năm 2021, bổ sung hỗ trợ cho HTTP/2 server push, xuất request body ra file, timeouts cho SSL handshake… NGINX Unit, một module mới hỗ trợ chạy nhiều ứng dụng với các ngôn ngữ khác nhau, cũng được giới thiệu.

Lịch sử hình thành và phát triển của NGINX
Lịch sử hình thành và phát triển của NGINX

Cách thức hoạt động của NGINX như thế nào?

NGINX hoạt động dựa trên kiến trúc hướng sự kiện (event-driven) không đồng bộ để xử lý các request từ client. Không giống như Apache sử dụng mô hình đa luồng (multi-thread), tạo một thread riêng cho mỗi kết nối, NGINX sử dụng ít thread (thường là 1-4) nhưng có thể xử lý cùng lúc hàng nghìn kết nối.

Khi NGINX được khởi động, nó sẽ tạo ra một số worker processes tùy cấu hình. Mỗi worker process chạy trong một single thread và có thể xử lý nhiều kết nối đồng thời nhờ cơ chế multiplexing. Các worker process được quản lý bởi một master process, thực hiện các tác vụ như đọc cấu hình, tạo và duy trì worker processes.

Khi có một request đến, NGINX sẽ sử dụng một trong các worker process rảnh rỗi để xử lý. Worker process nhận request sẽ trích xuất thông tin từ header như method, URI, tìm file cấu hình (virtual host) phù hợp rồi thực hiện các tác vụ được chỉ định như rewrite URL, chuyển request đến backend, trả về nội dung tĩnh…

Trong quá trình này, nếu cần thực hiện các tác vụ I/O, worker process sẽ sử dụng cơ chế bất đồng bộ để ủy thác và chuyển sang xử lý các request khác thay vì phải chờ hoàn tất. Khi tác vụ I/O hoàn thành, hệ thống sẽ thông báo lại cho worker process để hoàn tất xử lý request.

Kiến trúc event-driven, non-blocking I/O cùng việc sử dụng ít thread giúp NGINX có thể xử lý rất nhiều kết nối đồng thời với tài nguyên hạn chế. Mỗi worker process thường chỉ chiếm khoảng 2-4MB RAM không phụ thuộc vào số lượng kết nối đang mở, cho phép mở rộng hệ thống dễ dàng.

Cách thức hoạt động của NGINX
Cách thức hoạt động của NGINX

Các tính năng nổi bật của NGINX 

NGINX được biết đến với nhiều tính năng ưu việt, đáp ứng đa dạng nhu cầu triển khai website và ứng dụng. Dưới đây là một số tính năng nổi bật của NGINX.

Các tính năng của máy chủ Web và HTTP NGINX

  • Phục vụ nội dung tĩnh: NGINX hỗ trợ phục vụ nội dung tĩnh như HTML, hình ảnh, CSS, JavaScript một cách nhanh chóng và hiệu quả nhờ việc sử dụng bộ đệm (cache) và nén Gzip. NGINX cũng có thể phân phối nội dung tĩnh từ nhiều backend server khác nhau dựa trên URL, tăng khả năng mở rộng của hệ thống.
  • Hỗ trợ mạnh mẽ cho các chuẩn giao thức: NGINX tích hợp hỗ trợ cho các chuẩn giao thức web phổ biến như HTTP/1.x, HTTP/2, WebSocket, FastCGI, gRPC, SCGI và uwsgi. Các module này cho phép giao tiếp và xử lý hiệu quả các request sử dụng những giao thức trên, đặc biệt khi kết hợp với bộ nhớ cache để tối ưu hiệu năng.
  • Cân bằng tải và failover: NGINX có thể hoạt động như một bộ cân bằng tải (load balancer) để phân phối các request tới một nhóm các backend server tương tự. NGINX hỗ trợ nhiều thuật toán cân bằng tải như Round Robin, Least Connections, IP Hash… đồng thời có các cơ chế health check, session persistence, slow start giúp hệ thống hoạt động ổn định hơn. Ngoài ra, khi một backend server gặp sự cố, NGINX có thể tự động loại bỏ server đó ra khỏi nhóm và chuyển request sang các server còn lại (failover).
  • Bảo mật nâng cao: NGINX tích hợp sẵn các tính năng bảo mật quan trọng như hỗ trợ mã hóa SSL/TLS, giới hạn tỷ lệ request (rate limit), xác thực truy cập cơ bản và Digest, lọc request dựa trên địa chỉ IP. Khi hoạt động như reverse proxy, NGINX cũng có thể ẩn địa chỉ IP và cấu trúc mạng nội bộ, hạn chế khả năng tấn công trực tiếp từ bên ngoài.

Các tính năng của máy chủ Mail Proxy

Bên cạnh việc đảm nhiệm vai trò máy chủ web, NGINX còn có thể được cấu hình để làm mail proxy server với nhiều tính năng hữu ích:

  • Hỗ trợ các giao thức mail chuẩn: NGINX hỗ trợ đầy đủ các giao thức gửi/nhận mail chính như SMTP, IMAP, POP3. Nó có thể hoạt động như một MTA (Mail Transfer Agent) để chấp nhận các kết nối SMTP đến và chuyển tiếp thư đi, hoặc như một email proxy để kết nối tới các backend server như Postfix, Exim, Exchange.
  • Hỗ trợ xác thực người dùng linh hoạt: NGINX cung cấp nhiều phương thức xác thực mail client như xác thực cơ bản qua HTTP, xác thực SSL/TLS với chứng thư số, hay xác thực SASL. Thông tin xác thực có thể được lấy từ nhiều nguồn như file cấu hình, cơ sở dữ liệu MySQL/PostgreSQL, hay thông qua giao tiếp với hệ thống xác thực tập trung như Kerberos, LDAP.
  • Kiểm soát truy cập và bảo mật: NGINX cho phép thiết lập các quy tắc kiểm soát truy cập linh hoạt dựa trên IP hoặc tên miền. Các kết nối đến có thể bị giới hạn dựa trên số lượng kết nối đồng thời, tổng số kết nối trong một khoảng thời gian, hay tốc độ kết nối tối đa. NGINX cũng có thể tích hợp với hệ thống chống spam như SpamAssassin, Rspamd để lọc nội dung thư trước khi chuyển tiếp.
  • Chuyển tiếp email linh hoạt: NGINX hỗ trợ định tuyến email linh hoạt dựa trên các tiêu chí như người nhận, người gửi, hay nội dung thư. Email có thể được chuyển tiếp tới các server nội bộ khác nhau dựa trên tên miền người nhận (ví dụ tất cả email tới @example.com chuyển tới Postfix, email tới @example.net chuyển tới Exchange). NGINX cũng có thể sử dụng các danh sách trắng/đen để chỉ cho phép hoặc chặn chuyển tiếp thư từ các địa chỉ xác định.
Các tính năng nổi bật của NGINX 
Các tính năng nổi bật của NGINX

Lợi ích của NGINX và NGINX Plus mang lại

Dưới đây là những lợi ích chính mà NGINX và phiên bản thương mại NGINX Plus mang lại:

  • Hiệu suất cao, tối ưu tài nguyên: Nhờ kiến trúc event-driven và cơ chế đơn luồng, NGINX có thể xử lý hàng nghìn request đồng thời với CPU và bộ nhớ thấp. Khả năng phục vụ nội dung tĩnh và cache đáp ứng giúp tăng tốc độ tải trang và giảm tải cho backend server. Các tính năng nén Gzip, cân bằng tải và điều phối request cũng góp phần nâng cao hiệu năng tổng thể.
  • Khả năng mở rộng tốt: NGINX được tối ưu để mở rộng theo chiều ngang (scale out) bằng cách thêm nhiều server vào cụm và chia sẻ tải giữa chúng. Tất cả các tiến trình NGINX có thể được cấu hình để chia sẻ một file cấu hình chung và tự động tải lại khi có thay đổi. NGINX cũng hỗ trợ mở rộng theo chiều dọc (scale up) bằng cách tăng tài nguyên phần cứng của server vì nó sử dụng tài nguyên một cách hiệu quả.
  • Độ tin cậy và ổn định cao: NGINX có kiến trúc module hóa và mã nguồn được tối ưu để hạn chế lỗi bảo mật và crash. Các worker process chạy độc lập với nhau và khởi động lại nếu bị lỗi mà không ảnh hưởng đến toàn hệ thống. NGINX cũng có khả năng chịu lỗi (fault-tolerant) khi làm load balancer vì nó sẽ tự động loại bỏ các backend server gặp sự cố ra khỏi cụm.
  • Cấu hình đơn giản và linh hoạt: NGINX sử dụng ngôn ngữ cấu hình chuyên biệt dễ đọc, dễ hiểu. Một file cấu hình duy nhất gồm nhiều khối (block) lồng nhau cho phép tái sử dụng và bố trí cấu hình một cách logic. NGINX hỗ trợ tách file cấu hình thành nhiều file bổ sung nhau để dễ quản lý. Các tham số cấu hình được mô tả rõ ràng và đầy đủ trong tài liệu.
  • Cộng đồng hỗ trợ lớn, phát triển liên tục: Là một dự án mã nguồn mở phổ biến, NGINX có một cộng đồng hỗ trợ lớn bao gồm người dùng và nhà phát triển. Nhiều module mở rộng, plugin và công cụ bổ sung liên tục được chia sẻ và cải tiến. NGINX cũng được tích hợp sẵn trong nhiều bản phân phối Linux và stack ứng dụng phổ biến, giúp đơn giản hóa quá trình triển khai.
  • NGINX Plus – phiên bản thương mại với nhiều tính năng nâng cao: Ngoài phiên bản cộng đồng miễn phí, NGINX còn cung cấp phiên bản thương mại là NGINX Plus. NGINX Plus bổ sung thêm nhiều tính năng như cân bằng tải nâng cao, truy vấn DNS động, mở rộng hệ thống một cách linh động, giám sát và quản lý tập trung. Bên cạnh đó, khách hàng của NGINX Plus nhận được hỗ trợ kỹ thuật trực tiếp từ đội ngũ phát triển và đảm bảo các bản vá lỗi, cập nhật bảo mật nhanh chóng.
Lợi ích của NGINX và NGINX Plus mang lại
Lợi ích của NGINX và NGINX Plus mang lại

So sánh sự khác biệt giữa Apache Server và NGINX Server

Apache và NGINX là hai web server phổ biến nhất hiện nay. Dưới đây là điểm khác biệt giữa Apache và NGINX trên một số khía cạnh quan trọng:

Tương thích hệ điều hành

  • Apache là phần mềm đa nền tảng, hỗ trợ cả hệ điều hành Windows và các biến thể Unix/Linux. Điều này mang lại sự linh hoạt khi triển khai trên các môi trường khác nhau.
  • Mặt khác, NGINX chỉ tương thích tốt với các hệ điều hành họ Unix như Linux, FreeBSD, MacOS. Nếu muốn chạy NGINX trên Windows, bạn cần cài đặt phiên bản hỗ trợ riêng hoặc sử dụng môi trường giả lập Unix như Cygwin.

Cộng đồng người dùng và hỗ trợ

  • Ra đời từ năm 1995, Apache đã phát triển một cộng đồng người dùng lâu đời và đông đảo nhất. Điều này đồng nghĩa với việc Apache có nhiều tài liệu hướng dẫn, sách báo phong phú, cũng như vô số các module và extension do cộng đồng đóng góp. Sự hỗ trợ từ cộng đồng giúp việc tìm kiếm thông tin và xử lý vấn đề dễ dàng hơn.
  • Trong khi đó, NGINX tuy ra mắt muộn hơn (năm 2004) nhưng cộng đồng người dùng đang tăng trưởng rất nhanh chóng. Số lượng module do cộng đồng phát triển không nhiều bằng Apache, song chất lượng và tính ổn định được đánh giá cao. NGINX cũng cung cấp tài liệu hướng dẫn chi tiết và diễn đàn hỗ trợ riêng.

Hiệu năng và khả năng mở rộng

  • NGINX nổi trội trong việc xử lý lượng request lớn nhờ kiến trúc event-driven. Nó tiêu tốn ít tài nguyên để xử lý hàng nghìn kết nối đồng thời và xử lý rất nhanh các tác vụ I/O. Khả năng cache và phục vụ nội dung tĩnh tối ưu cũng là điểm mạnh của NGINX. Với những ưu điểm trên, NGINX phù hợp để xây dựng các hệ thống lớn như CDN, web portal, web API.
  • Trong khi đó, Apache với kiến trúc multi-thread lại thực sự vượt trội trong việc xử lý nội dung động như PHP hay kết nối database. Với cùng một cấu hình phần cứng, Apache thường cho thời gian phản hồi nhanh hơn khi chạy các ứng dụng web động. Triết lý thiết kế của Apache cũng hướng tới việc tích hợp chặt chẽ và mở rộng dễ dàng hơn.
So sánh sự khác biệt giữa Apache Server và NGINX Server
So sánh sự khác biệt giữa Apache Server và NGINX Server

Hướng dẫn cách cài đặt NGINX

Dưới đây là các bước cài đặt NGINX trên một số hệ điều hành phổ biến:

  • Trên Ubuntu/Debian:

bash

sudo apt update

sudo apt install nginx

  • Trên CentOS/RHEL 7:

bash

sudo yum install epel-release

sudo yum install nginx

  • Kiểm tra phiên bản sau khi cài đặt:

bash

nginx -v

NGINX sẽ được cài đặt dưới dạng một service và tự động khởi chạy. Bạn có thể kiểm tra bằng cách mở trình duyệt và truy cập địa chỉ IP của server. Nếu thấy trang Welcome to NGINX thì việc cài đặt đã thành công.

Hướng dẫn cách cấu hình NGINX chi tiết

File cấu hình chính của NGINX nằm tại /etc/nginx/nginx.conf. Bạn có thể mở và chỉnh sửa file này để thay đổi cấu hình global áp dụng cho tất cả các website.

Để cấu hình một website cụ thể, bạn tạo một file cấu hình nằm trong thư mục /etc/nginx/conf.d/ hoặc /etc/nginx/sites-available/. Ví dụ, để thêm website mới tên example.com, tạo một file /etc/nginx/conf.d/example.com.conf với nội dung:

server {

  listen 80;

  server_name example.com;

  access_log /var/log/nginx/example.com.access.log;

  error_log /var/log/nginx/example.com.error.log;

  location / {

    root /var/www/example.com;

    index index.html;

  }

}

Giải thích một số chỉ thị cấu hình chính:

  • listen: Xác định cổng và giao thức (HTTP/HTTPS) mà NGINX lắng nghe. Mặc định là cổng 80 cho HTTP.
  • server_name: Xác định tên miền mà NGINX áp dụng cấu hình này.
  • access_log, error_log: Đường dẫn đến log ghi lại request và lỗi của website.
  • location: Xác định cách xử lý request tới một URL cụ thể. Khối cấu hình bên trong áp dụng cho các request khớp mẫu URL.
  • root: Đường dẫn thư mục gốc chứa mã nguồn của website.
  • index: Xác định trang mặc định khi truy cập thư mục.

Sau mỗi lần thay đổi cấu hình, bạn cần kiểm tra lại tính hợp lệ bằng lệnh:

bash

sudo nginx -t

Nếu không có lỗi cú pháp, hãy khởi động lại NGINX để cấu hình có hiệu lực:

bash

sudo systemctl reload nginx

Hướng dẫn cách cấu hình NGINX chi tiết
Hướng dẫn cách cấu hình NGINX chi tiết

Hướng dẫn cách cấu hình HTTPS trong NGINX

Để cấu hình HTTPS, bạn cần có một chứng chỉ SSL hợp lệ cho tên miền của mình. Cách đơn giản nhất để lấy chứng chỉ SSL miễn phí là sử dụng dịch vụ Let’s Encrypt và công cụ Certbot.

Trên Ubuntu/Debian, cài đặt Certbot bằng lệnh:

bash

sudo apt install certbot python3-certbot-nginx

Sau đó chạy lệnh sau để tự động tạo chứng chỉ SSL và cấu hình HTTPS cho một tên miền:

bash

sudo certbot –nginx -d example.com

Thay example.com bằng tên miền thực tế của bạn. Certbot sẽ tự tìm file cấu hình NGINX chứa tên miền này, thêm vào đó các chỉ thị để tải chứng chỉ SSL và chuyển hướng HTTP sang HTTPS.

Đồng thời, Certbot cũng tạo một cronjob tự động chạy mỗi 60 ngày để gia hạn chứng chỉ trước khi hết hạn. Bạn không cần phải lo lắng về việc gia hạn thủ công.

Hướng dẫn cách khởi động NGINX

Để khởi động NGINX, sử dụng lệnh:

bash

sudo systemctl start nginx

Để dừng NGINX:

bash

sudo systemctl stop nginx

Để khởi động lại NGINX:

bash

sudo systemctl restart nginx

Để tự động khởi động NGINX mỗi khi hệ thống boot:

bash

sudo systemctl enable nginx

Bạn cũng có thể kiểm tra trạng thái của tiến trình NGINX:

bash

sudo systemctl status nginx

Hướng dẫn cách khởi động NGINX
Hướng dẫn cách khởi động NGINX

Hướng dẫn cách sử dụng NGINX để Load Balancer

NGINX có thể được cấu hình làm load balancer để phân phối các request tới nhiều backend server. Giả sử bạn có 2 máy chủ web chạy Apache tại địa chỉ 10.0.0.1 và 10.0.0.2. Để sử dụng NGINX làm load balancer cho 2 máy chủ này, thêm đoạn cấu hình sau vào khối http trong file nginx.conf:

http {

  upstream backend {

    server 10.0.0.1;

    server 10.0.0.2;

  }

  server {

    listen 80;

server_name example.com;

location / {

  proxy_pass http://backend;

}

} }

Giải thích cấu hình trên:

  • Khối “upstream” định nghĩa một nhóm các máy chủ có tên là “backend”, gồm 2 máy chủ 10.0.0.1 và 10.0.0.2. 
  • Khối “server” định nghĩa một virtual host lắng nghe trên cổng 80 và áp dụng cho tên miền “example.com”.
  • Chỉ thị “proxy_pass” trong khối “location” chuyển tất cả request tới nhóm backend server vừa định nghĩa.
  • Mặc định, NGINX sử dụng thuật toán Round Robin để chia đều request cho các backend server. Bạn có thể thay đổi thuật toán cân bằng tải bằng các chỉ thị như “least_conn”, “ip_hash”…

Để kiểm tra cấu hình và khởi động lại NGINX:

bash

sudo nginx -t

sudo systemctl reload nginx

Từ giờ, các request tới example.com sẽ được NGINX phân phối đều cho 2 backend server. Nếu một server gặp sự cố, NGINX sẽ tự loại bỏ server đó khỏi nhóm cho tới khi nó hoạt động lại bình thường.

Hướng dẫn cách kiểm tra NGINX trên Website

Để kiểm tra xem NGINX có đang chạy trên website của bạn hay không, hãy sử dụng lệnh curl như sau:

bash

curl -I http://example.com

Thay example.com bằng tên miền thực tế. Nếu NGINX đang hoạt động, kết quả trả về sẽ bao gồm dòng header Server chứa phiên bản NGINX, ví dụ:

HTTP/1.1 200 OK

Server: nginx/1.20.1

Ngoài ra, bạn cũng có thể kiểm tra trong trình duyệt web bằng cách mở trang web và xem HTTP header trong phần Developer Tools (bấm F12 hoặc Ctrl+Shift+I tùy trình duyệt). Trong tab Network, click vào file HTML chính và xem phản hồi từ server trong tab Headers để tìm trường Server.

Hướng dẫn cách kiểm tra NGINX trên Website
Hướng dẫn cách kiểm tra NGINX trên Website

Tổng kết

NGINX đang trở thành một thành phần không thể thiếu trong hạ tầng website hiện đại. Để triển khai NGINX một cách hiệu quả, đòi hỏi quá trình tìm hiểu, thử nghiệm và tối ưu liên tục. Một đối tác đáng tin cậy sẽ giúp bạn tiết kiệm thời gian và công sức trong hành trình này.

EzVPS chuyên cung cấp dịch Vụ Cloud VPS Windows, Linux, Hosting Cpanel và Máy Chủ Riêng chất lượng cao, tích hợp sẵn NGINX và các công cụ thiết yếu. Đội ngũ kỹ sư giàu kinh nghiệm của EzVPS sẵn sàng đồng hành để đảm bảo tính sẵn sàng cao và hiệu năng tối ưu cho hệ thống website/app của bạn.

Hãy gọi 0965800822 ngay hôm nay để có một hệ thống VPS hay Hosting tốc độ vượt trội với NGINX, cùng sự tư vấn, hỗ trợ kỹ thuật tận tình từ EzVPS. Website https://ezvps.vn/

Xem thêm:

Share this post