Hosting - Server

NGINX là gì? Hướng dẫn cài đặt và cấu hình NGINX

Cập nhật lần cuối:
NGINX là gì?

NGINX là gì? hay NGINX server là gì? Đây là câu hỏi mà các lập trình viên, admin hệ thống hay DevOps mới vào nghề không khỏi băn khoăn. NGINX – công cụ không thể thiếu khi làm web để đạt được hiệu năng cao. Cùng Puramu tìm hiểu về NGINX trong bài viết dưới đây nhá!

Cách đọc NGINX

Trước khi tìm hiểu NGINX là gì, chúng ta cùng xem qua cách đọc của nó nhé! Puramu chắc hẳn nếu đây là lần đầu bạn biết đến NGINX, bạn sẽ không biết đọc như thế nào cho đúng. Đọc là “Nghin x”? Không phải đâu! Cách đọc NGINX sẽ là: “engine x”. Nếu bạn vẫn chưa hình dung ra cách đọc thì đây là phiên âm của nó: /ˈen.dʒɪn.’eks/

NGINX là gì?

NGINX là phần mềm máy chủ web mã nguồn mở miễn phí có hiệu suất cao, khả năng mở rộng cao, mức độ sẵn sàng cao và sự ổn định tối đa. Hơn 350 triệu trang web trên toàn thế giới sử dụng NGINX để truyền tải nội dung nhanh chóng và an toàn hơn. Các công ty nổi tiếng trên thế giới như Airbnb, Microsoft, LinkedIn, Facebook, Google, Adobe, Dropbox, Netflix, Tumblr, WordPress.com, Twitter, Apple , Intel,… đang sử dụng NGINX.

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

NGINX ban đầu được tạo ra để giải quyết vấn đề máy chủ web lúc bấy giờ gặp phải khi xử lý số lượng lớn (10K) các kết nối đồng thời. NGINX đã cách mạng hoá cách máy chủ hoạt động và trở thành máy chủ web nhanh nhất tại thời điểm đó. Ngày nay, NGINX và NGINX plus (sản phẩm nâng cao và tốn phí) có thể xử lý hàng trăm nghìn kết nối đồng thời. NGINX hiện nay là một trong những máy chủ web phổ biến nhất trên thế giới, đặc biệt là cho các trang web có lượng truy cập lớn.

NGINX thực hiện nhiệm vụ phục vụ web động và tĩnh, HTTP caching, media streaming, mail proxy, proxy ngược (reverse proxy) và trình cân bằng tải. Vì NGINX có thể thực hiện nhiều chức năng nên bạn sẽ không phải cài quá nhiều thứ vào web của mình, giúp tiết kiệm không gian và tài nguyên hơn.

Các tính năng của NGINX

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

  • Có thể xử lý hơn 10.000 kết nối cùng lúc với bộ nhớ thấp (~2.5MB mỗi 10k kết nối HTTP không hoạt động).
  • Có thể xử lý file tĩnh, file index và tự động lập chỉ mục.
  • 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 tốt.
  • Kiến trúc modular, tăng tốc độ nạp trang bằng nén gzip tự động.
  • Hỗ trợ mã hoá TLS/SSL với SNI và OCSP thông qua OpenSSL.
  • Hỗ trợ tăng tốc với bộ nhớ đệm của FastCGI, uWSGI, SCGI, và các máy chủ memcached.
  • Hỗ trợ gPRC.
  • Máy chủ ảo hoạt động dựa trên tên và địa chỉ IP.
  • Cấu hình linh hoạt; lưu lại nhật ký truy vấn.
  • Sử dụng regular expressions viết lại URL và chuyển hướng lỗi 3XX-5XX.
  • 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, bao gồm hoạt động như một proxy ngược và thực hiện cân bằng tải cho các ứng dụng WebSocket.
  • Nâng cấp giao thức HTTP/1.1, hỗ trợ giao thức HTTP/2 và mới nhất là HTTP/3.
  • Hỗ trợ truyền tải file FLV và MP4.
  • Hỗ trợ phát trực tuyến nhiều định dạng video (HDS, HLS, RTMP và các định dạng khác).

