Tìm hiểu LEMP và VirtualHosts
Khi triển khai và quản lý các ứng dụng web, việc hiểu và sử dụng các công nghệ phù hợp là rất quan trọng để đảm bảo hiệu suất và tính linh hoạt. Một trong những giải pháp phổ biến là sử dụng LEMP Stack kết hợp với VirtualHosts.
LEMP là một bộ công nghệ bao gồm Linux, Nginx, MariaDB/MySQL và PHP. Tạo ra một hệ thống máy chủ mạnh mẽ để chạy các ứng dụng web động. Điểm khác biệt chính giữa LEMP và LAMP là LEMP sử dụng Nginx thay vì Apache, giúp cải thiện tốc độ và khả năng xử lý nhiều kết nối. Đồng thời nhờ vào kiến trúc bất đồng bộ của Nginx. Đây là lựa chọn lý tưởng cho các website cần xử lý lưu lượng truy cập cao mà vẫn đảm bảo hiệu suất ổn định.
VirtualHosts (Server Blocks) trong Nginx cho phép chạy nhiều website trên cùng một server. Mỗi site có cấu hình riêng, giúp tách biệt và dễ quản lý. Giải pháp này lý tưởng để tiết kiệm chi phí và tối ưu tài nguyên khi host nhiều dự án trên một VPS.

Cần chuẩn bị gì trước khi cấu hình LEMP VirtualHost
Trước khi bắt đầu cấu hình VirtualHosts trên CentOS 7, bạn cần đảm bảo hệ thống đáp ứng các yêu cầu cơ bản để tránh lỗi phát sinh trong quá trình triển khai. Dưới đây là các điều kiện cần thiết:
- Máy chủ CentOS 7 đã cài đặt LEMP Stack: Đảm bảo đã cài đặt đầy đủ Linux, Nginx, MariaDB/MySQL và PHP để chạy ứng dụng web.
- Quyền truy cập root hoặc tài khoản có quyền sudo: Cần quyền quản trị để thực hiện các thay đổi cấu hình và cài đặt gói phần mềm.
- Tên miền đã đăng ký và trỏ về VPS: Đảm bảo tên miền đã được cấu hình với bản ghi DNS trỏ về địa chỉ IP của máy chủ để truy cập website qua domain.
- Mở cổng tường lửa cho Nginx: Kiểm tra và mở các cổng cần thiết (thường là 80 và 443) để Nginx có thể nhận và xử lý yêu cầu HTTP/HTTPS.

Kiểm tra LEMP đã cài đặt chưa bằng lệnh:
nginx -v
mysql --version
php -v
Nếu bất kỳ thành phần nào chưa được cài đặt, bạn cần hoàn tất cài đặt chúng trước khi tiến hành cấu hình VirtualHosts.
Các bước cấu hình LEMP VirtualHost trên CentOS 7
Quy trình hơi dài nên bạn hãy chú ý nhé! Để bắt đầu bạn cần tắt Selinux bằng lệnh:
vi /etc/sysconfig/selinux : selilux=disabled

Cài đặt NGINX
Cập nhật và thêm kho lưu trữ. CentOS không hỗ trợ Nginx mặc định, nên bạn cần thêm kho EPEL bằng lệnh sau:
yum update -y && yum install epel-release -y

Cài đặt NGINX bằng lệnh:
yum install nginx -y

Sau đó hãy khởi động lại để kiểm tra trạng thái dịch vụ. Sử dụng lệnh sau:
systemctl start nginx
systemctl enable nginx
systemctl status nginx

Mở hai cổng trong tường lửa firewalld cho vùng public bằng lệnh:
firewall-cmd --zone=public --permanent --add-port=80/tcp
firewall-cmd --zone=public --permanent --add-port=443/tcp
firewall-cmd --reload

Dùng lệnh sau để kiểm tra Nginx có trên cổng 80 không:
netstat -pnltu | grep nginx

Cài đặt Mariadb
Sau đó thiết lập Mariadb bằng lệnh:
yum install mariadb-server mariadb -y

