Hướng dẫn cài đặt và cấu hình LEMP Stack trên CentOS 7
BÀI VIẾT

Hướng dẫn cài đặt và cấu hình LEMP Stack trên CentOS 7

5.4K
author Trần Đăng Quang - 2022-01-07 15:57:35 (GMT+7)

Bạn không sử dụng CentOS 7?
Xem bài viết cho các distro khác

Giới thiệu

LEMP Stack là một nhóm các phần mềm nguồn mở được cài đặt cùng nhau để xây dựng server để quản lý các website động và ứng dụng web. Thuật ngữ này là từ viết tắt từ chính 4 thành phần của nó:

  • L - Hệ điều hành Linux.
  • E - Nginx phát âm là "engine-ex", là một webserver nhanh, nhẹ, hiệu suất cao.
  • M - MySQL hoặc MariaDB, hệ quản trị cơ sở dữ liệu quan hệ.
  • P - Ngôn ngữ lập trình PHP.

Trong bài viết này, mình sẽ hướng dẫn các bạn cài đặt và cấu hình LEMP trên hệ điệu hành CentOS 7.

Yêu cầu thiết yếu

  • Distro CentOS 7
  • Sử dụng user có quyền sudo
  • Có kiến thức cơ bản về PHP, MySQL

Bước 1: Cài đặt Nginx

Nginx không có sẵn trong kho lưu trữ CentOS mặc định nên trước tiên chúng ta cần thêm kho lưu trữ EPEL bằng cách chạy lệnh sau:

bash (non-root)
sudo yum install epel-release -y

Tiếp theo, cài đặt Nginx bằng lệnh sau:

bash (non-root)
sudo yum install nginx -y

Sau khi đã cài đặt xong, khởi đông và enable Nginx bằng cách:

bash (non-root)
sudo systemctl enable --now nginx

Kiểm tra trạng thái của Nginx:

bash (non-root)
systemctl status nginx
Kết quả
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-01-06 23:23:40 +07; 10s ago
  Process: 1445 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 1442 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 1441 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 1447 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1447 nginx: master process /usr/sbin/nginx
           └─1448 nginx: worker process

Jan 06 23:23:40 centos1 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jan 06 23:23:40 centos1 nginx[1442]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jan 06 23:23:40 centos1 nginx[1442]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jan 06 23:23:40 centos1 systemd[1]: Started The nginx HTTP and reverse proxy server.

Chú ý, mặc định Nginx hoạt động ở cổng 80, vì vậy nếu đang sử dụng firewalld hoặc iptables thì cần cấu hình mở cổng 80 như sau:

bash (non-root)
sudo firewall-cmd --zone=public --permanent --add-service=http && sudo firewall-cmd --reload

hoặc:

bash (non-root)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Kiểm tra xem Nginx đã bind trên cổng 80 hay chưa bằng lệnh:

bash (non-root)
sudo netstat -pnltu | grep nginx
Kết quả
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1402/nginx: master
tcp6       0      0 :::80                   :::*                    LISTEN      1402/nginx: master

Lưu ý, để sử dụng được lệnh netstat, cần cài đặt gói net-tools:

bash (non-root)
sudo yum install net-tools

Chú ý, nếu Nginx không bind được vào cổng 80 thì cần thay đổi trạng thái của SELinux thành permissive hoặc disabled và restart Nginx:

bash (non-root)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && sudo setenforce 0 && sudo systemctl restart nginx

Để chắc chắn Nginx đã cài đặt chính xác, trên trình duyệt web, hãy truy cập địa chỉ IP của server, kết quả nhận được sẽ là 1 trang HTML giống như này:

nginx default webpage

Hướng dẫn xem IP hiện tại của server: link

Nếu bạn sử dụng server chỉ có giao diện dòng lệnh (CLI) thì đừng lo, vẫn có cách kiểm tra bằng công cụ curl:

bash (non-root)
curl http://<ip_của_server>

Kết quả trả về nội dung của trang web mặc định của Nginx:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>Welcome to CentOS</title>
  <style rel="stylesheet" type="text/css">
...

</body>
</html>

Bước 2: Cài đặt MariaDB

Lưu ý: Kho lưu trữ mặc định của CentOS 7 sẽ cài đặt MariaDB ngay cả khi bạn gõ lệnh cài đặt MySQL. MariaDB là một nhánh dựa trên MySQL do cộng đồng phát triển khi Oracle mua lại MySQL. Hai cơ sở dữ liệu hoạt động gần như tương tự nhau.

MariaDB 5.5 được cung cấp đi kèm với kho lưu trữ măc định của CentOS. Tuy khá ổn định nhưng phiên bản này đã rất lỗi thời.

