Hướng Dẫn Cài Đặt LEMP Stack (Nginx, MariaDB, PHP 8.5) Trên Ubuntu: Tối Ưu Hiệu Suất Web
LEMP Stack là nền tảng vững chắc cho các website hiện đại, bao gồm Linux, Engine-X (Nginx), MariaDB và PHP. Bài viết này sẽ hướng dẫn bạn từng bước xây dựng một máy chủ web mạnh mẽ, sử dụng phiên bản PHP 8.5 mới nhất để tối ưu hóa tốc độ xử lý.
1. Tại sao nên chọn PHP 8.5 và Nginx?
Trước khi đi vào cài đặt, bạn cần hiểu sức mạnh của combo này:
- Nginx: Khả năng chịu tải (load balancing) và phục vụ file tĩnh (static files) nhanh gấp nhiều lần Apache.
- PHP 8.5: Phiên bản mới với trình biên dịch JIT (Just-In-Time) cải tiến, giúp website xử lý tác vụ nhanh hơn và bảo mật hơn các bản cũ (7.4 hay 8.0).
1. Cài đặt máy chủ web nginx

Nginx là một máy chủ web hiệu suất cao, chịu tải tốt và tiêu tốn ít tài nguyên hơn so với Apache.
Mở Terminal và chạy các lệnh sau để cập nhật hệ thống và cài đặt Nginx:
sudo apt update
Tiếp theo, chạy lệnh apt install để cài đặt Nginx:
sudo apt install nginx
Kiểm tra xem Nginx có đang hoạt động hay không:
sudo systemctl status nginx
Khởi động Nginx.
sudo systemctl start nginx
Khởi động lại Nginx để áp dụng các thay đổi:
sudo systemctl reload nginx
Cho phép Nginx khởi động cùng hệ thống.
sudo systemctl enable nginx
2. Cài đặt Hệ quản trị Cơ sở dữ liệu (MariaDB)