Sử dụng lệnh sau để kiểm tra trạng thái của maria
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb

Thiết lập tài khoản root và tăng cường bảo mật cho MariaDB bằng lệnh:
mysql_secure_installation
Sau đó, bạn có thể đặt mật khẩu cho tài khoản root. Nhấn Enter để xác nhận hoặc nhập no nếu không muốn thiết lập ngay.

Thêm và cài đặt kho lưu trữ Remi
Việc thêm kho lưu trữ Remi để cập nhật và sử dụng các phiên bản PHP mới nhất. Bạn cài đặt kho Remi bằng lệnh:
mkdir /data && cd /data
yum install yum-utils -y
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm

Sau khi hoàn tất cài đặt kho lưu trữ Remi, bạn cần chọn và kích hoạt gói tương ứng với phiên bản PHP mong muốn trước khi tiến hành cài đặt.
yum-config-manager –enable remi-php83

Cài đặt các module cần thiết cho PHP 8.3 và xác minh phiên bản đã cài đặt.
yum install -y php php-cli php-fpm php-mysqlnd php-common

php --version

PHP giúp xử lý nội dung động bằng cách chạy tập lệnh, kết nối MySQL và gửi dữ liệu đã xử lý cho máy chủ web hiển thị. Với Nginx, cần dùng PHP-FPM làm trung gian để xử lý yêu cầu PHP, giúp cải thiện hiệu suất đáng kể.
PHP-FPM (FastCGI Process Manager) quản lý các yêu cầu thông qua worker (tiến trình). Mỗi worker chỉ xử lý một yêu cầu tại một thời điểm, và nhiều worker tạo thành một pool. Việc chia thành nhiều pool riêng biệt cho từng website giúp tăng cường bảo mật và tối ưu hiệu suất, tránh tình trạng một trang web bị tấn công ảnh hưởng đến toàn bộ hệ thống.
Tạo user riêng cho từng website, hạn chế quyền truy cập và không cấp thông tin liên kết khác:
useradd -s /sbin/nologin lanit
Thêm user “lanit” vào nhóm nginx để cho phép web server và người dùng giao tiếp với nhau.
usermod -a -G lanit nginx
Tạo foder public_html trong /home/lanit
mkdir /home/lanit/public_html
Chuyển chủ sở hữu cá nhân và nhóm của folder public html cho cá nhân và nhóm lanit
chmod 750 /home/lanit
chown -R lanit. /home/lanit/public_html
Cài đặt này sẽ làm các user khác không thể xem hay can thiệp được vào dữ liệu user của lanit.

Tạo php-fpm pool mới cho từng site bằng cách copy file cấu hình mặc định:
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/fpm-lanit.conf
Xóa bỏ pool mặc định:
rm -rf /etc/php-fpm.d/www.conf
Bạn có thể dùng lệnh ls để kiểm tra: ls /etc/php-fpm.d

Cấu hình pool lanit:
vi /etc/php-fpm.d/fpm-lanit.conf

Các giá trị cần điều chỉnh:
- [www] → [lanit] (Dòng 4)
- user = nginx (Dòng 24)
- group = nginx (Dòng 26)
- listen = /var/run/lanit-fpm.sock (Dòng 38)
- Gỡ bỏ dấu
#
ở đầu dòng:- listen.owner = nginx (Dòng 49)
- listen.group = nginx (Dòng 50)
Ý nghĩa của các thay đổi:
- Phân quyền truy cập: Cho phép user lanit làm việc với các thư mục web.
- Thay đổi phương thức lắng nghe: PHP-FPM chuyển từ TCP cổng 9000 sang socket file /var/run/lanit-fpm.sock.
- Quyền sở hữu socket: Gán
owner
vàgroup
của file socket là nginx, giúp máy chủ web giao tiếp trực tiếp với PHP-FPM.
Khởi động và enable php-fpm:
systemctl enable --now php-fpm

systemctl status php-fpm