123HOST đã có bài viết hướng dẫn cài MariaDB mới nhất, bạn có thể xem tại đây

Trong bài viết này, mình sẽ hướng dẫn thêm 1 cách để cài đặt bất kỳ phiên bản MariaDB nào

Đầu tiên, hãy truy cập vào trang kho lưu trữ của MariaDB và tạo tệp repo cho phiên bản MariaDB mà bạn muốn. Với MariaDB 10.6 trên CentOS 7 thì cần chọn như sau:

mariadb repo

Lưu ý: những phiên bản có tag RC hay alpha đều chưa ổn định, tốt nhất là bạn không nên chọn nó.

Bây giờ, copy và paste nội dung vừa sinh ra vào 1 tệp trong đường dẫn /etc/yum.repos.d :

bash (non-root)
sudo vi /etc/yum.repos.d/MariaDB.repo
/etc/yum.repos.d/MariaDB.repo
# MariaDB 10.6 CentOS repository list - created 2022-01-07 08:37 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://download.nus.edu.sg/mirror/mariadb/yum/10.6/centos7-amd64
gpgkey=https://download.nus.edu.sg/mirror/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

Lưu và thoát file, sau đó tiến hành cài đặt MariaDB bằng lệnh:

bash (non-root)
sudo yum install MariaDB-server MariaDB-client -y

Tiếp theo, khi quá trình cài đặt hoàn tất, hãy khởi động và enable MariaDB:

bash (non-root)
sudo systemctl enable --now mariadb

Kiểm tra trạng thái của MariaDB:

bash (non-root)
systemctl status mariadb
Kết quả
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-12-24 11:16:32 +07; 10s ago
  Process: 16823 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
  Process: 16740 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
 Main PID: 16822 (mysqld_safe)
   CGroup: /system.slice/mariadb.service
           ├─16822 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           └─16987 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-f...

Dec 24 11:16:30 centos1 mariadb-prepare-db-dir[16740]: MySQL manual for more instructions.
Dec 24 11:16:30 centos1 mariadb-prepare-db-dir[16740]: Please report any problems at http://mariadb.org/jira
Dec 24 11:16:30 centos1 mariadb-prepare-db-dir[16740]: The latest information about MariaDB is available at http://mariadb.org/.
Dec 24 11:16:30 centos1 mariadb-prepare-db-dir[16740]: You can find additional information about the MySQL part at:
Dec 24 11:16:30 centos1 mariadb-prepare-db-dir[16740]: http://dev.mysql.com
Dec 24 11:16:30 centos1 mariadb-prepare-db-dir[16740]: Consider joining MariaDB's strong and vibrant community:
Dec 24 11:16:30 centos1 mariadb-prepare-db-dir[16740]: https://mariadb.org/get-involved/
Dec 24 11:16:30 centos1 mysqld_safe[16822]: 211224 11:16:30 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
Dec 24 11:16:30 centos1 mysqld_safe[16822]: 211224 11:16:30 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Dec 24 11:16:32 centos1 systemd[1]: Started MariaDB database server.

Cấu hình bảo mật cho MariaDB:

bash (non-root)
sudo mariadb-secure-installation

MariaDB sẽ yêu cầu cung cấp root password hiện tại (root password cho MariaDB chứ không phải root password của CentOS), nhưng chúng ta chỉ vừa mới cài đặt MariaDB. Vì vậy, chỉ cần nhấn enter:

Kết quả
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Tiếp theo, Switch to unix_socket authentication: xác thực bằng unix_socket, chọn Y để bật, n để tắt.

Kết quả
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Sau đó, prompt sẽ hỏi chúng ta có muốn đặt mật khẩu mới cho MariaDB root user hay không. Nhấn Enter, nhập mật khẩu mà bạn muốn và xác nhận lại mật khẩu đó:

Kết quả
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

Nhấn ENTER cho các câu hỏi còn lại để chấp nhận các giá trị mặc định. Thao tác này sẽ xóa một số người dùng và cơ sở dữ liệu mẫu, vô hiệu hóa đăng nhập root từ xa (chỉ được phép đăng nhập root từ localhost) và reload cấu hình.

Kết quả
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Bây giờ, MariaDB Server, tiến hành đăng nhập bằng root user mà chúng ta vừa đặt mật khẩu:

bash (non-root)
mysql -u root -p

Sử dụng cú pháp MySQL để tạo database:

bash
CREATE DATABASE example_database;

tạo bảng:

bash
CREATE TABLE example_database.example_table (id INT PRIMARY KEY, name VARCHAR(30));