Các tính năng của Mail proxy

NGINX Mail Proxy
NGINX Mail Proxy

Chứa các phương thức xác thực sau:

  • POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
  • IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
  • SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
  • Hỗ trợ TLS/SSL, STARTTLS và STLS
  • Yêu cầu xác thực bằng máy chủ HTTP bên ngoài hoặc bằng các tập lệnh xác thực

So sánh cách hoạt động của NGINX với máy chủ web thông thường

Với máy chủ web thông thường: Khi người dùng gửi yêu cầu truy vấn, máy chủ sẽ truy xuất nội dung được yêu cầu và trả kết quả đến trình duyệt. Các máy chủ web tạo một luồng duy nhất cho mọi yêu cầu. Do đó, nó chỉ có thể xử lý một yêu cầu tại một thời điểm và xử lý tuần tự từng yêu cầu.

Máy chủ web NGINX sử dụng kiến trúc hướng sự kiện, không đồng bộ cho phép các yêu cầu được xử lý trong một luồng duy nhất. Mỗi yêu cầu có thể được thực thi đồng thời mà không chặn các yêu cầu khác. Vì thế, các yêu cầu được xử lý nhanh gọn và trơn tru hơn. Chính vì yếu tố đó mà NGINX rất thích hợp với trang web có lượng truy cập lớn, yêu cầu hiệu suất cao và thời gian phản hồi nhanh. Điển hình như các trang web thương mại điện tử, công cụ tìm kiếm,…

Ưu điểm và nhược điểm của NGINX

Ưu điểm của NGINX

Ưu điểm của NGINX. Nguồn: cloudsigma.com
Ưu điểm của NGINX. Nguồn: cloudsigma.com
  • NGINX cung cấp cơ chế bộ nhớ đệm tốt hơn các máy chủ khác. Hiệu suất của ứng dụng sẽ được tăng lên khi người dùng truy cập cùng một địa chỉ trong một khoảng thời gian ngắn.
  • NGINX có hiệu suất tốt. Nó có thể xử lý một lượng lớn kết nối đồng thời mà không làm giảm hiệu năng.
  • Tính ổn định là một trong những thế mạnh của NGINX. Nó có thể hoạt động liên tục trong một thời gian dài mà hiếm gặp bất kỳ sự cố nào.
  • NGINX có thể được cấu hình một cách linh hoạt để đáp ứng các yêu cầu cụ thể. Ngoài ra, nó còn có khả năng mở rộng lớn để đáp ứng lưu lượng truy cập tăng cao.
  • NGINX là máy chủ web dung lượng nhẹ thực hiện nhiệm vụ chuyển tiếp các yêu cầu người dùng đến máy chủ ứng dụng.
  • Quy tắc ghi lại của NGINX giúp định cấu hình chuyển hướng vĩnh viễn hoặc chuyển hướng tạm thời cho một số URL linh hoạt hơn.
  • NGINX hoạt động tốt nhất với vai trò máy chủ proxy giao diện người dùng cho bất kỳ ứng dụng nào.
  • NGINX chứa thư mục tùy chỉnh hay máy chủ ngược dòng proxy nên có thể dễ dàng tùy chỉnh và phân phối qua HTTPS.
  • NGINX luôn phát triển nên website sử dụng NGINX sẽ luôn ở mức hiệu suất cao nhất.

Nhược điểm của NGINX

  • NGINX có thể thực hiện cân bằng tải nhưng vẫn cần phải cải thiện hơn nữa.
  • Một số người có thể gặp khó khăn trong việc cấu hình NGINX. NGINX thiếu sự linh hoạt trong việc định cấu hình trong nhiều tình huống.
  • Cơ chế lưu trữ, cung cấp các lệnh để có được các bản ghi mong muốn chưa tốt.
  • Mặc dù NGINX có một cộng đồng sử dụng lớn nhưng số lượng tài liệu hỗ trợ và giải pháp có sẵn lại hạn chế.

