LEMP là gì? LEMP software stack là một nhóm phần mềm có thể được sử dụng để phục vụ các trang web động và các ứng dụng web. Đây là từ viết tắt mô tả hệ điều hành L inux, với máy chủ web Nginx (phát âm giống như “ E ngine-X”). Dữ liệu phụ trợ được lưu trữ trong cơ sở dữ liệu My SQL và xử lý động được xử lý bởi P HP.
Hướng dẫn này trình bày cách cài đặt LEMP stack trên máy chủ Ubuntu 18.04. Hệ điều hành Ubuntu sẽ xử lý yêu cầu đầu tiên. Chúng tôi sẽ mô tả cách đưa các thành phần còn lại vào hoạt động.
DataOnline cung cấp sẵn LEMP được tối ưu khi Quý khách Thuê VPS. Quý khách lựa chọn LEMP với 1 nút bấm, hệ thống hoàn thành cài đặt trong 30s.
Cài đặt LEMP Bước 1: Cài đặt máy chủ web Nginx
Để hiển thị các trang web cho khách truy cập trang web của bạn, bạn sẽ sử dụng Nginx, một máy chủ web hiện đại và hiệu quả.
Tất cả phần mềm được sử dụng trong quy trình này sẽ đến từ kho lưu trữ gói mặc định của Ubuntu. Điều này có nghĩa là bạn sẽ sử dụng bộ aptquản lý gói để hoàn tất các cài đặt cần thiết.
Vì đây là lần đầu tiên bạn sử dụng aptphiên này, hãy bắt đầu bằng cách cập nhật chỉ mục gói của máy chủ:
sudo apt update
Tiếp theo, cài đặt máy chủ:
sudo apt install nginx
Trên Ubuntu 18.04, Nginx được cấu hình để bắt đầu chạy sau khi cài đặt.
Nếu bạn đang ufw chạy tường lửa, như đã nêu trong hướng dẫn thiết lập ban đầu, bạn sẽ cần cho phép kết nối đến Nginx. Nginx tự đăng ký ufwkhi cài đặt, do đó quy trình này khá đơn giản.
Bạn nên bật cấu hình hạn chế nhất vẫn cho phép lưu lượng truy cập bạn muốn. Vì bạn chưa cấu hình SSL cho máy chủ của mình trong hướng dẫn này, bạn chỉ cần cho phép lưu lượng truy cập trên cổng 80.
Kích hoạt tính năng này bằng cách nhập lệnh sau:
sudo ufw allow 'Nginx HTTP'
Bạn có thể xác minh thay đổi bằng cách kiểm tra trạng thái:
sudo ufw status
Đầu ra của lệnh này sẽ hiển thị lưu lượng HTTP được phép:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Sau khi thêm quy tắc tường lửa mới, bạn có thể kiểm tra xem máy chủ có 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 máy chủ trong trình duyệt web.
Nếu bạn không có tên miền trỏ tới máy chủ của mình và không biết địa chỉ IP công khai của máy chủ, bạn có thể tìm nó bằng cách chạy lệnh sau:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Thao tác này sẽ in ra một vài địa chỉ IP. Bạn có thể thử từng địa chỉ trong trình duyệt web của mình.
Ngoài ra, bạn có thể kiểm tra địa chỉ IP nào có thể truy cập được khi xem từ các vị trí khác trên Internet:
curl -4 icanhazip.com
Nhập địa chỉ bạn nhận được vào trình duyệt web và bạn sẽ được đưa đến trang đích mặc định của Nginx:
http://server_domain_or_IP
Trang mặc định của Nginx
Cài đặt LEMP Bước 2 – Cài đặt MySQL để quản lý dữ liệu trang web
Bây giờ bạn đã có máy chủ web, bạn cần cài đặt MySQL (hệ thống quản lý cơ sở dữ liệu) để lưu trữ và quản lý dữ liệu cho trang web của bạn.
Cài đặt MySQL bằng cách nhập lệnh sau:
sudo apt install mysql-server
Phần mềm cơ sở dữ liệu MySQL hiện đã được cài đặt, nhưng quá trình cấu hình vẫn chưa hoàn tất.
Để bảo mật cài đặt, MySQL đi kèm một tập lệnh sẽ hỏi bạn có muốn sửa đổi một số mặc định không an toàn không. Khởi tạo tập lệnh bằng cách nhập lệnh sau:
sudo mysql_secure_installation
Tập lệnh này sẽ hỏi bạn có muốn cấu hình VALIDATE PASSWORD PLUGIN.
Cảnh báo: Bật tính năng này là một quyết định mang tính phán đoán. Nếu bật, mật khẩu không khớp với tiêu chí đã chỉ định sẽ bị MySQL từ chối với lỗi. Điều này sẽ gây ra sự cố nếu bạn sử dụng mật khẩu yếu kết hợp với phần mềm tự động cấu hình thông tin xác thực người dùng MySQL, chẳng hạn như các gói Ubuntu cho phpMyAdmin. Bạn có thể tắt xác thực, nhưng bạn nên luôn sử dụng mật khẩu mạnh và duy nhất cho thông tin xác thực cơ sở dữ liệu.
Trả lời Y là có hoặc trả lời bất kỳ câu hỏi nào khác để tiếp tục mà không cần bật.
VALIDATE PASSWORD PLUGIN 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 plugin? Press y|Y for Yes, any other key for No:
Nếu bạn đã bật xác thực, tập lệnh cũng sẽ yêu cầu bạn chọn mức xác thực mật khẩu. Hãy nhớ rằng nếu bạn nhập 2 – cho mức mạnh nhất – bạn sẽ nhận được lỗi khi cố gắng đặt bất kỳ mật khẩu nào không chứa số, chữ hoa và chữ thường, ký tự đặc biệt hoặc dựa trên các từ thông dụng trong từ điển.
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
Tiếp theo, bạn sẽ được yêu cầu gửi và xác nhận mật khẩu gốc:
Please set the password for root here. New password: Re-enter new password:
Đối với các câu hỏi còn lại, bạn nên nhấn Yvà nhấn ENTERphím 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à tải các quy tắc mới này để MySQL ngay lập tức tôn trọng những thay đổi mà chúng tôi đã thực hiện.
Lưu ý rằng trong các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản mới hơn), người dùng MySQL gốc được thiết lập để xác thực bằng auth_socketplugin theo mặc định thay vì bằng mật khẩu. Điều này cho phép bảo mật và khả năng sử dụng cao hơn trong nhiều trường hợp, nhưng cũng có thể làm phức tạp mọi thứ khi bạn cần cho phép một chương trình bên ngoài (ví dụ: phpMyAdmin) truy cập vào người dùng.
Nếu việc sử dụng auth_socketplugin để truy cập MySQL phù hợp với quy trình làm việc của bạn, bạn có thể tiến hành Bước 3. Tuy nhiên, nếu bạn thích sử dụng mật khẩu khi kết nối với MySQL với tư cách là root , bạn sẽ cần chuyển phương thức xác thực của nó từ auth_socketthành mysql_native_password. Để thực hiện việc này, hãy mở dấu nhắc MySQL từ thiết bị đầu cuối của bạn:
sudo mysql
Tiếp theo, hãy kiểm tra phương thức xác thực mà mỗi tài khoản người dùng MySQL của bạn sử dụng bằng lệnh sau:
SELECT> user,authentication_string,plugin,host FROM mysql.user;
Output +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)
Ví dụ này chứng minh rằng người dùng root thực sự xác thực bằng auth_socketplugin. Để cấu hình tài khoản root xác thực bằng mật khẩu, hãy chạy ALTER USERlệnh sau. Hãy chắc chắn thay đổi passwordthành mật khẩu mạnh mà bạn chọn:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Sau đó, chạy FLUSH PRIVILEGESđể yêu cầu máy chủ tải lại bảng cấp quyền và áp dụng những thay đổi mới của bạn:
FLUSH PRIVILEGES;
Kiểm tra lại phương thức xác thực được mỗi người dùng sử dụng để xác nhận rằng root không còn xác thực bằng auth_socketplugin nữa:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)
Ví dụ đầu ra này cho thấy người dùng MySQL gốc hiện xác thực bằng mật khẩu. Sau khi xác nhận điều này trên máy chủ của riêng bạn, bạn có thể thoát khỏi MySQL shell:
exit
Lưu ý : Sau khi cấu hình người dùng MySQL gốc của bạn để xác thực bằng mật khẩu, bạn sẽ không còn có thể truy cập MySQL bằng sudo mysqllệnh đã sử dụng trước đó. Thay vào đó, bạn phải chạy lệnh sau:
mysql -u root -p
Sau khi nhập mật khẩu đã đặt, bạn sẽ nhận được lời nhắc của MySQL.
Tại thời điểm này, hệ thống cơ sở dữ liệu của bạn đã được thiết lập và bạn có thể chuyển sang cài đặt PHP.
Cài đặt LEMP Bước 3 – Cài đặt PHP và cấu hình Nginx để sử dụng Bộ xử lý PHP
Nginx hiện đã được cài đặt để phục vụ các trang của bạn và MySQL đã được cài đặt để lưu trữ và quản lý dữ liệu của bạn. Tuy nhiên, bạn vẫn chưa có bất kỳ thứ gì có thể tạo nội dung động. Đây là lúc PHP phát huy tác dụng.
Vì Nginx không chứa xử lý PHP gốc như một số máy chủ web khác, bạn sẽ cần phải cài đặt php-fpm, viết tắt của “fastCGI process manager”. Sau đó, bạn sẽ yêu cầu Nginx chuyển các yêu cầu PHP đến phần mềm này để xử lý.
Lưu ý : Tùy thuộc vào nhà cung cấp đám mây của bạn, bạn có thể cần thêm universekho lưu trữ của Ubuntu, bao gồm phần mềm miễn phí và mã nguồn mở do cộng đồng Ubuntu duy trì, trước khi cài đặt php-fpmgói. Bạn có thể thực hiện việc này bằng cách nhập lệnh sau:
sudo add-apt-repository universe
Cài đặt php-fpmmô-đun cùng với một gói trợ giúp bổ sung, php-mysql, cho phép PHP giao tiếp với cơ sở dữ liệu phụ trợ của bạn. Quá trình cài đặt sẽ kéo các tệp lõi PHP cần thiết vào. Thực hiện việc này bằng cách nhập lệnh sau:
sudo apt install php-fpm php-mysql
Ngay cả khi đã cài đặt tất cả các thành phần ngăn xếp LEMP cần thiết, bạn vẫn cần phải thực hiện một vài thay đổi cấu hình để yêu cầu Nginx sử dụng bộ xử lý PHP cho nội dung động.
Điều này được thực hiện ở cấp độ khối máy chủ (khối máy chủ tương tự như máy chủ ảo của Apache). Để thực hiện điều này, hãy tạo tệp cấu hình khối máy chủ mới bằng trình soạn thảo văn bản ưa thích của bạn trong /etc/nginx/sites-available/thư mục. Trong ví dụ này, chúng tôi sẽ sử dụng nanovà tệp cấu hình khối máy chủ mới sẽ ghi là your_domain, vì vậy bạn có thể thay thế nó bằng thông tin của riêng bạn:
sudo nano /etc/nginx/sites-available/your_domain
Bằng cách tạo tệp cấu hình khối máy chủ mới thay vì chỉnh sửa tệp mặc định, bạn sẽ có thể khôi phục cấu hình mặc định nếu cần.
Thêm nội dung sau, được lấy và sửa đổi một chút từ tệp cấu hình khối máy chủ mặc định, vào tệp cấu hình khối máy chủ mới của bạn:
/etc/nginx/sites-available/tên_miền_của_bạn
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name your_domain;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Sau đây là chức năng của từng chỉ thị và khối vị trí:
listen— Xác định cổng mà Nginx sẽ lắng nghe. Trong trường hợp này, nó sẽ lắng nghe trên cổng 80, cổng mặc định cho HTTP.
root— Xác định gốc tài liệu nơi lưu trữ các tập tin do trang web cung cấp.
index— Cấu hình Nginx để ưu tiên phục vụ các tệp được đặt tên index.phpkhi tệp chỉ mục được yêu cầu nếu chúng khả dụng.
server_name— Xác định khối máy chủ nào sẽ được sử dụng cho một yêu cầu nhất định đến máy chủ của bạn. Trỏ chỉ thị này đến tên miền hoặc địa chỉ IP công khai của máy chủ của bạn.
location /— Khối vị trí đầu tiên bao gồm một try_fileschỉ thị, kiểm tra sự tồn tại của các tệp khớp với yêu cầu URI. Nếu Nginx không tìm thấy tệp phù hợp, nó sẽ trả về lỗi 404.
location ~ \.php$— Khối vị trí này xử lý quá trình PHP thực tế bằng cách trỏ Nginx tới fastcgi-php.conftệp cấu hình và php7.2-fpm.socktệp khai báo socket nào được liên kết với php-fpm.
location ~ /\.ht— Khối vị trí cuối cùng xử lý .htaccesscác tệp mà Nginx không xử lý. Bằng cách thêm deny allchỉ thị, nếu bất kỳ .htaccesstệp nào vô tình tìm được đường vào gốc tài liệu, chúng sẽ không được phục vụ cho khách truy cập.
Sau khi thêm nội dung này, hãy lưu và đóng tệp. Nếu bạn đang sử dụng nano, bạn có thể thực hiện việc này bằng cách nhấn CTRL + Xsau đó Yvà ENTER. Kích hoạt khối máy chủ mới của bạn bằng cách tạo liên kết tượng trưng từ tệp cấu hình khối máy chủ mới của bạn (trong /etc/nginx/sites-available/thư mục) đến /etc/nginx/sites-enabled/thư mục:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
Sau đó, hủy liên kết tệp cấu hình mặc định khỏi /sites-enabled/thư mục:
sudo unlink /etc/nginx/sites-enabled/default
Lưu ý : Nếu bạn cần khôi phục cấu hình mặc định, bạn có thể thực hiện bằng cách tạo lại liên kết tượng trưng bằng lệnh như sau:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
Kiểm tra lỗi cú pháp trong tệp cấu hình mới của bạn:
sudo nginx -t
Nếu có bất kỳ lỗi nào được báo cáo, hãy quay lại và kiểm tra lại tệp của bạn trước khi tiếp tục.
Khi bạn đã sẵn sàng, hãy tải lại Nginx để thực hiện những thay đổi cần thiết:
sudo systemctl reload nginx
Như vậy là kết thúc quá trình cài đặt và cấu hình ngăn xếp LEMP của bạn. Tuy nhiên, cần thận trọng khi xác nhận rằng tất cả các thành phần có thể giao tiếp với nhau.
Cài đặt LEMP Bước 4 – Tạo tệp PHP để kiểm tra cấu hình
Bây giờ, ngăn xếp LEMP của bạn đã được thiết lập hoàn chỉnh. Bạn có thể kiểm tra để xác thực rằng Nginx có thể chuyển giao .phpcác tệp chính xác cho bộ xử lý PHP.
Để thực hiện việc này, hãy sử dụng trình soạn thảo văn bản ưa thích của bạn để tạo một tệp PHP thử nghiệm có tên info.phptrong thư mục gốc của tài liệu:
sudo nano /var/www/html/info.php
Nhập các dòng sau vào tệp mới. Đây là mã PHP hợp lệ sẽ trả về thông tin về máy chủ của bạn:
/var/www/html/info.php <?php phpinfo();
Khi hoàn tất, hãy lưu và đóng tệp.
Bây giờ, bạn có thể truy cập trang này trong trình duyệt web của mình bằng cách truy cập vào tên miền hoặc địa chỉ IP công khai của máy chủ theo sau là /info.php:
http://your_server_domain_or_IP/info.php
Trình duyệt của bạn sẽ tải một trang web như sau được tạo bởi PHP với thông tin về máy chủ của bạn:
Thông tin trang PHP
Nếu trang của bạn giống như mô tả, bạn đã thiết lập xử lý PHP với Nginx thành công.
Sau khi xác minh rằng Nginx hiển thị trang đúng, tốt nhất là xóa tệp bạn đã tạo vì nó có thể cung cấp cho người dùng trái phép một số gợi ý về cấu hình của bạn, giúp họ có thể đột nhập. Bạn luôn có thể tạo lại tệp này nếu cần sau này.
Bây giờ, hãy xóa tệp:
sudo rm /var/www/html/info.php
Với điều đó, bạn đã có một ngăn xếp LEMP được cấu hình và hoạt động đầy đủ trên máy chủ Ubuntu 18.04 của mình.
Phần kết luận Cài đặt LEMP
LEMP stack là một nền tảng mạnh mẽ cho phép bạn thiết lập và cung cấp gần như mọi trang web hoặc ứng dụng từ máy chủ của mình.
Có một số bước tiếp theo bạn có thể thực hiện từ đây. Ví dụ, bạn nên đảm bảo rằng các kết nối đến máy chủ của mình được bảo mật. Để làm được điều này, bạn có thể bảo mật cài đặt Nginx của mình bằng Let’s Encrypt . Bằng cách làm theo hướng dẫn này, bạn sẽ có được chứng chỉ TLS/SSL miễn phí cho máy chủ của mình, cho phép máy chủ phục vụ nội dung qua HTTPS.