LEMP Stack là gì? Hướng dẫn cài đặt trên Ubuntu & Windows

LEMP Stack là một trong những bộ công cụ mạnh mẽ và phổ biến nhất hiện nay giúp xây dựng và vận hành các ứng dụng web ổn định, nhanh chóng. Nếu bạn đang tìm kiếm giải pháp tối ưu hiệu suất cho website của mình, LEMP Stack chính là lựa chọn không thể bỏ qua. Trong bài viết này, VinaHost sẽ giúp bạn tìm hiểu LEMP Stack là gì, hướng dẫn chi tiết cách cài đặt và những mẹo tối ưu hiệu suất để website hoạt động mượt mà nhất.

Tóm tắt nhanh về LEMP Stack
  • LEMP Stack là gì? Là bộ phần mềm máy chủ mã nguồn mở gồm Linux, Engine-X (Nginx), MySQL/MariaDB và PHP-FPM, chuyên dùng để vận hành các ứng dụng web hiệu năng cao.
  • Sức mạnh cốt lõi: Nhờ sử dụng web server Nginx với kiến trúc hướng sự kiện (event-driven), LEMP chịu tải vượt trội, giải quyết tốt bài toán hàng ngàn kết nối đồng thời mà tốn rất ít RAM.
  • LEMP vs LAMP: Trong khi LAMP (dùng Apache) thích hợp cho các dự án web nhỏ và dễ cấu hình, thì LEMP lại là lựa chọn tối ưu, mang tính chiến lược cho các website có traffic “khủng” (báo điện tử, thương mại điện tử).
  • Triển khai thực tế: Hướng dẫn cấu hình chuẩn mực qua 4 bước trên Ubuntu (Nginx, MySQL, PHP-FPM, Server Block) và cách sử dụng WSL để chạy môi trường LEMP đồng nhất trên Windows.
  • Vận hành và Bảo mật: Checklist các tác vụ bắt buộc trên môi trường Production (Cài SSL Let’s Encrypt, tối ưu Nginx Caching, ẩn Server Tokens, Rate Limiting) và cách xử lý các mã lỗi phổ biến (502 Bad Gateway, 403 Forbidden).

1. LEMP Stack là gì?

LEMP Stack là bộ công nghệ máy chủ mã nguồn mở (bao gồm Linux, Nginx, MySQL/MariaDB và PHP-FPM) được sử dụng để triển khai các ứng dụng web hiệu suất cao. Thay vì dùng Apache, LEMP sử dụng Nginx làm web server, giúp hệ thống giải quyết tốt bài toán xử lý hàng chục ngàn kết nối đồng thời với mức tiêu thụ RAM cực thấp.

Tên LEMP được ghép từ bốn thành phần chính:

  • L – Linux: Hệ điều hành nền tảng của máy chủ.
  • E – Nginx / Engine-X: Web server tiếp nhận và xử lý request từ người dùng.
  • M – MySQL / MariaDB: Hệ quản trị cơ sở dữ liệu dùng để lưu trữ dữ liệu website.
  • P – PHP-FPM: Thành phần xử lý mã PHP và tạo nội dung động.

Khi hoạt động cùng nhau, Linux cung cấp môi trường vận hành, Nginx tiếp nhận request, PHP-FPM xử lý logic ứng dụng, còn MySQL/MariaDB lưu trữ và truy xuất dữ liệu. Nhờ kiến trúc gọn nhẹ và hiệu năng cao, LEMP Stack thường được sử dụng cho website WordPress, ứng dụng PHP, hệ thống CMS và các website có lượng truy cập lớn.

lemp stack
LEMP Stack là một tập hợp các công nghệ mã nguồn mở được sử dụng để xây dựng và vận hành các ứng dụng web hiện đại

1.1. Linux (L – Hệ điều hành)

Linux (chữ “L” trong LEMP) là hệ điều hành mã nguồn mở, cung cấp môi trường nền tảng để vận hành toàn bộ web server, cơ sở dữ liệu và mã nguồn PHP. Ubuntu và Debian hiện là hai bản phân phối Linux được sử dụng phổ biến nhất cho LEMP nhờ tính bảo mật nghiêm ngặt và quản lý tài nguyên server tối ưu.

Trong mô hình này, Linux chịu trách nhiệm:

  • Quản lý tài nguyên phần cứng của server như CPU, RAM, ổ cứng và mạng.
  • Cung cấp môi trường để Nginx, MySQL/MariaDB và PHP-FPM hoạt động.
  • Đảm bảo hệ thống vận hành ổn định, bảo mật và có thể mở rộng.
  • Hỗ trợ cài đặt, cấu hình và quản lý các dịch vụ web thông qua dòng lệnh.
lemp stack
Linux là hệ điều hành mã nguồn mở, đóng vai trò nền tảng cốt lõi cho toàn bộ LEMP Stack

1.2. Nginx (E – Web Server)

Nginx (phát âm Engine-X, chữ “E” trong LEMP) là máy chủ web sử dụng kiến trúc hướng sự kiện, chịu trách nhiệm tiếp nhận và phân luồng trực tiếp các yêu cầu HTTP/HTTPS. Khác với Apache, Nginx không tạo tiến trình mới cho mỗi kết nối, giúp nó phục vụ nội dung tĩnh siêu tốc và hoạt động hoàn hảo như một Reverse Proxy.

Trong LEMP Stack, Nginx thường đảm nhận các vai trò chính:

  • Tiếp nhận và xử lý các yêu cầu HTTP/HTTPS.
  • Phục vụ nội dung tĩnh như HTML, CSS, JavaScript, hình ảnh.
  • Chuyển các request cần xử lý PHP sang PHP-FPM.
  • Hỗ trợ reverse proxy, load balancing và cache để tăng hiệu năng website.

So với Apache trong LAMP Stack, Nginx thường được đánh giá cao ở khả năng xử lý nhiều kết nối đồng thời với mức tiêu thụ tài nguyên thấp. Điều này khiến kiến trúc LEMP trở thành lựa chọn ưu tiên cho các hệ thống đòi hỏi khắt khe về tốc độ tải trang và khả năng chịu tải vượt trội.

lemp stack
Nginx chịu trách nhiệm tiếp nhận và phân luồng trực tiếp các yêu cầu HTTP/HTTPS

1.3. MySQL / MariaDB (M – Cơ sở dữ liệu)

MySQL hoặc MariaDB (chữ “M” trong LEMP) là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) làm nhiệm vụ lưu trữ, truy xuất và quản lý toàn bộ dữ liệu động của website. Trong thực tế, MariaDB thường được ưu tiên cài đặt thay thế MySQL gốc nhờ tốc độ truy vấn vượt trội và tối ưu hóa tốt hơn cho các truy vấn phức tạp.

Trong LEMP Stack, MySQL/MariaDB có nhiệm vụ:

  • Lưu trữ và quản lý dữ liệu của website hoặc ứng dụng web.
  • Cho phép PHP truy vấn, thêm, sửa, xóa và cập nhật dữ liệu.
  • Tổ chức dữ liệu theo bảng để dễ quản lý và truy xuất.
  • Đảm bảo dữ liệu được xử lý ổn định khi website có nhiều lượt truy cập.

MariaDB thường được xem là lựa chọn thay thế tương thích với MySQL, trong khi vẫn giữ cách sử dụng quen thuộc cho các ứng dụng PHP phổ biến như WordPress, Joomla hoặc Laravel. Bên cạnh đó, MariaDB còn mang lại nhiều cải tiến đáng kể về tốc độ truy vấn cơ sở dữ liệu và tính năng bảo mật tối ưu hơn.

lemp stack
MySQL và MariaDB có nhiệm vụ lưu trữ và quản lý dữ liệu

1.4. PHP-FPM (P – Xử lý nội dung động)

PHP-FPM (FastCGI Process Manager – chữ “P” trong LEMP) là trình quản lý tiến trình chuyên biệt có nhiệm vụ thực thi mã nguồn PHP và sinh ra cấu trúc HTML/JSON để trả về cho người dùng. Việc tách rời Nginx (chỉ lo giao tiếp mạng) và PHP-FPM (chỉ lo xử lý logic backend) chính là chìa khóa cốt lõi giúp kiến trúc LEMP không bị quá tải.

PHP-FPM đảm nhận các nhiệm vụ chính:

  • Thực thi mã PHP của website hoặc ứng dụng web.
  • Xử lý logic động như đăng nhập, gửi form, truy vấn dữ liệu hoặc hiển thị nội dung cá nhân hóa.
  • Kết nối với MySQL/MariaDB để lấy dữ liệu cần hiển thị.
  • Trả kết quả đã xử lý về cho Nginx để gửi lại trình duyệt người dùng.
lemp stack
PHP-FPM là thành phần xử lý nội dung động trong LEMP Stack

2. Kiến trúc hoạt động của LEMP Stack

Kiến trúc LEMP Stack hoạt động theo mô hình giao tiếp độc lập thông qua FastCGI: Nginx tiếp nhận yêu cầu từ trình duyệt, tự phản hồi nội dung tĩnh (HTML/CSS), sau đó chuyển các yêu cầu động (PHP) qua Unix socket đến PHP-FPM để truy xuất dữ liệu từ MySQL và cuối cùng đóng gói trả kết quả về cho người dùng.

Khi người dùng truy cập vào một website sử dụng LEMP Stack, quá trình xử lý diễn ra theo các bước sau:

  1. Trình duyệt gửi yêu cầu HTTP: Người dùng truy cập website thông qua trình duyệt, yêu cầu HTTP (GET/POST) được gửi đến máy chủ đang chạy Nginx.
  2. Nginx tiếp nhận và phân loại yêu cầu: Nginx đóng vai trò là điểm tiếp nhận đầu tiên. Nếu yêu cầu là nội dung tĩnh (HTML, CSS, hình ảnh…), Nginx sẽ xử lý và trả kết quả trực tiếp. Với các yêu cầu cần xử lý PHP, Nginx chuyển tiếp yêu cầu đến PHP-FPM.
  3. PHP-FPM xử lý logic ứng dụng: PHP-FPM thực thi mã PHP, xử lý nghiệp vụ và khi cần thiết sẽ gửi truy vấn đến hệ quản trị cơ sở dữ liệu để lấy hoặc cập nhật dữ liệu.
  4. MySQL/MariaDB truy xuất dữ liệu: Cơ sở dữ liệu tiếp nhận truy vấn từ PHP-FPM, thực hiện xử lý và trả kết quả về cho PHP để tiếp tục xử lý logic ứng dụng.
  5. Phản hồi dữ liệu ngược trở lại Nginx: Sau khi hoàn tất xử lý, PHP-FPM gửi kết quả về cho Nginx dưới dạng dữ liệu đã được chuẩn bị sẵn để hiển thị.
  6. Nginx trả nội dung cho trình duyệt: Nginx gửi phản hồi cuối cùng về cho trình duyệt người dùng, hoàn tất một vòng xử lý yêu cầu.

3. Ưu và nhược điểm cốt lõi của LEMP

LEMP Stack sở hữu khả năng chịu tải hàng chục ngàn kết nối đồng thời nhờ kiến trúc event-driven của Nginx. Tuy nhiên, nhược điểm lớn nhất của mô hình này là cấu hình phức tạp (đòi hỏi kiến thức quản trị hệ thống – system admin) và hoàn toàn không hỗ trợ tệp cấu hình cấp thư mục .htaccess như mô hình LAMP truyền thống.

Ưu điểm

  • Hiệu suất cao và khả năng xử lý đồng thời tốt: Nhờ Nginx với kiến trúc event-driven, LEMP Stack có thể xử lý số lượng lớn kết nối đồng thời với mức tiêu thụ tài nguyên thấp, phù hợp cho website có lưu lượng truy cập cao.
  • Tối ưu tài nguyên server: Sự tách biệt rõ ràng giữa web server (Nginx) và bộ xử lý PHP (PHP-FPM) giúp kiểm soát tài nguyên tốt hơn, giảm tải cho hệ thống và tăng độ ổn định khi vận hành.
  • Khả năng mở rộng linh hoạt: LEMP Stack dễ dàng mở rộng theo chiều ngang hoặc chiều dọc, hỗ trợ load balancing, caching và reverse proxy, đáp ứng tốt nhu cầu phát triển lâu dài của website và ứng dụng web.
  • Ổn định và bảo mật cao: Chạy trên nền tảng Linux cùng các cơ chế phân quyền, quản lý tiến trình và cấu hình bảo mật chặt chẽ, LEMP Stack mang lại môi trường vận hành an toàn và đáng tin cậy.
  • Mã nguồn mở, miễn phí: Các thành phần trong LEMP Stack đều là mã nguồn mở, giúp giảm chi phí bản quyền và cho phép tùy chỉnh sâu theo nhu cầu thực tế của hệ thống.

Nhược điểm

  • Cấu hình và quản trị phức tạp hơn LAMP: So với Apache, Nginx có cách cấu hình khác biệt và yêu cầu người quản trị phải hiểu rõ cách hoạt động của reverse proxy và PHP-FPM, gây khó khăn cho người mới bắt đầu.
  • Không xử lý trực tiếp PHP: Nginx không tích hợp sẵn trình xử lý PHP, bắt buộc phải cấu hình thêm PHP-FPM, làm tăng độ phức tạp trong quá trình cài đặt và vận hành.
  • Yêu cầu kiến thức kỹ thuật cao để tối ưu hiệu suất: Để khai thác tối đa hiệu năng của LEMP Stack, người quản trị cần hiểu về quản lý tiến trình, phân bổ tài nguyên và tối ưu từng thành phần, đặc biệt khi website có lưu lượng truy cập lớn.
  • Việc debug và xử lý lỗi kém trực quan hơn: So với Apache, việc theo dõi log và debug lỗi trên Nginx và PHP-FPM có thể phức tạp hơn, đặc biệt với các cấu hình nâng cao.

4. So sánh chi tiết LAMP với LEMP

Điểm khác biệt cốt lõi giữa LAMP và LEMP nằm ở kiến trúc xử lý của Web Server. Mô hình LAMP truyền thống thường dùng Apache với kiến trúc prefork (tạo tiến trình mới cho mỗi kết nối – gây tốn RAM). Tuy nhiên, cần lưu ý rằng Apache hiện đại (từ v2.4) cũng đã hỗ trợ kiến trúc event-driven, dù vậy Nginx trong LEMP vẫn được đánh giá là nhẹ và tối ưu nguyên bản tốt hơn cho Reverse Proxy

Bảng so sánh LAMP Stack và LEMP Stack

Tiêu chíLAMP StackLEMP Stack
Hệ điều hànhLinuxLinux
Web ServerApacheNginx (Engine-X)
Cơ sở dữ liệuMySQL / MariaDBMySQL / MariaDB
Ngôn ngữ xử lýPHPPHP (PHP-FPM)
Kiến trúc xử lýProcess-driven / Thread-basedEvent-driven
Xử lý PHPTích hợp trực tiếpThông qua PHP-FPM
Khả năng xử lý đồng thờiTrung bìnhCao
Mức tiêu thụ tài nguyênCao hơn khi tải lớnThấp hơn, ổn định
Độ phức tạp cấu hìnhDễ hơn cho người mớiPhức tạp hơn
Phù hợp vớiWebsite nhỏ–trung bìnhWebsite tải cao, cần hiệu suất
W3Techs Tổ chức chuyên thu thập và phân tích dữ liệu về mức độ sử dụng các công nghệ web trên Internet toàn cầu
Trích dẫn từ Chuyên gia

Theo báo cáo của W3Techs (cập nhật tháng 5/2026), Nginx hiện được sử dụng bởi khoảng 32% trong top 1.000 website hàng đầu, giữ khoảng cách khá an toàn so với mức xấp xỉ 11% của Apache trong cùng nhóm phân tích.

Khác biệt chính giữa LAMP LEMP nằm cách web server xử kết nối:

  • LAMP (Apache):

    • Sử dụng kiến trúc process-driven / thread-based

    • Mỗi kết nối gắn với một tiến trình hoặc luồng riêng

    • Dễ cấu hình, nhưng tiêu tốn nhiều tài nguyên khi traffic tăng

  • LEMP (Nginx):

    • Sử dụng kiến trúc event-driven

    • thể xử nhiều kết nối đồng thời

    • Tiết kiệm tài nguyên hơn, phù hợp website lưu lượng truy cập cao

lemp stack
Các công nghệ mã nguồn mở của LEMP Stack và LAMP Stack

Vì vậy, LEMP Stack phù hợp với các website có lưu lượng truy cập lớn hoặc yêu cầu mở rộng linh hoạt, trong khi LAMP vẫn là lựa chọn đơn giản cho các dự án nhỏ. Nếu bạn có dự định phát triển dự án dài hạn và dự báo traffic sẽ tăng đột biến, việc áp dụng cấu trúc Nginx của LEMP ngay từ đầu là một bước đi chiến lược.

5. Khi nào nên sử dụng LEMP Stack?

Bạn nên sử dụng LEMP Stack khi cần triển khai các hệ thống yêu cầu khả năng mở rộng (scalability) cao, cần xử lý hàng ngàn request cùng lúc (như website báo chí, nền tảng thương mại điện tử). Việc cấu hình Nginx kết hợp PHP-FPM giúp doanh nghiệp tối ưu hóa đáng kể tài nguyên CPU/RAM so với các cấu trúc web server cũ chạy theo cơ chế process-driven.

5.1. Website High Traffic (Báo chí, Thương mại điện tử)

LEMP Stack đặc biệt phù hợp với các website có lưu lượng truy cập lớn và nhiều kết nối đồng thời, như báo điện tử, cổng tin tức hoặc nền tảng thương mại điện tử. Các trang web này đòi hỏi máy chủ phải liên tục xử lý hàng ngàn yêu cầu truy cập cùng lúc và Nginx sẽ làm rất tốt nhiệm vụ điều phối để tránh tình trạng gián đoạn dịch vụ (downtime).

Ưu điểm chính:

  • Xử nhiều kết nối đồng thời: Nginx sử dụng hình event-driven, cho phép xử nhiều request với mức tiêu thụ tài nguyên thấp.

  • Hiệu suất ổn định khi traffic tăng cao: Hệ thống vẫn duy trì thời gian phản hồi nhanh trong các giai đoạn cao điểm.

  • Phân phối request hiệu quả: Nginx xử nội dung tĩnh chuyển các request động đến PHP-FPM sở dữ liệu.

  • Tăng độ ổn định của hệ thống: Giảm nguy quá tải hạn chế downtime khi lượng truy cập lớn.

5.2. Cần tối ưu chi phí hạ tầng

LEMP Stack phù hợp với các hệ thống cần tối ưu chi phí vận hành nhưng vẫn đảm bảo hiệu suất và độ ổn định. Thay vì phải liên tục nâng cấp gói máy chủ (CPU, RAM), cấu trúc tinh gọn của LEMP giúp doanh nghiệp tận dụng triệt để sức mạnh của phần cứng hiện tại.

Những yếu tố giúp LEMP Stack tiết kiệm chi phí:

  • Sử dụng tài nguyên hiệu quả: Nginx tiêu thụ ít CPU RAM khi xử nhiều kết nối đồng thời.

  • Giảm nhu cầu nâng cấp server sớm: Với cùng cấu hình máy chủ, hệ thống thể phục vụ nhiều traffic hơn.

  • Không tốn chi phí bản quyền: Linux, Nginx, MySQL/MariaDB PHP đều nguồn mở.

  • Phù hợp với VPS hoặc Cloud nhỏ: thể vận hành tốt ngay cả trên server cấu hình thấp.

5.3. Ứng dụng cần Scalability

LEMP Stack phù hợp với các ứng dụng web cần mở rộng theo sự tăng trưởng của hệ thống, cả về lưu lượng truy cập và khối lượng xử lý backend. Khả năng “scale” dễ dàng này giúp các nhà phát triển không phải đập đi xây lại cấu trúc máy chủ khi quy mô dự án mở rộng trong tương lai.

Những yếu tố hỗ trợ khả năng mở rộng:

  • Xử nhiều kết nối đồng thời: Kiến trúc event-driven của Nginx cho phép hệ thống xử lượng lớn request không cần tăng mạnh tài nguyên server.

  • Dễ mở rộng từng thành phần: Nginx, PHP-FPM sở dữ liệu thể scale độc lập khi tải tăng.

  • Giảm nghẽn cổ chai: Nginx phân phối request hiệu quả, trong khi PHP-FPM xử logic ứng dụng theo chế pool.

6. Hướng dẫn cài đặt LEMP Stack trên Ubuntu (Linux)

Để cài đặt LEMP Stack hoàn chỉnh trên Ubuntu (22.04/24.04), bạn cần thực hiện qua 4 bước: Cài đặt Nginx, thiết lập bảo mật MySQL, cấu hình PHP-FPM và tạo Nginx Server Block. Máy chủ cần tối thiểu 1GB RAM và tài khoản có quyền sudo để thực thi các dòng lệnh hệ thống một cách trơn tru.

  • Hệ điều hành: Ubuntu 22.04 / 24.04 LTS hoặc Debian 11 / 12
  • Bộ nhớ RAM: Tối thiểu 1GB (khuyến nghị từ 2GB trở lên để hệ thống hoạt động mượt hơn)
  • Dung lượng ổ cứng: Ít nhất 20GB trống
  • Tên miền (Domain): Không bắt buộc, nhưng nên có nếu bạn muốn cài đặt SSL cho website
  • Quyền truy cập: Tài khoản root hoặc người dùng có quyền sudo

💡 BẠN ĐÃ CÓ MÁY CHỦ ĐỂ THỰC HÀNH CHƯA?

Để hệ thống LEMP Stack phát huy tối đa hiệu suất, Nginx và MySQL cần một hạ tầng phần cứng mạnh mẽ và ổn định. Tham khảo ngay dịch vụ thuê Cloud Server giá rẻ, tốc độ cao tại VinaHost với 100% ổ cứng SSD NVMe, Uptime 99.9% và băng thông không giới hạn để bắt đầu triển khai dự án của bạn ngay hôm nay!

6.1. Bước 1: Cập nhật hệ thống & Cài đặt Nginx

Cập nhật hệ thống

Trước khi cài đặt các dịch vụ, bạn nên cập nhật danh sách gói và nâng cấp hệ thống để đảm bảo môi trường luôn ở trạng thái ổn định:

sudo apt update

sudo apt upgrade -y

Cài đặt Nginx

  • Tiếp theo, cài đặt Nginx từ kho phần mềm chính thức của Ubuntu:
sudo apt install nginx -y
  • Sau khi cài đặt xong, kích hoạt Nginx tự khởi động cùng hệ thống và khởi chạy dịch vụ:
sudo systemctl enable nginx

sudo systemctl start nginx
  • Kiểm tra trạng thái hoạt động của Nginx:
sudo systemctl status nginx

Nếu trạng thái hiển thị active (running), điều này có nghĩa là Nginx đã hoạt động bình thường. Lúc này, dịch vụ web đã sẵn sàng để tiếp nhận các yêu cầu truy cập đầu tiên từ người dùng, bạn có thể yên tâm chuyển sang thiết lập các thành phần tiếp theo.

  • Bạn cũng có thể kiểm tra nhanh phiên bản Nginx đang sử dụng:
nginx -v

Cấu hình Firewall cho Nginx (nếu có)

  • Trong trường hợp server đang bật tường lửa UFW, hãy cho phép Nginx nhận kết nối HTTP trên cổng 80:
sudo ufw allow http
  • Hoặc kiểm tra và bật profile tương ứng của Nginx:
sudo ufw app list

sudo ufw allow 'Nginx HTTP'

Kiểm tra hoạt động

  • Cuối cùng, mở trình duyệt và truy cập địa chỉ IP của server:
http://IP_SERVER

Nếu trang Welcome to Nginx xuất hiện, điều đó xác nhận Nginx đã được cài đặt và cấu hình thành công.

lemp stack
Trang Welcome to Nginx xuất hiện, bạn đã được cài đặt và cấu hình thành công

6.2. Bước 2: Cài đặt MySQL và bảo mật cơ sở dữ liệu

Sau khi web server Nginx đã hoạt động, bước tiếp theo là cài đặt MySQL – hệ quản trị cơ sở dữ liệu dùng để lưu trữ và quản lý dữ liệu cho website và ứng dụng web. Mọi thông tin quan trọng từ bài viết, sản phẩm cho đến thông tin khách hàng đều sẽ được bảo quản an toàn tại đây.

  • Sử dụng apt để cài đặt MySQL:
sudo apt install mysql-server -y
  • Khi được yêu cầu xác nhận, nhấn YENTER để tiếp tục.

Bảo mật MySQL

MySQL cung cấp sẵn một script giúp tăng cường bảo mật bằng cách loại bỏ các thiết lập mặc định không an toàn. Bạn nên chạy script này ngay sau khi cài đặt:

sudo mysql_secure_installation

Trong quá trình cấu hình, bạn sẽ được hỏi có muốn bật VALIDATE PASSWORD PLUGIN hay không. Đây là một công cụ hỗ trợ ép buộc người dùng phải tạo các mật khẩu có độ phức tạp cao, giúp bảo vệ cơ sở dữ liệu khỏi các rủi ro bảo mật cơ bản.

  • Plugin này giúp kiểm tra độ mạnh của mật khẩu
  • Việc bật hay tắt plugin này phụ thuộc vào nhu cầu của bạn.
  • Nếu bật, MySQL sẽ tự động từ chối các mật khẩu không đáp ứng tiêu chí bảo mật.

Khi được hỏi:

Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No:
  • Nhấn Y để bật
  • Hoặc nhấn phím bất kỳ để bỏ qua

Kiểm tra truy cập MySQL

  • Sau khi hoàn tất cấu hình bảo mật, kiểm tra khả năng truy cập MySQL bằng lệnh:
sudo mysql
  • Nếu đăng nhập thành công, bạn sẽ thấy giao diện MySQL console như sau:
Welcome to the MySQL monitor.
mysql>
  • Để thoát khỏi MySQL console, gõ:
exit

⚠️ Lưu ý quan trọng về xác thực MySQL trên Ubuntu

Trên Ubuntu, MySQL mặc định sử dụng cơ chế auth_socket cho người dùng root. Điều này có nghĩa là:

  • Người dùng root của MySQL không đăng nhập bằng mật khẩu
  • Chỉ các user hệ thống có quyền sudo mới có thể truy cập MySQL với quyền root

6.3. Bước 3: Cài đặt PHP & Cấu hình PHP-FPM

Trong LEMP Stack, Nginx không tích hợp trực tiếp PHP mà sử dụng PHP-FPM để xử lý các request PHP, giúp hệ thống hoạt động hiệu quả và dễ mở rộng hơn. Cơ chế xử lý độc lập này ngăn chặn tình trạng web server bị quá tải khi phải chờ hệ thống thực thi các tệp tin chứa mã lệnh động.

  • Bạn cần cài đặt các gói sau:
    • php-fpm: Dịch vụ xử lý các request PHP
    • php-mysql: Module cho phép PHP làm việc với MySQL
  • Tiến hành cài đặt PHP và các module cần thiết bằng lệnh:
sudo apt install php-fpm php-mysql -y

Khi được yêu cầu xác nhận, nhấn YENTER để tiếp tục.

  • Sau khi cài đặt, kiểm tra xem PHP-FPM đã hoạt động hay chưa:
systemctl status php8.1-fpm

⚠️ Lưu ý: Hãy thay số 8.1 thành phiên bản PHP thực tế bạn vừa cài đặt (ví dụ 8.2 hoặc 8.3)

Nếu trạng thái là active (running), PHP-FPM đã sẵn sàng xử lý các request PHP từ Nginx.

Cấu hình PHP cơ bản

  • File cấu hình chính của PHP nằm tại:
sudo nano /etc/php/8.1/fpm/php.ini
  • Tìm và đảm bảo tham số sau được thiết lập:
cgi.fix_pathinfo=0

Ý nghĩa: Ngăn PHP xử lý các file không tồn tại và giảm nguy cơ khai thác bảo mật liên quan đến FastCGI

  • Sau khi chỉnh sửa, reload PHP-FPM để áp dụng cấu hình:
sudo systemctl reload php8.1-fpm

Điều chỉnh giới hạn tài nguyên PHP (Tuỳ chọn) 

  • Bạn có thể tối ưu thêm một số thông số phổ biến trong php.ini:
memory_limit = 256M

upload_max_filesize = 64M

post_max_size = 64M

max_execution_time = 60

Các giá trị này giúp PHP hoạt động ổn định hơn với website thực tế.

6.4. Bước 4: Cấu hình Nginx Server Block

Server Block trong Nginx tương đương với Virtual Host trong Apache, cho phép bạn chạy nhiều website hoặc tên miền trên cùng một máy chủ. Việc cấu hình tính năng này giúp quản trị viên tối ưu hóa chi phí, bởi mỗi tên miền sẽ hoạt động hoàn toàn tách biệt trong thư mục gốc của riêng nó mà không cần thuê nhiều VPS khác nhau.

Tạo thư mục gốc cho website

  • Thay vì sử dụng thư mục mặc định /var/www/html, bạn nên tạo thư mục riêng cho từng website để dễ quản lý:
sudo mkdir -p /var/www/your_domain
  • Gán quyền sở hữu thư mục cho user hiện tại:
sudo chown -R $USER:$USER /var/www/your_domain

Tạo file cấu hình Server Block

  • Tạo file cấu hình mới trong thư mục sites-available của Nginx:
sudo nano /etc/nginx/sites-available/your_domain
  • Thêm nội dung cấu hình cơ bản sau:
server {

    listen 80;

    server_name your_domain www.your_domain;

 

    root /var/www/your_domain;

    index index.html index.htm index.php;

 

    location / {

        try_files $uri $uri/ =404;

    }

 

    location ~ \.php$ {

        include snippets/fastcgi-php.conf;

        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;

    }

 

    location ~ /\.ht {

        deny all;

    }

}

⚠️ Lưu ý: Đổi 8.1 thành phiên bản PHP tương ứng của bạn

Giải thích nhanh cấu hình chính

  • listen 80: Nginx lắng nghe kết nối HTTP trên cổng 80
  • server_name: Tên miền hoặc IP mà server block phản hồi
  • root: Thư mục chứa mã nguồn website
  • index: Thứ tự ưu tiên file index (HTML được ưu tiên hơn PHP)
  • location /: Kiểm tra sự tồn tại của file/thư mục, nếu không có sẽ trả về mã lỗi 404.
  • location ~ .php$: Chuyển request PHP sang PHP-FPM xử lý
  • fastcgi_pass: Kết nối tới socket của PHP-FPM
  • location ~ /.ht: Chặn truy cập file .htaccess (Nginx không sử dụng)

Kích hoạt Server Block

  • Tạo liên kết tượng trưng để kích hoạt cấu hình:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
  • Vô hiệu hóa server block mặc định (khuyến nghị):
sudo unlink /etc/nginx/sites-enabled/default

Kiểm tra và reload Nginx

  • Kiểm tra lỗi cú pháp cấu hình:
sudo nginx -t
  • Nếu không có lỗi, reload Nginx để áp dụng cấu hình:
sudo systemctl reload nginx

Kiểm tra hoạt động của Server Block

  • Tạo file test trong thư mục website:
nano /var/www/your_domain/index.html
  • Thêm nội dung:
<html>

  <head>

    <title>your_domain</title>

  </head>

  <body>

    <h1>Hello World!</h1>

    <p>Nginx Server Block đã hoạt động thành công.</p>

  </body>

</html>
  • Lưu file, sau đó truy cập trình duyệt:
http://server_domain_or_IP
lemp stack
Nếu trang hiển thị đúng, server block đã được cấu hình thành công.

7. Hướng dẫn cài đặt LEMP Stack trên Windows (WSL)

Để chạy LEMP Stack chuẩn xác trên Windows, bạn bắt buộc phải sử dụng Windows Subsystem for Linux (WSL) thay vì cài đặt các file .exe trực tiếp. WSL cung cấp môi trường kernel Ubuntu thực thụ ngay trên Windows, giúp loại bỏ hoàn toàn lỗi sai lệch đường dẫn (file path) khi đưa mã nguồn từ môi trường phát triển (Local) lên Production.

Nguyên nhân chủ yếu đến từ cách Windows quản lý hệ thống tệp và tiến trình khác hoàn toàn so với Linux, dễ dẫn đến những lỗi phát sinh bất ngờ khi đưa mã nguồn lên máy chủ thật. Một số vấn đề phổ biến khi chạy LEMP trực tiếp trên Windows:

  • Khác biệt về đường dẫn hệ thống (file path) giữa Windows Linux
  • Khác biệt về quyền truy cập quản dịch vụ (service)
  • thể phát sinh lỗi khi triển khai từ môi trường Development lên Production

Để giải quyết vấn đề này, Windows Subsystem for Linux (WSL) cho phép chạy một môi trường Linux hoàn chỉnh (dụ Ubuntu) ngay trên Windows. Nhờ đó, các thành phần của LEMP Stack như Nginx, MySQL PHP thể được cài đặt vận hành tương tự như trên server Linux thật, giúp giảm sự khác biệt giữa môi trường phát triển Production.

WSL được quản chủ yếu thông qua PowerShell hoặc Command Prompt. Dưới đây các lệnh bản thường được sử dụng khi thiết lập môi trường LEMP Stack trên WSL.

  • Cài đặt WSL và Ubuntu mặc định
wsl --install
    • Lệnh này tự động cài WSL 2 và Ubuntu. Bạn cũng có thể cài bản phân phối khác bằng cách:
wsl --install -d <DistributionName>
  • Xem danh sách các bản phân phối Linux
wsl -l -o        # Danh sách distro có sẵn

wsl -l -v        # Danh sách distro đã cài + phiên bản WSL
  • Đặt WSL 2 làm mặc định (khuyến nghị)
wsl --set-default-version 2
  • Khởi động WSL
wsl
    • Hoặc chạy một bản phân phối cụ thể:
wsl -d Ubuntu

 

  • Cập nhật WSL
wsl --update
  • Kiểm tra trạng thái và phiên bản WSL
wsl --status

wsl --version
  • Dừng hoặc tắt WSL
wsl --shutdown

wsl --terminate <DistributionName>
  • Xem trợ giúp đầy đủ
wsl --help
Microsoft
Microsoft
Trích dẫn từ Chuyên gia

Microsoft khuyến nghị các nhà phát triển web sử dụng WSL 2 để có một môi trường tương thích hoàn toàn với hệ thống Production (Ubuntu/Linux). Dưới góc độ chuyên môn, phương pháp này được đánh giá ưu việt hơn hẳn so với việc dùng các gói WAMP/XAMPP truyền thống trên Windows – vốn rất dễ gây ra lỗi sai lệch đường dẫn khi triển khai thực tế.

Ngoài việc cài đặt LEMP Stack trực tiếp trên Linux hoặc thông qua WSL trên Windows, bạn cũng thể lựa chọn một số phương pháp triển khai khác tùy theo nhu cầu phát triển vận hành hệ thống.

Docker

  • LEMP Stack thể được triển khai bằng Docker thông qua các container riêng biệt cho:

    • Nginx

    • PHP

    • MySQL

  • Phương pháp này giúp:

    • Tái tạo môi trường nhanh chóng

    • Dễ dàng triển khai trên nhiều máy khác nhau

    • Phù hợp với các quy trình CI/CD hệ thống cần khả năng mở rộng linh hoạt

Script tự động

  • Việc sử dụng script Bash hoặc các công cụ tự động hóa như Ansible cho phép:

    • Tự động cài đặt cấu hình LEMP Stack

    • Giảm các thao tác cài đặt thủ công

    • Đảm bảo cấu hình đồng nhất giữa nhiều server hoặc môi trường

8. Cần làm gì sau khi cài đặt LEMP Stack?

Sau khi thiết lập thành công LEMP Stack, quản trị viên bắt buộc phải cấu hình thêm 3 yếu tố để sẵn sàng cho Production: Cài đặt chứng chỉ SSL Let’s Encrypt (để dùng HTTPS), thiết lập Nginx FastCGI Caching (giảm tải truy vấn PHP) và ẩn các tham số Server Tokens (chống hacker quét lỗ hổng).

8.1. Cài đặt SSL miễn phí với Let’s Encrypt

Sau khi website đã hoạt động ổn định qua HTTP, bước tiếp theo bắt buộc nên thực hiện là cài đặt SSL để mã hóa dữ liệu và tăng độ tin cậy cho website. Giao thức HTTPS hiện nay không chỉ bảo vệ thông tin người dùng khỏi rủi ro bị đánh cắp mà còn là một tiêu chuẩn bắt buộc để tối ưu hóa SEO trên các công cụ tìm kiếm.

Let’s Encrypt là tổ chức cung cấp chứng chỉ SSL miễn phí, được hầu hết các trình duyệt và hệ điều hành tin cậy, đồng thời hỗ trợ tự động gia hạn, rất phù hợp cho cả môi trường Production. Giải pháp này giúp các quản trị viên tiết kiệm đáng kể chi phí duy trì bảo mật hàng năm mà vẫn đảm bảo tiêu chuẩn mã hóa cho website.

Đối với các website doanh nghiệp, thương mại điện tử hoặc hệ thống yêu cầu độ tin cậy cao, việc sử dụng SSL trả phí sẽ mang lại nhiều lợi ích hơn như: mức độ xác thực cao hơn, hỗ trợ kỹ thuật chuyên nghiệp và uy tín thương hiệu tốt hơn.

GEOTRUST SSLSECTIGO SSL
lemp stack

Bảo mật Website với GeoTrust SSL

lemp stack Bảo mật Website với Sectigo SSL
Tham khảo ngay GeoTrust SSL giá chỉ từ 1,100,000vnđ/năm

 

Tham khảo ngay Sectigo SSL giá chỉ từ 150,000vnđ/năm

8.2. Tối ưu Nginx Caching

Khi website bắt đầu có lưu lượng truy cập, việc tối ưu hiệu năng trở nên quan trọng. Nginx hỗ trợ caching rất tốt, giúp giảm tải cho PHP và MySQL, cải thiện tốc độ tải trang và tăng khả năng chịu tải của hệ thống. Việc cấu hình caching hợp lý là bước cần thiết để LEMP Stack hoạt động hiệu quả và ổn định hơn trong thực tế.

8.3. Bảo mật cơ sở dữ liệu

Cơ sở dữ liệu là thành phần quan trọng nhất của hệ thống. Sau khi cài đặt MySQL, bạn nên tiếp tục rà soát và tăng cường bảo mật nhằm:

  • Hạn chế truy cập trái phép
  • Giảm rủi ro rò rỉ dữ liệu
  • Đảm bảo an toàn cho ứng dụng và người dùng
lemp stack
Những điều cần làm sau khi cài đặt LEMP Stack

8.4. Checklist bảo mật nâng cao cho hệ thống LEMP Stack

Sau khi cài đặt thành công, một hệ thống LEMP nguyên bản vẫn tồn tại nhiều lỗ hổng nếu không được tinh chỉnh. Đối với môi trường Production, quản trị viên cần thực hiện ngay các bước bảo mật Nginx và PHP sau:

  • Ẩn phiên bản Nginx và PHP: Mặc định, Nginx sẽ hiển thị phiên bản đang dùng trong Header phản hồi (ví dụ: Nginx/1.18.0), tạo cơ hội cho hacker khai thác lỗ hổng đã biết. Cần thêm dòng server_tokens off; vào file nginx.conf và đặt expose_php = Off trong file php.ini.
  • Bảo vệ hệ thống khỏi tấn công DDoS (Rate Limiting): Sử dụng module limit_req của Nginx để giới hạn số lượng yêu cầu từ một IP trong một khoảng thời gian nhất định, tránh tình trạng CPU và PHP-FPM bị quá tải do Flood request.
  • Chống tấn công XSS và Clickjacking: Cấu hình bổ sung các Security Headers trong Nginx như X-Frame-Options “SAMEORIGIN”, X-XSS-Protection “1; mode=block” để ngăn chặn mã độc nhúng vào iframe.
  • Cài đặt Fail2ban: Tích hợp Fail2ban để tự động quét log của Nginx và block (khóa) các địa chỉ IP có hành vi scan lỗi 404 liên tục hoặc cố tình dò mật khẩu quản trị viên.

9. Các lỗi thường gặp khi triển khai LEMP Stack và cách khắc phục

Ba lỗi phổ biến nhất khi vận hành LEMP Stack bao gồm: lỗi 502 Bad Gateway, lỗi 403 Forbidden và lỗi Nginx không nhận file .htaccess. Nguyên nhân cốt lõi thường xuất phát từ việc Nginx mất kết nối socket với PHP-FPM, sai phân quyền owner của thư mục www-data hoặc do cấu trúc file điều hướng chưa được chuyển đổi sang định dạng của Nginx.

9.1. Lỗi 502 Bad Gateway

Lỗi 502 Bad Gateway là một trong những lỗi phổ biến nhất khi triển khai LEMP Stack. Lỗi này xảy ra khi Nginx không thể nhận được phản hồi hợp lệ từ PHP-FPM, dù web server vẫn đang hoạt động.

lemp stack
Lỗi 502 Bad Gateway là lỗi khi Nginx không thể nhận được phản hồi hợp lệ từ PHP-FPM

Nguyên nhân thường gặp

  • PHP-FPM chưa chạy hoặc bị dừng do lỗi cấu hình
  • Nginx trỏ sai socket hoặc port PHP-FPM
  • Phiên bản PHP không khớp (ví dụ: Nginx trỏ đến PHP 8.1 nhưng server chỉ đang chạy PHP 8.0)
  • PHP-FPM quá tải do thiếu RAM
  • PHP-FPM xử lý quá lâu dẫn đến timeout
  • Quyền truy cập socket PHP-FPM không đúng

Hướng khắc phục cơ bản

Trong nhiều trường hợp, lỗi 502 Bad Gateway xuất phát từ việc Nginx không chờ đủ lâu để nhận phản hồi từ PHP-FPM, đặc biệt khi ứng dụng PHP xử lý chậm hoặc tải cao. Khi đó, việc điều chỉnh các thông số timeout và buffer cho FastCGI là cần thiết.

  1. Điều chỉnh timeout và buffer cho FastCGI

Mở file cấu hình chính của Nginx:

sudo nano /etc/nginx/nginx.conf

Trong khối http { }, thêm (hoặc điều chỉnh) các cấu hình sau:

http {

    fastcgi_buffers          8 16k;

    fastcgi_buffer_size      32k;

    fastcgi_connect_timeout  300;

    fastcgi_send_timeout     300;

    fastcgi_read_timeout     300;
 

    include /etc/nginx/conf.d/*.conf;

}

Ý nghĩa chính của các cấu hình trên:

  • fastcgi_connect_timeout: Thời gian tối đa Nginx chờ kết nối tới PHP-FPM
  • fastcgi_send_timeout: Thời gian gửi request tới PHP-FPM
  • fastcgi_read_timeout: Thời gian Nginx chờ PHP-FPM trả về kết quả
  • fastcgi_buffers, fastcgi_buffer_size: Giúp Nginx xử lý phản hồi PHP lớn hiệu quả hơn

Việc tăng các giá trị này giúp hạn chế lỗi 502 khi PHP-FPM xử lý chậm nhưng không nên lạm dụng, vì có thể che giấu các vấn đề hiệu năng bên trong ứng dụng. Về lâu dài, bạn nên rà soát lại mã nguồn PHP hoặc tối ưu hóa các câu truy vấn MySQL để hệ thống thực sự phản hồi nhanh chóng và bền vững hơn.

  1. Khởi động lại dịch vụ để áp dụng cấu hình

Sau khi chỉnh sửa xong, khởi động lại các dịch vụ liên quan:

sudo systemctl restart php8.1-fpm

sudo systemctl restart nginx
  1. Kiểm tra lại website và log lỗi

Nếu lỗi vẫn xảy ra, bạn nên kiểm tra log để xác định nguyên nhân cụ thể hơn:

  • Log lỗi Nginx
/var/log/nginx/error.log
  • Log PHP-FPM
/var/log/php8.1-fpm.log

9.2. Lỗi 403 Forbidden

Lỗi 403 Forbidden xuất hiện khi Nginx từ chối quyền truy cập vào tài nguyên được yêu cầu, dù server vẫn hoạt động bình thường. Đây là lỗi liên quan trực tiếp đến quyền truy cập (permission) và cấu hình server block.

lemp stack
Lỗi 403 Forbidden xuất hiện khi Nginx từ chối quyền truy cập vào tài nguyên được yêu cầu

Nguyên nhân thường gặp

  • Sai quyền truy cập của thư mục hoặc file trong thư mục web root (/var/www/…)
  • Thư mục web không có file index (index.php, index.html)
  • Chỉ thị root hoặc location trong Nginx cấu hình không đúng
  • User chạy dịch vụ Nginx (thường là www-data) không có quyền đọc thư mục website.
  • Truy cập vào thư mục bị deny trong cấu hình Nginx

Hướng khắc phục cơ bản

  • Kiểm tra và gán lại quyền thư mục website
sudo chown -R www-data:www-data /var/www/your_domain

sudo chmod -R 755 /var/www/your_domain
  • Đảm bảo thư mục web có file index
index index.php index.html index.htm;
  • Kiểm tra cấu hình server block
sudo nginx -t
sudo systemctl reload nginx<
  • Kiểm tra log lỗi của Nginx
/var/log/nginx/error.log

9.3. Nginx không nhận file .htaccess

Một lỗi phổ biến đối với người mới chuyển từ Apache (LAMP) sang Nginx (LEMP Stack) là nhận thấy các cấu hình trong file .htaccess không có tác dụng. Điều này không phải lỗi cấu hình, mà xuất phát từ sự khác biệt trong kiến trúc giữa hai web server.

Nguyên nhân

Nguyên nhân chính khiến Nginx không nhận file .htaccess là do sự khác biệt trong cách thiết kế giữa Nginx và Apache:

  • File .htaccess là cơ chế cấu hình đặc thù của Apache, cho phép khai báo cấu hình ở từng thư mục.
  • Nginx không hỗ trợ và không đọc file .htaccess, do đó sẽ hoàn toàn bỏ qua file này dù nó tồn tại trong thư mục website.
  • Trong Nginx, toàn bộ cấu hình phải được khai báo tập trung trong các file cấu hình server như:
    • nginx.conf
    • Các file trong thư mục sites-available / conf.d

Vì lý do trên, nếu bạn chỉ cấu hình trong .htaccess khi sử dụng Nginx thì những thiết lập quen thuộc sau sẽ không có hiệu lực:

  • Rewrite URL (rewrite đường dẫn)
  • Chặn truy cập thư mục hoặc file
  • Giới hạn dung lượng upload
  • Chuyển hướng HTTP sang HTTPS

Cách tiếp cận đúng khi dùng Nginx

Khi triển khai LEMP Stack, bạn cần:

  • Chuyển các rule trong .htaccess sang cú pháp Nginx
  • Cấu hình rewrite, redirect, security trực tiếp trong server { }
  • Áp dụng cấu hình ở cấp server để tăng hiệu năng và bảo mật

Câu hỏi thường gặp về LEMP Stack

LEMP Stack có tối ưu cho WordPress hơn LAMP không?

Có. LEMP (Nginx) thường tối ưu hơn LAMP (Apache) cho WordPress khi website có lưu lượng t

Nên dùng MySQL hay MariaDB cho LEMP Stack?

Cả MySQL và MariaDB đều dùng tốt cho LEMP Stack, nhưng lựa chọn phụ thuộc vào mục tiêu sử dụng:

  • MySQL: Ổn định, phổ biến, được Oracle hỗ trợ chính thức. Phù hợp khi cần tính tương thích cao, tài liệu nhiều và môi trường Production truyền thống.
  • MariaDB: Là nhánh phát triển từ MySQL, hiệu năng tốt hơn ở nhiều tình huống, mã nguồn mở hoàn toàn, được nhiều distro Linux chọn làm mặc định.

File cấu hình của Nginx nằm ở đâu?

File cấu hình của Nginx thường nằm ở các vị trí sau trên hệ thống Linux (Ubuntu/Debian):

  • File cấu hình chính: /etc/nginx/nginx.conf
  • Cấu hình server block (virtual host)
    • /etc/nginx/sites-available/
    • /etc/nginx/sites-enabled/
  • Các file cấu hình bổ sung: /etc/nginx/conf.d/

Tại sao Nginx lại được gọi là LEMP thay vì LNMP?

Vì Nginx được phát âm là “Engine-X”, nên chữ E được dùng trong LEMP. 

Kết luận

LEMP Stack nền tảng phổ biến để triển khai website ứng dụng web trên Linux nhờ hiệu suất cao, sử dụng tài nguyên hiệu quả khả năng mở rộng tốt. Với sự kết hợp của Nginx, MySQL/MariaDB PHP-FPM, hệ thống thể vận hành ổn định từ các website nhỏ đến môi trường Production lưu lượng truy cập lớn.

LEMP Stack giải pháp hiệu quả để xây dựng vận hành các hệ thống web hiện đại trên Linux. Với hiệu suất cao, khả năng mở rộng tốt chi phí thấp, đây vẫn một trong những kiến trúc được sử dụng rộng rãi cho các website ứng dụng web ngày nay.

Mời bạn truy cập vào blog của VinaHost TẠI ĐÂY để theo dõi thêm nhiều bài viết mới. Hoặc nếu bạn muốn được tư vấn thêm thì có thể liên hệ với chúng tôi qua:

Bài viết liên quan
Bình luận
Subscribe
Notify of
guest
0 Góp ý
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Tổng lượt truy cập: lượt xem
Zalo (08:00 AM - 05:00 PM)
scroll_top