Cách cài đặt NGINX

NGINX là web server hỗ trợ nhiều nền tảng khác nhau, bao gồm Linux, Windows và MacOS. Điều này đồng nghĩa với cách cài đặt có thể sẽ khác nhau tuỳ theo nền tảng mà bạn đang sử dụng là gì.

Cách cài đặt NGINX. Nguồn: linuxiac.com
Cách cài đặt NGINX. Nguồn: linuxiac.com

Thật không may, để tránh bài viết này quá dài Puramu chỉ có thể hướng dẫn các bạn cài đặt NGINX trên nền tảng Linux mà thôi. Với các nền tảng khác các bạn có thể tham khảo tài liệu của NGINX.

Cài đặt NGINX khá đơn giản. Đối với các hệ thống dựa trên Linux, trước tiên bạn cần cập nhật danh sách gói của mình để nâng cấp và cài đặt gói mới. Sau đó, bạn có thể cài đặt NGINX bằng trình quản lý gói tuỳ theo phiên bản Linux của mình.

Đối với Ubuntu và Debian:

sudo apt-get update
sudo apt-get install nginx

Đối với CentOS and RHEL:

sudo yum update
sudo yum install nginx

Sau khi cài đặt xong, bạn khởi động NGINX bằng cách chạy câu lệnh sau:

sudo service nginx start

Đừng quên kiểm tra xem tường lửa trên hệ thống của bạn có đang cho phép các lượt truy cập đến NGINX không nhé!

Cấu hình NGINX

Ngay sau khi cài đặt thành công NGINX trên hệ thống của bạn. Bạn có thể thấy tập tin cấu hình chính của NGINX tại đường dẫn /etc/nginx/nginx.conf. Hầu hết các phiên bản Linux đều có tập tin cấu hình NGINX tại đây.

Bạn có thể cấu hình NGINX tuỳ theo những nhu cầu cụ thể của mình bằng cách chỉnh sửa tập tin cấu hình này. Dưới đây là hướng dẫn giúp bạn có thể cấu hình server NGINX để chạy một website:

Bước 1: Tạo khối máy chủ cho trang web

Trước tiên, bạn cần tạo một khối máy chủ cho trang web của mình. Khối này sẽ chỉ định các chi tiết về trang web của bạn như: tên miền và thư mục gốc nơi đặt các tệp trang web của bạn. Mở một tệp cấu hình mới trong thư mục /etc/nginx/sites-available:

sudo nano /etc/nginx/sites-available/puramu.com

Thay puramu.com bằng tên miền website của bạn.

Bước 2: Cấu hình khối máy chủ

Trong khối máy chủ, bạn chỉ định các chi tiết về trang web.

server {
    listen 80;
    server_name puramu.com www.puramu.com;

    location / {
        root /var/www/puramu.com;
        index index.html;
        try_files $uri $uri/ =404;
    }
}

Trong ví dụ này bạn cần chú ý thay đổi puramu.com thành tên miền của bạn. Các ý nghĩa các chỉ mục đó như sau:

  • Mục /var/www/puramu.com sẽ là đường dẫn tới thư mục chứa website của bạn.
  • Mục index dùng để xác định file nào sẽ được trả về khi nhận được yêu cầu từ người dùng.
  • Mục try_files sẽ xác định thứ tự ưu tiên của các dữ liệu được trả về từ NGINX.

Lưu lại cấu hình cho khối máy chủ và tiến tới bước tiếp theo.

Bước 3: Kích hoạt khối máy chủ

Sau khi hoàn tất cấu hình cho khối máy chủ, chúng ta cần kích hoạt nó để nó có thể hoạt động được. Chúng ta sẽ kích hoạt bằng cách tạo một liên kết tượng trưng cho tập tin vừa tạo tại thư mục sites-available đến thư mục sites-enabled

sudo ln -s /etc/nginx/sites-available/puramu.com /etc/nginx/sites-enabled/

Bước 4: Kiểm thử cấu hình

Trước khi khởi động lại NGINX, tốt nhất bạn nên kiểm thử cấu hình để đảm bảo tập tin cấu hình không gặp lỗi gì:

sudo nginx -t

Nếu kiểm tra cấu hình thành công, bạn sẽ thấy thông báo rằng cấu hình vẫn ổn. Nếu có vấn đề, NGINX sẽ hiện một thông báo cho biết có vấn đề gì.

Bước 5: Khởi động lại NGINX

Cuối cùng bạn cần khỏi động lại NGINX để tập tin cấu hình có hiệu lực:

sudo systemctl reload nginx

Giờ bạn có thể truy cập vào tên miền trên trình duyệt của mình. Bạn sẽ thấy NGINX đang trả về tập tin index.html như đã cấu hình bên trên.

Lưu ý: Đây chỉ là một ví dụ đơn giản để có thể cấu hình NGINX chạy một website. Tuỳ theo nhu cầu của bạn mà bạn có thể cấu hình thêm SSL hoặc thêm các mục khác vào khối máy chủ của mình như location để có thể phân chia xử lí các nhu cầu cho phù hợp hoặc error_page để có thể tạo được các trang hiển thị lỗi tuỳ chỉnh. Các thông tin này được liệt kê đầy đủ trên document của NGINX. Bạn có thể tham khảo bất cứ lúc nào.

Tổng kết

Trên đây là một số thông tin xoay quanh khái niệm NGINX là gì và cách cài đặt, cấu hình NGINX. NGINX là công cụ quan trọng giúp trang web đạt được hiệu suất cao. NGINX có thể xử lý hàng ngàn yêu cầu trên mỗi máy chủ trong một khoảng thời gian ngắn. Điều đó góp phần sử dụng bộ nhớ thấp, băng thông tốt hơn, tiêu thụ ít CPU và RAM hơn cũng như môi trường xanh hơn. Hãy thử sử dụng NGINX cho trang web của bạn và xem sự khác biệt về hiệu suất và tính ổn định mà nó mang lại nhé!

Quốc Huy
Viết bởiQuốc Huy

Chào các bạn! Gọi mình là Huy nhé! Huy hiện đang là CEO của công ty Puramu. Với niềm đam mê lập trình từ sớm, mình đã nghiên cứu và tự học lập trình từ năm 2016. Sau nhiều năm làm việc, mình đã thực hiện các dự án website với nhiều mục đích khác nhau như: tin tức, giới thiệu, booking, thương mại điện tử hay các ứng dụng web. Hy vọng những kiến thức và trải nghiệm mình chia sẻ trên website này sẽ giúp ích cho nhiều bạn.

Bài viết liên quan

Địa chỉ website là gì? Các yếu tố tạo nên địa chỉ website

Địa chỉ website là thứ không thể thiếu trong khâu chuẩn bị làm website. Nhưng địa chỉ website là gì? Tại sao bạn lại cần nó? Bài viết này sẽ phần nào…

Địa chỉ website là gì?
Cập nhật lần cuối:
Cách chỉnh sửa URL trong WordPress

Bạn băn khoăn không biết thay đổi URL trang web WordPress được không? Cách chỉnh sửa URL trong WordPress không ảnh hưởng đến website hiện tại…

Chỉnh sửa url trong web WordPress
Cập nhật lần cuối:
CDN là gì? Top 4 nhà cung cấp CDN uy tín nhất

Nếu bạn đang tìm giải pháp tăng tốc website, tăng hiệu suất và bảo mật cho website thì bài viết này là dành cho bạn. CDN chính là giải pháp đáp ứng…

CDN là gì?
Cập nhật lần cuối:
Chọn WordPress.com hay WordPress.org khi tạo website

Có phải bạn nhận được lời khuyên “nên tạo website bằng WordPress” từ rất nhiều người xung quanh không? Nhưng là WordPress.com hay…

So sánh WordPress.com và WordPress.org
Cập nhật lần cuối: