LEMP stack là một tổ hợp phần mềm dùng để cung cấp các trang web động và ứng dụng web viết bằng PHP. Đây là từ viết tắt mô tả một hệ điều hành Linux, với web server Nginx (phát âm như “Engine-X”). Dữ liệu backend được lưu trong cơ sở dữ liệu MySQL và PHP chịu trách nhiệm xử lý các tác vụ động.
Bài hướng dẫn này sẽ hướng dẫn cách cài đặt LEMP trên server Ubuntu. Do hệ điều hành này đã đảm nhiệm phần Linux, chúng ta sẽ tìm hiểu cách cài đặt và tích hợp các thành phần còn lại.
Hướng dẫn cài đặt và cấu hình LEMP stack trên Ubuntu
Điều kiện tiên quyết
Để làm theo bài hướng dẫn này, bạn cần có quyền truy cập vào một server Ubuntu với tài khoản người dùng thông thường (không phải root), và đã bật firewall trên server.
Bước 1: Cài đặt web server Nginx
Để hiển thị trang web cho người dùng, chúng ta sẽ sử dụng Nginx, một web server hiệu năng cao. Ta sẽ dùng trình quản lý gói APT để cài đặt phần mềm này.
Vì đây là lần đầu tiên bạn sử dụng apt
trong session này, hãy bắt đầu bằng cách cập nhật danh sách gói của server:
sudo apt update
Sau đó, chạy apt install
để cài đặt Nginx:
sudo apt install nginx
Khi được hỏi, nhấn Y
và ENTER
để xác nhận bạn muốn cài đặt Nginx. Khi cài đặt hoàn tất, web server Nginx sẽ được kích hoạt và chạy trên server Ubuntu của bạn.
Nếu bạn đã bật firewall ufw
, bạn sẽ cần thiết lập nó để cho phép kết nối mạng đến Nginx. Nginx tự động đăng ký một vài profile ứng dụng UFW khác nhau sau khi cài đặt. Để kiểm tra các profile UFW nào có sẵn, hãy chạy lệnh này:
sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Bạn nên bật profile có giới hạn chặt chẽ nhất mà vẫn cho phép lưu lượng truy cập bạn cần. Vì hướng dẫn này chưa có cấu hình SSL cho server, bạn chỉ cần cho phép lưu lượng HTTP thông thường trên cổng 80
bằng cách chạy lệnh sau:
sudo ufw allow 'Nginx HTTP'
Bạn có thể xác minh lại bằng cách kiểm tra trạng thái của firewall:
sudo ufw status
Kết quả này cho thấy lưu lượng HTTP hiện đã được cho phép:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Với rule vừa mới thêm, bạn có thể kiểm tra xem server có đang hoạt động hay không bằng cách truy cập tên miền hoặc địa chỉ IP công khai của server trong trình duyệt web.
Nếu bạn không có tên miền trỏ đến server và không biết địa chỉ IP công khai của server, bạn có thể tìm nó bằng cách chạy một trong các lệnh sau:
ip addr show
hostname -I
Chúng sẽ in ra một vài địa chỉ IP. Bạn có thể thử lần lượt từng địa chỉ trong trình duyệt web của mình.
Có một cách khác là bạn có thể kiểm tra địa chỉ IP nào có thể truy cập được từ nơi khác trên internet:
curl -4 icanhazip.com
Nhập địa chỉ bạn nhận được ở trên vào trình duyệt web và nó sẽ đưa bạn đến trang đích mặc định của Nginx:
http://server_domain_or_IP
Nếu bạn thấy trang này, điều đó có nghĩa là bạn đã cài đặt thành công Nginx và đã cho phép lưu lượng HTTP tới web server của mình.
Bước 2: Cài đặt MySQL
Sau khi đã có một web server, bạn cần cài đặt hệ thống cơ sở dữ liệu để lưu trữ và quản lý dữ liệu cho trang web của mình. MySQL là một hệ thống quản lý cơ sở dữ liệu phổ biến được sử dụng trong các môi trường PHP.
Một lần nữa, hãy sử dụng apt
để tải và cài đặt phần mềm này:
sudo apt install mysql-server
Khi được hỏi, hãy xác nhận cài đặt bằng cách nhấn Y
, sau đó ENTER
.
Khi cài đặt hoàn tất, bạn nên chạy một script bảo mật đi kèm với MySQL. Script này sẽ loại bỏ một số cài đặt mặc định không an toàn và khóa quyền truy cập vào hệ thống cơ sở dữ liệu của bạn.
Chạy script tương tác này bằng cách chạy lệnh sau:
sudo mysql_secure_installation
Bạn sẽ được hỏi có muốn cấu hình VALIDATE PASSWORD COMPONENT
hay không. Cần cân nhắc khi bật tính năng này. Nếu được bật, các mật khẩu không khớp với tiêu chí đã chỉ định sẽ bị MySQL từ chối và báo lỗi.
Tuy không cần thiết phải bật nó (nghĩ là cứ để chế độ xác thực bị vô hiệu hóa như ban đầu), bạn phải sử dụng mật khẩu mạnh và duy nhất cho các thông tin đăng nhập cơ sở dữ liệu.
Trả lời Y
nếu đồng ý kích hoạt. Nếu không muốn bật nó, nhấn bất cứ ký tự nào khác để tiếp tục:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No:
Nếu bạn trả lời “yes”, bạn sẽ được yêu cầu chọn một mức độ xác thực mật khẩu. Lưu ý rằng nếu bạn nhập 2
cho mức mạnh nhất, bạn sẽ gặp lỗi khi đặt mật khẩu không chứa cả số, chữ hoa, chữ thường và ký tự đặc biệt:
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Bất kể bạn có chọn thiết lập VALIDATE PASSWORD COMPONENT
hay không, server sẽ yêu cầu bạn chọn và xác nhận mật khẩu cho người dùng root của MySQL. Đừng nhầm lẫn người dùng này với root của hệ thống.
Người dùng root của cơ sở dữ liệu là một người dùng quản trị (admin) có toàn quyền trên hệ thống cơ sở dữ liệu đó. Ngay cả khi bạn đã đặt mật khẩu cho người dùng root của MySQL, phương thức xác thực mặc định cũng không yêu cầu nó. Tuy nhiên, bạn nên luôn đặt một mật khẩu mạnh ở bước này như một biện pháp an toàn bổ sung.
Nếu bạn đã bật xác thực mật khẩu, bạn sẽ thấy độ mạnh của mật khẩu root bạn đã nhập và server sẽ hỏi bạn có muốn tiếp tục với mật khẩu đó không. Nếu bạn hài lòng với mật khẩu hiện tại, hãy nhấn Y
cho “yes” tại dấu nhắc:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
Đối với các câu hỏi còn lại, nhấn Y
và phím ENTER
tại mỗi dấu nhắc. Thao tác này sẽ xóa một số người dùng ẩn danh và cơ sở dữ liệu thử nghiệm, vô hiệu hóa đăng nhập root từ xa và kích hoạt ngay các quy tắc mà bạn đã quy định cho MySQL.
Khi bạn hoàn tất, hãy kiểm tra xem bạn có thể đăng nhập vào console của MySQL không:
sudo mysql
Lệnh này sẽ kết nối đến server MySQL với tư cách là người dùng quản trị cơ sở dữ liệu root (do ta dùng sudo
khi chạy lệnh này). Bạn sẽ nhận được kết quả sau:
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.
mysql>
Để thoát khỏi console MySQL, hãy nhập:
exit
Lưu ý rằng bạn không cần cung cấp mật khẩu để kết nối với tư cách người dùng root, mặc dù bạn đã đặt một mật khẩu khi chạy script mysql_secure_installation
. Lý do là khi được cài đặt trên Ubuntu, phương thức xác thực mặc định cho người dùng quản trị trên MySQL là auth_socket
, thay vì một phương thức dùng mật khẩu.
Tuy điều này nghe thoạt qua có vẻ như là một vấn đề bảo mật, nó làm cho server cơ sở dữ liệu của chúng ta an toàn hơn. Những người dùng duy nhất được phép đăng nhập với tư cách người dùng root MySQL là những người dùng hệ thống có quyền sudo
kết nối từ console hoặc thông qua một ứng dụng chạy với các quyền tương tự. Điều đó có nghĩa là bạn sẽ không thể sử dụng người dùng root quản trị cơ sở dữ liệu để kết nối từ ứng dụng PHP của mình.
Để tăng cường bảo mật, tốt nhất là bạn nên có các tài khoản người dùng chuyên dụng với các quyền hạn chế hơn được thiết lập cho mỗi cơ sở dữ liệu, đặc biệt nếu bạn dự định có nhiều cơ sở dữ liệu trên server của mình.
Lưu ý: Một số phiên bản cũ hơn của thư viện PHP có sẵn mysqlnd
không hỗ trợ phương thức xác thực mặc định cho người dùng trong MySQL 8 caching_sha2_authentication
. Vì lý do đó, khi tạo người dùng cơ sở dữ liệu cho các ứng dụng PHP trên MySQL 8, cần đảm bảo rằng chúng được cấu hình để sử dụng mysql_native_password
thay thế. Chúng ta sẽ trình bày cách làm điều đó trong Bước 6.
Server MySQL của bạn hiện đã được cài đặt và thiết lập bảo mật. Tiếp theo, bạn sẽ cài đặt PHP, thành phần cuối cùng trong bộ LEMP.
Bước 3: Cài đặt PHP
Bạn đã cài đặt Nginx để phục vụ nội dung và MySQL để lưu trữ và quản lý dữ liệu. Bây giờ bạn có thể cài đặt PHP để xử lý code và tạo nội dung động cho web server.
Trong khi Apache nhúng thẳng trình thông dịch PHP vào mỗi request, Nginx cần một chương trình bên ngoài để xử lý PHP, hoạt động như một cầu nối giữa chính trình thông dịch PHP và web server. Điều này tăng hiệu suất tổng thể trên hầu hết các trang web PHP, nhưng nó cũng đòi hỏi nhiều cấu hình bổ sung hơn.
Bạn sẽ cần cài đặt php8.1-fpm
(viết tắt của “PHP fastCGI process manager”) và sử dụng phiên bản PHP mới nhất để yêu cầu Nginx chuyển các request PHP đến phần mềm này để xử lý. Ngoài ra, bạn sẽ cần php-mysql
, một module PHP cho phép PHP giao tiếp với các cơ sở dữ liệu dựa trên MySQL. Các gói PHP chính sẽ tự động được cài đặt dưới dạng gói phụ thuộc.
Để cài đặt các gói php8.1-fpm
và php-mysql
, hãy chạy:
sudo apt install php8.1-fpm php-mysql
Khi được hỏi, nhấn Y
và ENTER
để xác nhận cài đặt.
Bây giờ bạn đã cài đặt xong các thành phần PHP của mình. Tiếp theo, bạn sẽ cần cấu hình Nginx để sử dụng chúng.
Bước 4: Cấu hình Nginx để sử dụng bộ xử lý PHP
Khi sử dụng Nginx, chúng ta có thể tạo các server block (các khối cấu hình cho từng tên miền, tương tự như virtual host trong Apache) để chứa cấu hình chi tiết và phục vụ nhiều tên miền trên một server duy nhất. Trong hướng dẫn này, chúng ta sẽ sử dụng your_domain làm tên miền ví dụ.
Trên Ubuntu, Nginx có một server block được bật mặc định để phục vụ tài liệu từ thư mục /var/www/html
. Mặc dù điều này hoạt động tốt cho một trang web đơn giản, nó có thể trở nên khó quản lý nếu bạn đang phục vụ nhiều trang web.
Thay vì sửa đổi /var/www/html
, chúng ta sẽ tạo một cấu trúc thư mục con trong /var/www
cho trang web your_domain trong khi để /var/www/html
làm thư mục mặc định cho các request từ client không khớp với bất kỳ tên miền nào.
Tạo thư mục gốc web cho your_domain như sau:
sudo mkdir /var/www/your_domain
Tiếp theo, gán quyền sở hữu thư mục với biến môi trường $USER
. Biến này sẽ tự tham chiếu đến người dùng hệ thống hiện tại của bạn:
sudo chown -R $USER:$USER /var/www/your_domain
Sau đó, tạo một file cấu hình mới trong thư mục sites-available
của Nginx bằng editor bạn hay dùng. Ở đây, chúng ta sẽ sử dụng nano
:
sudo nano /etc/nginx/sites-available/your_domain
Thao tác này sẽ tạo một file trống mới. Hãy chèn các cấu hình sau vào file đó:
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;
}
}
Dưới đây là giải thích ý nghĩa của các directive (các “chỉ thị”, là các quy định chức năng/nguyên tắc trong cấu hình) và khối location ở trên:
listen
— Xác định port mà Nginx sẽ lắng nghe. Trong trường hợp này, nó sẽ lắng nghe trên cổng80
, cổng mặc định cho HTTP.root
— Xác định thư mục gốc chứa các file được phục vụ bởi trang web này.index
— Xác định thứ tự Nginx sẽ ưu tiên các file index cho trang web này. Thường thì ta nên liệt kê fileindex.html
với độ ưu tiên cao hơn fileindex.php
để cho phép tạo nhanh một trang thông báo bảo trì trong các ứng dụng PHP. Bạn có thể điều chỉnh các cài đặt này để phù hợp hơn với nhu cầu ứng dụng của mình.server_name
— Xác định tên miền và/hoặc địa chỉ IP mà server block này sẽ phản hồi. Trỏ chỉ thị này đến tên miền hoặc địa chỉ IP công khai của server của bạn.location /
— Khối location đầu tiên bao gồm một chỉ thịtry_files
, kiểm tra sự tồn tại của các file hoặc thư mục khớp với một yêu cầu URL. Nếu Nginx không thể tìm thấy tài nguyên thích hợp, nó sẽ trả về lỗi 404.location ~ \\\\.php$
— Khối location này xử lý việc xử lý PHP bằng cách trỏ Nginx đến file cấu hìnhfastcgi-php.conf
và filephp8.1fpm.sock
(file này khai báo socket nào được liên kết vớiphp-fpm
).location ~ /\\\\.ht
— Khối location cuối cùng xử lý các file.htaccess
, mà Nginx không xử lý. Khi thêm chỉ thịdeny all
, bất kỳ file.htaccess
nào tình cờ lọt vào thư mục gốc sẽ không được phục vụ cho client truy cập.
Khi bạn chỉnh sửa xong, hãy lưu và đóng file. Nếu bạn đang sử dụng nano
, bạn có thể làm điều đó bằng cách nhấn CTRL+X
, sau đó Y
và ENTER
để xác nhận.
Kích hoạt cấu hình của bạn bằng cách tạo liên kết cho file cấu hình đến thư mục sites-enabled
của Nginx:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
Sau đó, hủy liên kết file cấu hình mặc định khỏi thư mục /sites-enabled
:
sudo unlink /etc/nginx/sites-enabled/default
Lưu ý: Nếu bạn cần khôi phục lại cấu hình mặc định, bạn có thể tạo lại liên kết mềm đã xóa ở trên như sau:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
Lệnh ở dưới sẽ yêu cầu Nginx sử dụng cấu hình trong lần tải lại tiếp theo. Bạn có thể kiểm tra cấu hình của mình để tìm lỗi cú pháp bằng cách chạy lệnh sau:
sudo nginx -t
Nếu có bất kỳ lỗi, hãy xem lại file cấu hình của bạn trước khi tiếp tục. Khi đã sẵn sàng, hãy tải lại Nginx để áp dụng các thay đổi:
sudo systemctl reload nginx
Trang web mới của bạn bây giờ hiện đã hoạt động, nhưng thư mục gốc web /var/www/your_domain
vẫn trống. Tạo một file index.html
ở vị trí đó để bạn có thể kiểm tra xem server block mới của mình có hoạt động như mong đợi không:
nano /var/www/your_domain/index.html
Điền nội dung sau trong file này:
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>
Bây giờ hãy vào trình duyệt của bạn và truy cập tên miền hoặc địa chỉ IP của server (như được liệt kê trong chỉ thị server_name
trong file cấu hình server block của bạn):
http://server_domain_or_IP
Bạn sẽ thấy một trang như sau:
Nếu bạn thấy được trang này, điều đó có nghĩa là server block Nginx của bạn đang hoạt động như mong đợi.
Bạn có thể giữ lại file này làm trang đích tạm thời cho ứng dụng của mình cho đến khi tạo một file index.php
để thay thế nó. Khi bạn làm điều đó, hãy nhớ xóa hoặc đổi tên file index.html
khỏi thư mục gốc tài liệu do theo mặc định nó sẽ được ưu tiên hơn file index.php
.
Bộ phần mềm LEMP của bạn hiện đã được cấu hình đầy đủ. Trong bước tiếp theo, bạn sẽ tạo một script PHP để kiểm tra xem Nginx có thực sự có thể xử lý các file .php
trong trang web mới được cấu hình của bạn hay không.
Bước 5: Kiểm tra PHP với Nginx
Bộ LEMP của bạn bây giờ đã được thiết lập hoàn chỉnh. Bạn có thể kiểm tra nó để xác thực rằng Nginx có thể chuyển giao các file .php
một cách chính xác cho bộ xử lý PHP của bạn.
Bạn có thể làm điều này bằng cách tạo một file PHP thử nghiệm trong thư mục gốc tài liệu của bạn. Tạo một file mới có tên info.php
ở đó:
nano /var/www/your_domain/info.php
Thêm các dòng sau vào file mới. Chúng là code PHP để trả về thông tin về server của bạn:
<?php
phpinfo();
Lưu và đóng file khi hoàn tất.
Bây giờ bạn có thể truy cập trang đó trong trình duyệt web với tên miền hoặc địa chỉ IP công khai đã thiết lập trong file cấu hình Nginx kèm theo /info.php
ở sau:
http://server_domain_or_IP/info.php
Bạn sẽ nhận được một trang web chứa thông tin chi tiết về server của mình:
Sau khi kiểm tra thông tin liên quan về server PHP thông qua trang đó, tốt nhất là bạn nên xóa file đã tạo này vì nó chứa thông tin nhạy cảm về môi trường PHP và server Ubuntu của bạn. Bạn có thể sử dụng rm
để xóa file đó:
sudo rm /var/www/your_domain/info.php
Bạn luôn có thể tạo lại file này nếu cần sau này.
Bước 6: Kiểm tra kết nối cơ sở dữ liệu từ PHP (không bắt buộc)
Nếu bạn muốn kiểm tra xem PHP có thể kết nối với MySQL và thực thi các truy vấn cơ sở dữ liệu hay không, bạn có thể tạo một bảng thử nghiệm với dữ liệu giả và truy vấn nội dung của nó từ một script PHP. Trước khi làm điều đó, hãy tạo một cơ sở dữ liệu thử nghiệm và một người dùng MySQL hoàn toàn mới được cấu hình để truy cập nó.
Lưu ý: Một số phiên bản cũ hơn của thư viện PHP có sẵn mysqlnd
không hỗ trợ phương thức xác thực mặc định cho MySQL 8 caching_sha2_authentication
. Bạn có thể cần phải cấu hình và sử dụng mysql_native_password
để thay thế.
Chúng ta sẽ tạo một cơ sở dữ liệu có tên example_database và một người dùng có tên example_user. Bạn có thể thay thế những tên này bằng các giá trị khác.
Đầu tiên, kết nối với console MySQL bằng tài khoản root:
sudo mysql
Để tạo một cơ sở dữ liệu mới, hãy chạy lệnh sau từ console MySQL:
CREATE DATABASE example_database;
Bây giờ bạn có thể tạo một người dùng mới và cấp cho họ toàn quyền trên cơ sở dữ liệu tùy chỉnh mà bạn đã tạo.
Lệnh sau tạo một người dùng mới có tên example_user
, sử dụng mysql_native_password
làm phương thức xác thực mặc định. Chúng ta đang đặt mật khẩu của user này là password
, nhưng bạn nên thay thế giá trị này bằng một mật khẩu an toàn do bạn tự chọn.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
Bây giờ chúng ta cần cấp cho người dùng này quyền trên cơ sở dữ liệu example_database
:
GRANT ALL ON example_database.* TO 'example_user'@'%';
Điều này sẽ cấp cho người dùng example_user toàn quyền trên cơ sở dữ liệu example_database đồng thời ngăn người dùng này tạo hoặc sửa đổi các cơ sở dữ liệu khác trên server của bạn.
Thoát khỏi shell MySQL bằng lệnh sau:
exit
Bạn có thể kiểm tra xem người dùng mới có quyền phù hợp hay không bằng cách đăng nhập lại vào console MySQL, lần này sử dụng thông tin đăng nhập mới vừa tạo. Lưu ý cờ -p
trong lệnh này sẽ nhắc bạn nhập mật khẩu đã sử dụng khi tạo người dùng example_user:
mysql -u example_user -p
Sau khi đăng nhập vào console MySQL, hãy xác nhận rằng bạn có quyền truy cập vào cơ sở dữ liệu example_database:
SHOW DATABASES;
Lệnh này sẽ trả về kết quả sau:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
Tiếp theo, chúng ta sẽ tạo một bảng thử nghiệm có tên todo_list từ console MySQL với các câu lệnh sau:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);
Hãy thử chèn một vài hàng dữ liệu vào bảng thử nghiệm. Bạn có thể lặp lại lệnh ở dưới nhiều lần nhưng với các giá trị khác nhau:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");
Dùng lệnh này để xác nhận rằng dữ liệu đã được lưu thành công vào bảng của bạn:
SELECT * FROM example_database.todo_list;
Kết quả của bạn sẽ hiển thị như sau:
+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
4 rows in set (0.000 sec)
Sau khi xác nhận rằng bạn có dữ liệu hợp lệ trong bảng thử nghiệm của mình, thoát khỏi console MySQL:
exit
Bây giờ bạn có thể tạo script PHP sẽ kết nối với MySQL và truy vấn dữ liệu của bạn. Tạo một file PHP mới trong thư mục web gốc tùy chỉnh của bạn bằng một editor nào đó (ở đây ta dùng nano
):
nano /var/www/your_domain/todo_list.php
Script PHP dưới đây kết nối với cơ sở dữ liệu MySQL và truy vấn nội dung của bảng todo_list
, sau đó hiển thị kết quả trong một danh sách. Nếu có vấn đề với kết nối cơ sở dữ liệu, nó sẽ cho ra một lỗi.
Thêm nội dung sau vào script todo_list.php
:
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
Lưu và đóng file khi bạn chỉnh sửa xong.
Bây giờ bạn có thể truy cập trang này trong trình duyệt web với tên miền hoặc địa chỉ IP công khai đã được cấu hình cho trang web của bạn, kèm theo sau là /todo_list.php
:
http://server_domain_or_IP/todo_list.php
Bạn sẽ nhận được một trang như sau. Nó hiển thị nội dung bạn đã chèn vào bảng thử nghiệm của mình:
Điều đó có nghĩa là môi trường PHP của bạn đã sẵn sàng để kết nối và tương tác với server MySQL.
Kết luận
Trong hướng dẫn này, bạn đã biết cách xây dựng một nền tảng LEMP stack linh hoạt để phục vụ các trang web và ứng dụng PHP, sử dụng Nginx làm web server và MySQL làm hệ thống cơ sở dữ liệu. Tiếp theo, bạn có thể học cách tăng cường bảo mật trang web của mình với chứng chỉ miễn phí từ Let’s Encrypt, cũng như các bài hướng dẫn khác có liên quan đến Nginx, MySQL, hoặc PHP.