thêm dữ liệu vào bảng vừa tạo:

bash
INSERT INTO example_database.example_table VALUES (1, 'name1');

tạo user newuser với mật khẩu là password:

bash
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Tại thời điểm này, newuser không có quyền làm bất cứ điều gì với cơ sở dữ liệu. Dó đó, ta sẽ cấp quyền truy cập trên database example_database cho newuser:

bash
GRANT ALL ON example_database.* TO 'newuser'@'localhost';

Reload privileges:

bash
FLUSH PRIVILEGES;

Thoát MariaDB:

bash
quit

MariaDB hiện đã được cài đặt và bảo mật. Tiếp theo, chúng ta sẽ cài đặt PHP, thành phần cuối cùng trong LEMP Stack.

Bước 3: Cài đặt PHP

PHP là thành phần để hiển thị nội dung động, nó xử lý các tập lệnh, kết nối với cơ sở dữ liệu MySQL để lấy thông tin và chuyển nội dung đã xử lý cho máy chủ web để hiển thị.

Không giống như Apache, Nginx cần một chương trình trung gian giữa nó và trình biên dịch PHP được gọi là PHP-FPM để xử lý các PHP request. Điều này giúp Nginx cải thiện hiệu suất đáng kể trên những trang PHP. Ngoài ra, chúng ta sẽ cần php-mysql, một mô-đun PHP cho phép PHP giao tiếp với cơ sở dữ liệu dựa trên MySQL.

Nginx and PHP work

Kho lưu trữ mặc định của CentOS 7 đi kèm với phiên bản PHP 5.4 cũ và đã lỗi thời. Vì vậy, để có thể sử dụng các phiên bản PHP mới hơn, chúng ta cần cài đặt kho lưu trữ Remi theo lệnh sau:

bash (non-root)
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y

Tiếp theo, hãy chọn phiên bản PHP cần cài đặt và kích hoạt gói Remi tương ứng với phiên bản đó. Trong bài viết này, chúng ta sẽ cài đặt PHP 8.0, kích hoạt nó bằng câu lệnh:

bash (non-root)
sudo yum install install yum-utils -y && sudo yum-config-manager --enable remi-php80

Lưu ý: số 80 tương ứng với PHP 8.0, bạn có thể thay thế bằng phiên bản PHP bạn muốn (Ví dụ: 72 – 73 –74 tương ứng 7.2 –7.3 – 7.4..)

Bây giờ, có thể sử dụng lệnh yum để cài đặt php 8.0, bao gồm cả các gói kèm theo (php-fpm, php-mysql):

bash (non-root)
sudo yum install php php-mysql php-fpm -y

Kiểm tra lại phiên bản PHP vừa cài đặt bằng lệnh:

bash (non-root)
php -v
Kết quả
PHP 8.0.14 (cli) (built: Dec 16 2021 03:01:07) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.14, Copyright (c) Zend Technologies

Như vây, chúng ta đã cài đặt PHP 8.0 và các gói cần thiết kèm theo thành công.

Bước 4: Tạo user và phân quyền

Trong phần này, chúng ta sẽ đi sâu hơn vào vai trò của PHP-FPM:

  • FPM là viết tắt của “FastCGI Process Manager”, mỗi khi có 1 request được gửi đến, nó sẽ được xử lý bởi 1 worker (process), PHP-FPM có nhiệm điều khiển công việc tải request đến worker, sinh và diệt các worker.
  • Tập hợp các worker lại với nhau được gọi là 1 pool (nhóm). và với 1 Server PHP-FPM có thể có nhiều pool, trong mỗi pool sẽ lại có nhiều worker đang xử lý request.

fpm explain

Hình ảnh trên minh họa cách PHP-FPM điều phối request gửi đến, 1 worker chỉ có thể xử lý 1 request tại 1 thời điểm, trong pool này đang có 5 worker chờ để xử lý request, các request sẽ đợi đến khi có worker rảnh sẽ được PHP-FPM điều phối đi để xử lý

Lấy ví dụ thực tế với một dây chuyền sản xuất bánh kẹo. Ở đây PHP-FPM có trách nhiệm quản lý các worker (công nhân) đang đứng đợi các gói bánh (request) được chuyển tới bằng dây chuyền (Nginx). Sau khi đóng gói bánh vào thùng, công nhân (worker) đưa thùng bánh (response) trả lại dây chuyền (Nginx) để mang ra bán cho khách hàng. Mỗi công nhân chỉ xử lý 1 gói bánh 1 lúc thôi, khi xong thì mới xử lý đến gói bánh tiếp theo.

fpm example

Vậy mục đích sinh ra pool để làm gì ? Việc tạo ra các pool riêng biệt trong thực tế là việc chạy nhiều website ở trên cùng 1 Server. Trong môi trường như này, khi các website đều chạy dưới quyền 1 user, nếu có lỗ hổng từ 1 website thì hacker có thể truy cập vào website để lấy cắp dữ liệu. Vì vậy ta nên chia ra mỗi website được xử lý bởi 1 pool riêng biệt, mỗi pool lại có owner User khác nhau làm tăng khả năng bảo mật. Ngoài ra, ở mỗi pool ta còn có thể cấu hình tối ưu cho riêng từng site để tăng hiệu suất.

pool

Tìm hiểu lý thuyết đến đây là đủ rồi, chúng ta cùng bắt tay vào thực hành để tạo ra 2 website website1website2, cấu hình php-fpm cho chúng.

Đầu tiên, tạo user cho từng website, không cung cấp cho chúng quyền đăng nhập hoặc liên kết thông tin nào khác:

sudo useradd -s /sbin/nologin website1
sudo useradd -s /sbin/nologin website2

Thêm chúng vào group nginx để cho phép webserver tương tác với user và ngược lại

sudo usermod -a -G website1 nginx
sudo usermod -a -G website2 nginx

Tiếp theo, tạo thư mục lưu trữ cho từng web riêng biệt và gán quyền cho user tương ứng vừa tạo:

sudo mkdir /home/website1/public_html
sudo chown -R website1. /home/website1/public_html
sudo chmod 750 /home/website1/  
sudo mkdir /home/website2/public_html
sudo chown -R website2. /home/website2/public_html
sudo chmod 750 /home/website2/

Cài đặt này sẽ làm user website1 không thể xem hay can thiệp được vào dữ liệu user website2 (không có quyền).

Tạo php-fpm pool mới cho từng site bằng cách copy file cấu hình mặc định:

sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/fpm-website1.conf
sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/fpm-website2.conf

Xóa bỏ pool mặc định:

bash (non-root)
sudo rm -f /etc/php-fpm.d/www.conf

Cấu hình pool website1:

bash (non-root)
sudo vi /etc/php-fpm.d/fpm-website1.conf

Tìm và thay thế những dòng sau

/etc/php-fpm.d/fpm-website1.conf
. . .
; pool name ('www' here)
[www]
. . .
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
. . .
listen = 127.0.0.1:9000
. . .
;listen.owner = nobody
;listen.group = nobody
. . .

thành:

/etc/php-fpm.d/fpm-website1.conf
. . .
; pool name ('www' here)
[website1]
. . .
; RPM: apache user chosen to provide access to the same directories as httpd
user = website1
; RPM: Keep a group allowed to write in log dir.
group = website1
. . .
listen = /var/run/website1-fpm.sock
. . .
listen.owner = nginx
listen.group = nginx
. . .

Chỉnh sửa trên đã thực hiện 3 việc:

  • Cấp quyền truy cập vào các thư mục như httpd cho user website1.
  • Thay đổi php-fpm từ listen trên cổng 9000 qua TCP sang listen trực tiếp trên socket file /var/run/website1-fpm.sock.
  • Thay đổi owner và group của tệp socket trên thành nginx.

Cấu hình tương tự như vậy với website2

Tiến hành khởi động và enable php-fpm:

bash (non-root)
sudo systemctl enable --now php-fpm

Kiểm tra trạng thái:

bash (non-root)
systemctl status php-fpm
Kết quả
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2022-01-02 05:12:19 +07; 5s ago
 Main PID: 17701 (php-fpm)
   Status: "Ready to handle connections"
   CGroup: /system.slice/php-fpm.service
           ├─2105 php-fpm: master process (/etc/php-fpm.conf)
           ├─2106 php-fpm: pool website1
           ├─2107 php-fpm: pool website1
           ├─2108 php-fpm: pool website1
           ├─2109 php-fpm: pool website1
           ├─2110 php-fpm: pool website1
           ├─2111 php-fpm: pool website2
           ├─2112 php-fpm: pool website2
           ├─2113 php-fpm: pool website2
           ├─2114 php-fpm: pool website2
           └─2115 php-fpm: pool website2

Jan 02 05:12:19 centos1 systemd[1]: Starting The PHP FastCGI Process Manager...
Jan 02 05:12:19 centos1 systemd[1]: Started The PHP FastCGI Process Manager.

Như vậy, môi trường PHP đã sẵn sàng. Trong bước tiếp theo, chúng ta sẽ cấu hình Nginx để nó gửi tất cả các PHP request đến cho PHP-FPM.

Bước 5: Cấu hình Nginx

Ngoài file cấu hình mặc định /etc/nginx/nginx.conf, Nginx còn cung cấp thư mục /etc/nginx/conf.d để lưu trữ các file cấu hình cho từng trang web riêng biệt (khá tương tự với virtual host của Apache).

Chúng ta sẽ tạo mới file cấu hình cho website1website2 của mình tại thư mục này:

bash (non-root)
sudo vi /etc/nginx/conf.d/website1.conf
/etc/nginx/conf.d/website1.conf
server {
    listen  80;
    server_name  website1;

    root   /home/website1/public_html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/website1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
bash (non-root)
sudo vi /etc/nginx/conf.d/website2.conf
/etc/nginx/conf.d/website2.conf
server {
    listen  8080;
    server_name  website2;

    root   /home/website2/public_html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/website2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Giải thích:

  • listen - cổng mà site sẽ lắng nghe. website1 listen trên port 80 nên sẽ ghi đè lên cấu hình mặc định của nginx.
  • server_name – Tên domain/sub của site
  • root – đường dẫn mã nguồn
  • fastcgi_pass – đường dẫn của file sock php-fpm

Kiểm tra cú pháp của tệp cấu hình vừa tạo:

bash (non-root)
sudo nginx -t
Kết quả
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Restart Nginx để áp dụng các thay đổi:

bash (non-root)
sudo systemctl restart nginx

Bước 6: Kiểm tra hoạt động

Thêm test file trong thư mục gốc của mỗi trang web để kiểm tra cấu hình và xác minh user nào phục vụ từng trang web.

bash (non-root)
sudo vi /home/website1/public_html/index.php
/home/website1/public_html/index.php
<?php
phpinfo();

Lưu và thoát. Tiến hành làm tương tự với website2

Từ trình duyệt web, hãy truy cập địa chỉ có dạng:

http://server_host_or_IP:port/

Kiểm tra trang PHP information cho mỗi trang web. Tại phần PHP Variables, $ _SERVER ['USER'] phải là website1 cho website1website2 cho website2.

permission test

Tiếp theo, chúng ta sẽ tạo 1 file php có thực hiện kết nối đến MySQL để kiểm tra kết nối của PHP với MySQL:

bash (non-root)
sudo vi /home/website1/public_html/test.php
/var/www/website1/test.php
<?php
$host    = "localhost";
$user    = "newuser";
$pass    = "password";
$db_name = "example_database";

//create connection
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$connection = mysqli_connect($host, $user, $pass, $db_name);

//get results from database
$result = mysqli_query($connection, "SELECT * FROM example_table");
$all_property = array();  //declare an array for saving property

//showing property
echo '<table class="data-table" border="1">
        <tr class="data-heading">';  //initialize table tag
while ($property = mysqli_fetch_field($result)) {
    echo '<td>' . $property->name . '</td>';  //get field name for header
    $all_property[] = $property->name;  //save those to array
}
echo '</tr>'; //end tr tag

//showing all data
while ($row = mysqli_fetch_array($result)) {
    echo "<tr>";
    foreach ($all_property as $item) {
        echo '<td>' . $row[$item] . '</td>'; //get items using property value
    }
    echo '</tr>';
}
echo "</table>";

Giải thích: Trong file test.php trên mình đã thực hiện kết nối đến MySQL bằng thông tin của user newuser, database example_database mà chúng ta đã tạo trong bước 2. Sau đó, thực hiện lấy và show dữ liệu có trong bảng example_table.

Từ trình duyệt web, hãy truy cập địa chỉ có dạng:

http://server_host_or_IP/test.php

Và ta da, chúng ta sẽ nhìn thấy 1 trang trông như thế này: test result

Tổng kết

Như vậy, trong bài viết 123HOST đã hướng dẫn các bạn cách cài đặt và cấu hình LEMP Stack trên Centos 7 hoàn tất một cách đầy nhất. Hy vọng bài viết này sẽ giúp bạn cài đặt thành công.!


Bạn có làm được theo hướng dẫn này không?

Bài liên quan

Hướng dẫn cài đặt Nginx, MariaDB và PHP (LEMP) trên Debian 11
Hướng dẫn cài đặt Nginx, MariaDB và PHP (LEMP) trên Debian 11

Object Storage

Chuẩn S3, không giới hạn băng thông

Object Storage

Thuê Server Riêng

Chi phí thấp, cấu hình cao

Thuê Server Riêng
Thông tin tác giả
Trần Đăng Quang

devops amateur

Bình luận

Tính năng đang được phát triển

Đang tải bình luận