Chúng ta sử dụng MariaDB thay vì MySQL truyền thống vì tốc độ truy vấn nhanh hơn và cộng đồng mã nguồn mở hỗ trợ mạnh mẽ.
Cài đặt MariaDB Server:
sudo apt install mariadb-server -y
Xem phiên bản MariaDB đã được cài đặt trên máy chủ của bạn.
mariadb --version
Kích hoạt dịch vụ hệ thống MariaDB để khởi chạy cùng hệ thống.
sudo systemctl enable mariadb
Khởi động MariaDB trên máy chủ của bạn.
sudo systemctl start mariadb
Kiểm tra trạng thái dịch vụ MariaDB để xác minh rằng nó đang chạy trên máy chủ của bạn.
sudo systemctl status mariadb
Bảo mật máy chủ MariaDB
Chạy lệnh sau để khởi động tập lệnh bảo mật MariaDB
sudo mysql_secure_installation
- Nhấn Enter để chọn
nonemật khẩu này làm mật khẩu root hiện tại.
Enter current password for root (enter for none):
- Nhấn N rồi nhấn Enter để sử dụng MariaDB mà không cần
unix_socketxác thực.
Switch to unix_socket authentication [Y/N]
- Nhấn Y rồi nhấn Enter để thay đổi mật khẩu mặc định của người dùng root.
Change the root password? [Y/N]
- Nhập mật khẩu mạnh mới cho người dùng root.
New password:
- Nhập lại mật khẩu người dùng root mới và nhấn Enter để lưu thay đổi.
Re-enter new password:
- Nhấn Y rồi nhấn Enter xóa người dùng ẩn danh trên máy chủ MariaDB.
Remove anonymous users? [Y/N]
- Nhấn Y rồi nhấn Enter để vô hiệu hóa quyền truy cập từ xa vào máy chủ cơ sở dữ liệu với người dùng root.
Disallow root login remotely? [Y/N]
- Nhấn Y rồi nhấn Enter để xóa cơ sở dữ liệu thử nghiệm.
Remove test database and access to it? [Y/N]
- Nhấn Y rồi nhấn Enter để làm mới bảng quyền MariaDB và áp dụng các thay đổi cấu hình mới của bạn.
Reload privilege tables now? [Y/N]
3. Cài đặt PHP 8.5 và Các Extensions
# Add the ondrej/php repository. sudo apt update sudo apt install -y software-properties-common sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php -y sudo apt update # Install PHP. sudo apt install -y php8.5
Lệnh cài đặt combo các extension phổ biến nhất:
sudo apt-get install -y php8.5-fpm php8.5-mysql php8.5-curl php8.5-gd php8.5-mbstring php8.5-xml php8.5-zip php8.5-intl php8.5-bcmath php8.5-soap php8.5-imagick
Giải thích công dụng từng gói (Tại sao bạn cần nó?):
php8.5-fpm: Rất quan trọng cho Nginx. Vì bạn dùng LEMP stack, Nginx không tự xử lý PHP mà cần chuyển qua FastCGI Process Manager (FPM).php8.5-mysql: Để PHP giao tiếp với cơ sở dữ liệu MySQL/MariaDB (bắt buộc cho WordPress).php8.5-mbstring: Xử lý chuỗi ký tự đa byte (cực kỳ quan trọng để hiển thị đúng Tiếng Việt và các ký tự đặc biệt).php8.5-gdhoặcphp8.5-imagick: Thư viện xử lý ảnh (cắt, resize ảnh thumbail khi upload lên web). imagick thường cho chất lượng ảnh tốt hơn gd.php8.5-xml&php8.5-curl: Cần thiết cho các tính năng như sitemap, kết nối API bên thứ 3 (ví dụ: API thanh toán, API lấy dữ liệu từ social).php8.5-zip: Hỗ trợ giải nén file (cần khi bạn cài plugin/theme từ file zip hoặc update WordPress).php8.5-intl:Hỗ trợ quốc tế hóa (định dạng ngày tháng, tiền tệ theo khu vực).
Sau khi cài đặt xong:
Vì bạn dùng Nginx (LEMP), sau khi cài extension, bạn bắt buộc phải khởi động lại dịch vụ PHP-FPM để các thay đổi có hiệu lực:
sudo service php8.5-fpm restart # Hoặc sudo systemctl restart php8.5-fpm
Để kiểm tra xem các module đã được nạp thành công chưa, bạn dùng lệnh:
php -m
4. Cấu hình Nginx xử lý PHP (Kết nối các thành phần)
Tạo thư mục dự án mới
sudo mkdir /var/www/example
Tạo file index.php
sudo touch /var/www/example/index.php
Mở file index.php và dán nội dung này vào
# Mở file index.php sudo nano /var/www/example/index.php # Dán nội dung này vào <?php phpinfo(); ?>
Gỡ bỏ liên kết đến tệp cấu hình mặc định khỏi thư mục /sites-enabled/
sudo unlink /etc/nginx/sites-enabled/default
Tạo file cấu hình mới:
# Thay 'example.conf' bằng tên miền của bạn sudo nano /etc/nginx/conf.d/example.conf
Dán nội dung cấu hình sau:
server {
listen 80;
server_name example.local;
root /var/www/example/;
index index.php;
access_log /var/www/example/access.log;
error_log /var/www/example/error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi_params;
fastcgi_intercept_errors on;
#The following parameter can be also included in fastcgi_params file
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php8.5-fpm.sock;
}
#enable gzip compression
gzip on;
gzip_vary on;
gzip_min_length 1000;
gzip_comp_level 5;
gzip_types application/json text/css application/x-javascript application/javascript image/svg+xml;
gzip_proxied any;
# A long browser cache lifetime can speed up repeat visits to your page
location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
log_not_found off;
expires max;
}
# disable access to hidden files
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
Kiểm tra cú pháp (phải báo successful)
sudo nginx -t
Mở file hosts và tạo ip
# Mở file hosts sudo nano /etc/hosts # Thêm địa chỉ IP 127.0.0.1 example.local
Khởi động lại Nginx
sudo systemctl reload nginx
Mở trình duyệt vào địa chỉ http://example.local nếu thấy kết quả hiện ra là thành công

