Bài viết này sẽ hướng dẫn bạn cách thực hiện cấu hình PHP Session Cache trên Redis nhanh chóng nhất. Cùng theo dõi nhé.

Redis là gì?

Redis được viết tắt của cụm từ Remote Dictionary Server, là hệ thống mã nguồn mở, kho lưu trữ dữ liệu có cấu trúc dạng key-value hỗ trợ nhiều loại dữ liệu khác nhau (hash, set, list, string, sorted, bitmap,...).

Nó có thể dùng như một database, message broker, bộ nhớ cache hay một queue. Ngoài ra Redis còn hỗ trợ clustering (nhóm hai hoặc nhiều server hoạt động cùng lúc) nhờ đó Redis luôn được dùng trong môi trường có yêu cầu tính sẵn sàng cao (high availability) và độ linh hoạt cao (scalable).

PHP session là gì?

Khi người dùng làm việc với một ứng dụng, mở-thay đổi-tương tác-đóng lại ứng dụng, điều này có thể coi là một phiên (session).

Ở trên máy tính cục bộ, thông tin user là ai, bắt đầu và kết thúc ứng dụng nào nó đều biết. Tuy nhiên trên môi trường Internet lại khác, các web-server không làm được điều đó, do HTTP không duy trì trạng thái.

Cá session giải quyết vấn đề này bằng cách lưu trữ thông tin người dùng được sử dụng trên nhiều trang (tên tuổi hay sở thích,..). Theo mặc định thì các biến session này tồn tại đến khi người dùng đóng trình duyệt.

Session handler là gì?

Session handler chịu trách nhiệm lưu trữ và truy xuất dữ liệu được lưu trong session. Mặc định PHP sử dụng kiểu dữ liệu file cho việc này.

Trong môi trường có nhiều web server được dùng cho việc xử lí PHP, các file lưu trữ nằm rải rác khắp web-server, làm thông tin người dùng không nhất quán khi truy cập vào website.

Cấu hình session mặc định trong php.ini :

session.save_handler = files
session.save_path = "/tmp"

Do đó, một giải pháp session handler bên ngoài (không lưu trữ local dưới dạng file) được dùng để đảm bảo tính mở rộng cho hệ thống là lưu trữ tập trung trên một hoặc nhiều Redis server.

Lợi ích của Redis

Nói về tốc độ, Redis server xử lý rất nhanh. Là một NoSQL database, nó có tốc độ lưu trữ truy xuất rất cao, hoạt động tốt với nhiều kiểu dữ liệu khác nhau dù là dữ liệu phức tạp. Dễ sử dụng, đa dạng chức năng, nhiều tùy chọn đã giúp Redis nổi bật và được tin tưởng làm cơ sở dữ liệu chính cho cá nhân và doanh nghiệp.

Hướng dẫn cài đặt và cấu hình PHP session trên Redis

Yêu cầu:

Cần 2 server khác nhau nằm trong cùng trung tâm dữ liệu và sử dụng mạng riêng, bao gồm:

  • Hệ điều hành Ubuntu server mới để cài đặt Redis (tối thiểu version 20.04)-tạm gọi là Redis.
  • Một  PHP web-server cùng với LAMP hoặc LEMP đã có trước đó-tạm gọi là web, trong ví dụ này sẽ là CentOS 7 chạy LEMP.

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

Khuyến khích nên login vào root user hoặc user non-root có quyền sudo.

$ apt-get install redis-server
Bắt đầu cài đặt Redis server

Gõ Y/y để tiếp tục.

Người dùng sẽ chờ thời gian ngắn để hoàn tất cài đặt. Lúc này, có thể dùng mẹo nhỏ để kiểm tra Redis cài đặt bình thường hay chưa. Dùng lệnh redis-cli ping.

Lúc này kết quả trả về sẽ là PONG. Để biết port mà Redis đang sử dụng, dùng lệnh netstat -tlpn, kết quả trả về số port, trạng thái hoạt động của port.

Kiểm tra trạng thái port của Redis

Sau đó hãy kiểm tra service của Redis đã bắt đầu chạy hay chưa bằng lệnh systemctl status redis-server. Nếu chưa, hãy dùng lệnh systemctl start redis-server rồi kiểm tra lại.

Kiểm tra trạng thái hoạt động của Redis-service

Bước 2: Cấu hình Redis

Trước tiên cần biết IP chỉ định để gán cho Redis, sử dụng lệnh ifconfig.

Danh sách các interface mạng đang sẵn có trên server

Trong ví dụ này, ở interface ens18 của server Redis là 192.168.168.44, người dùng sẽ gán IP này ở các bước sau để kết nối Redis và server web.

Cụ thể, tất cả các IP kể cả server web trên nằm cùng range IP với Redis đều có thể kết nối vào Redis, tuy nhiên người dùng nên hạn chế dùng IP public khi cấu hình hoặc nếu cần dùng thì phải cấu hình firewall để giới hạn truy cập vào các dữ liệu nhạy cảm, dễ bị lợi dụng tấn công.

Tiếp tục dùng trình soạn thảo nano và mở file config theo đường dẫn.

Cụ thể, tất cả các IP kể cả server web trên nằm cùng range IP với Redis đều có thể kết nối vào Redis, tuy nhiên người dùng nên hạn chế dùng IP public khi cấu hình /etc/redis/redis.conf và tiến hành gán IP.

Tìm xuống dòng lệnh sau:

bind 127.0.0.1 ::1

Dùng # để vô hiệu dòng lệnh cũ và thay vào dòng lệnh mới:

bind 192.168.168.44
Vị trí gán IP cần sửa trong file redis.conf

Sau đó hãy save và đóng file này (nhấn Ctrl + X, gõ Y và nhấn Enter).

Tiếp theo, khởi động lại service Redis bằng lệnh service redis-server restart.

Để server Redis được an toàn hơn, người dùng cần thiết lập các mục bảo vệ sau.

Bước 3: Khởi tạo mật khẩu cho Redis

Dùng nano và mở lại file conf của Redis.

nano /etc/redis/redis.conf

Tìm xuống vị trí có dòng requirepass foobared và thêm dòng RequirePass + password. Trong ví dụ này sẽ là:

requirepass strongpassword
Thiết lập mật khẩu login vào Redis

Sau khi hoàn tất hãy lưu và đóng file này. Khởi động lại service và tiến hành kiểm tra xác thực (thực hiện trực tiếp từ bên trong server Redis).

Đăng nhập Redis

Gõ lệnh redis-cli -h (ip của Redis-server) để login vào server Redis.

Lưu ý: Trong trường hợp khi đã set mật khẩu nhưng không thực hiện xác thực AUTH, hệ thống sẽ báo lỗi sau:

(error) NOAUTH Authentication required

Ở đây kết quả trả về là “empty array”, điều này nghĩa là server Redis đang trống, người dùng vẫn chưa cấu hình web server thành session handler.

Bước 4: Cài đặt extension php-redis trên webserver - cấu hình session handler

Tại bước này, cấu hình sẽ thực hiện trên web-server là CentOS 7 chạy LEMP.

apt-get install php-redis
Cài đặt extension bên phía server

Gõ Y/y và chờ cài đặt hoàn tất

Hãy dùng trình soạn thảo nano để tiến hành chỉnh sửa cấu hình như sau:

nano /etc/php/8.1/cli/php.ini

Tìm xuống mục [Session] và thay đổi giá trị của 2 dòng:

session.save_handler = files
session.save_path = "/tmp"

Trở thành:

session.save_handler = redis
session.save_path = "tcp://192.168.168.44:6379?auth=strongpassword”

Trong đó ở phần “auth" sẽ là nơi nhận mật khẩu đã được set ở bước trên.

Vị trí cần thay đổi trong file php.ini

Save và đóng file cấu hình lại, tiếp tục khởi động lại service của PHP.

với Ubuntu: service php5-fpm restart.

với CentOS 7: service php-fpm restart.

Bước 5: Kiểm tra handler session của Redis

Ở bước này, sau khi đã cấu hình ở 2 bên server, người dùng cần 1 đoạn script hoặc ứng dụng để có thể đảm bảo session được Redis handling.

Các đơn giản là tạo 1 file script đặt tên là “index.php” và lưu lại trên đường dẫn chứa trong thư mục gốc DocRoot (document-root) của phía web-server.

Tạo 1 file tên tùy ý hoặc chèn thêm nội dung vào file có sẵn là index.php trong thư mục gốc DocRoot

Trong ví dụ này, trên server web chạy LEMP có DocRoot là /var/www/testweb.com và có sẵn file là index.php Thêm các dòng lệnh tùy ý, có thể lưu lệnh cho phép đếm số lần reload lại website như trong hình.

Mở browser và nhập URL là http://(tên trang web)/index.php cho ra kết quả như sau.

Kết quả khi truy cập web

Mỗi lần reload lại website, số lần ở dưới sẽ tăng 1 lần và lặp lại. Sau đó quay lại với phía Redis server và gõ lệnh redis-cli -h 192.168.168.44 rồi nhập mật khẩu xác thực.

Tiếp tục gõ keys * để xem kết quả.

Trên đây là các bước hướng dẫn cấu hình PHP Session Cache trên Redis. Nếu gặp phải vấn đề gì trong quá trình thao tác, bạn có thể liên hệ đội ngũ Vietnix để được hỗ trợ cụ thể hơn.

BÀI VIẾT LIÊN QUAN

  1. 6 bước tạo Subdomain trên VPS Ubuntu nhanh nhất
  2. Lưu iptables rules trên Ubuntu
  3. Hướng dẫn Upgrade Nginx trên Ubuntu
  4. Cách cài đặt DirectAdmin trên CentOS, Ubuntu

VIETNIX - DỊCH VỤ HOSTING, VPS TỐC ĐỘ CAO