Ngoài file cấu hình chính tại /etc/nginx/nginx.conf, Nginx còn hỗ trợ thư mục /etc/nginx/conf.d để quản lý cấu hình riêng cho từng website (tương tự như virtual host trong Apache). Để thiết lập trang web của bạn, hãy tạo một file cấu hình mới trong thư mục này.
vi /etc/nginx/conf.d/lanit.conf
Dán vào:
server {
listen 80;
server_name lanit.com.vn;
access_log /var/log/nginx/lanit.com.vn-access.log;
error_log /var/log/nginx/lanit.com.vn-error.log;
root /home/lanit/public_html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/lanit-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Giải thích:
- listen: Xác định cổng mà website sẽ tiếp nhận kết nối. Nếu site sử dụng cổng 80, cấu hình này sẽ ưu tiên thay thế cấu hình mặc định của Nginx.
- server_name: Chỉ định tên miền hoặc subdomain của trang web.
- root: Đường dẫn tới thư mục chứa mã nguồn của website.
- fastcgi_pass: Xác định đường dẫn tới tệp socket của PHP-FPM để xử lý các yêu cầu PHP.
Kiểm tra lỗi bằng lệnh sau:
nginx -t
Khởi động lại Nginx để thay đổi:
systemctl restart nginx

Bắt đầu phân quyền cho php-fpm.sock bằng lệnh:
chmod 666 /var/run/lanit-fpm.sock
chown nginx:nginx /var/run/lanit-fpm.sock
Cài đặt WordPress
Bây giờ bạn cần tạo database name và cả user database để dùng cho wordpress. Trước hết hãy đăng nhập mySQL:
mysql -u root -p
Tại đây nhập password bạn đã tạo cho tài khoản MariaDB trước đó. Sau đó tạo cơ sở dữ liệu:
CREATE DATABASE lanit;
Sau khi tạo xong cơ sở dữ liệu bạn cần tạo người dùng cho cơ sở dữ liệu đó bằng lệnh:
CREATE USER 'lanit'@'localhost' IDENTIFIED BY 'Mn58YESi@1aGHmzZo';
Hiện tại, bạn đã tạo xong người dùng MySQL, nhưng vẫn cần cấp quyền truy cập cơ sở dữ liệu. Dùng lệnh sau để thực hiện:
GRANT ALL PRIVILEGES ON lanit.* TO 'lanit'@'localhost' IDENTIFIED BY 'Mn58YESi@1aGHmzZo';
Người dùng đã được cấp quyền truy cập, giờ hãy làm mới đặc quyền để MySQL cập nhật thay đổi.
FLUSH PRIVILEGES;
Lệnh thoát:
QUIT;

Sau khi tải wordpress bạn hãy copy vào /home/user public_html bằng lệnh:
yum install wget
cd /data
wget http://wordpress.org/latest.tar.gz

Nhập lệnh giải nén:
tar -xzvf latest.tar.gz

Chuyển wordpress qua public_html của user lanit bằng lệnh:
cp -a /data/wordpress/. /home/lanit/public_html/
Bây giờ khai báo kết nối database của wordpress mới tải:
cd /home/lanit/public_html
Sao chép tệp mẫu wp-config-sample.php thành wp-config.php để tạo file cấu hình WordPress.
cp wp-config-sample.php wp-config.php

Cập nhật tệp wp-config.php với thông tin cơ sở dữ liệu đã tạo trước đó.
vi wp-config.php
Bây giờ bạn cần thay đổi các giá trị DB_USER, DB_NAME, DB_PASSWORD thành các giá trị thiết lập bên trên:

Truy cập trang quản trị WordPress tại http://lanit.com.vn/wp-admin/ để tạo tài khoản admin và cập nhật thông tin website.


Lời kết
Trên đây là bài viết hướng dẫn cách cấu hình LEMP VirtualHosts trên CentOS 7. Hy vọng bạn thực hiện các bước thành công. Nếu còn điều gì thắc mắc hãy để lại bình luận hoặc liên hệ để LANIT hỗ trợ bạn nhanh nhất nhé! Cảm ơn bạn vì đã theo dõi!
Tham khảo thêm các bài viết cùng chủ đề dưới đây: