Thứ sáu, 21/08/2015 | 00:00 GMT+7

Cách thiết lập server Redis làm Trình xử lý phiên cho PHP trên Ubuntu 14.04

Redis là một hệ thống lưu trữ và bộ nhớ cache key-value open-souce , còn gọi là server cấu trúc dữ liệu để hỗ trợ nâng cao cho một số kiểu dữ liệu, chẳng hạn như băm, danh sách, tập hợp và bitmap, trong số những loại khác. Nó cũng hỗ trợ phân cụm, điều này làm cho nó thường được sử dụng cho các môi trường có khả năng mở rộng và khả dụng cao.

Trong hướng dẫn này, ta sẽ xem cách cài đặt và cấu hình server Redis bên ngoài được sử dụng làm trình xử lý phiên cho ứng dụng PHP chạy trên Ubuntu 14.04.

Trình xử lý phiên chịu trách nhiệm lưu trữ và truy xuất dữ liệu được lưu vào phiên - theo mặc định, PHP sử dụng tệp cho việc đó. Một trình xử lý phiên bên ngoài được dùng để tạo môi trường PHP có thể mở rộng phía sau bộ cân bằng tải , nơi tất cả các node ứng dụng sẽ kết nối với server trung tâm để chia sẻ thông tin phiên.

Yêu cầu

Ta sẽ làm việc với hai server riêng biệt trong hướng dẫn này. Vì lý do bảo mật và hiệu suất, điều quan trọng là cả hai Server phải được đặt trong cùng một trung tâm dữ liệu với mạng riêng được bật. Đây là những gì bạn cần :

  • Web server PHP chạy LAMP hoặc LEMP trên Ubuntu 14.04 - ta sẽ gọi server này là web
  • Server Ubuntu 14.04 sạch thứ hai, nơi Redis sẽ được cài đặt - ta sẽ gọi server này là redis

Bạn cần quyền truy cập SSH thích hợp vào cả hai server với quyền là regular user có quyền sudo .

Đối với server Redis, bạn cũng có thể sử dụng Ứng dụng một lần nhấp Redis của ta và chuyển sang Bước 2 .

Bước 1 - Cài đặt Server Redis

Điều đầu tiên ta cần làm là có được server Redis và chạy, trên redis của ta server .

Ta sẽ sử dụng trình quản lý gói Ubuntu thông thường với repository PPA tin cậy do Chris Lea cung cấp. Điều này là cần thiết đảm bảo ta nhận được version ổn định mới nhất của Redis.

Như một lời khuyên chung về bảo mật, bạn chỉ nên sử dụng PPA từ các nguồn tin cậy .

Đầu tiên, thêm repository PPA bằng lệnh:

  • sudo add-apt-repository ppa:chris-lea/redis-server

Nhấn ENTER để xác nhận.

Đến đây bạn cần cập nhật bộ nhớ cache của trình quản lý gói:

  • sudo apt-get update

Và cuối cùng, hãy cài đặt Redis bằng lệnh:

  • sudo apt-get install redis-server

Redis bây giờ sẽ được cài đặt trên server của bạn. Để kiểm tra cài đặt, hãy thử lệnh sau:

  • redis-cli ping

Điều này sẽ kết nối với một version Redis chạy trên localhost trên cổng 6379 . Bạn sẽ nhận được một PONG làm phản hồi.

Bước 2 - Cấu hình Redis để chấp nhận các kết nối bên ngoài

Theo mặc định, Redis chỉ cho phép kết nối với localhost , về cơ bản nghĩa là bạn sẽ chỉ có quyền truy cập từ bên trong server nơi Redis được cài đặt. Ta cần thay đổi cấu hình này để cho phép các kết nối đến từ các server khác trên cùng một mạng riêng với server redis .

Điều đầu tiên ta cần làm là tìm ra địa chỉ IP mạng riêng của máy Redis. Các bước sau sẽ được thực hiện trên server redis .

Chạy ifconfig để nhận thông tin về các network interface của bạn:

  • sudo ifconfig

Bạn sẽ nhận được kết quả tương tự như sau:

Output
eth0 Link encap:Ethernet HWaddr 04:01:63:7e:a4:01 inet addr:188.166.77.33 Bcast:188.166.127.255 Mask:255.255.192.0 inet6 addr: fe80::601:63ff:fe7e:a401/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3497 errors:0 dropped:0 overruns:0 frame:0 TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4895060 (4.8 MB) TX bytes:619070 (619.0 KB) eth1 Link encap:Ethernet HWaddr 04:01:63:7e:a4:02 inet addr:10.133.14.9 Bcast:10.133.255.255 Mask:255.255.0.0 inet6 addr: fe80::601:63ff:fe7e:a402/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:648 (648.0 B) TX bytes:578 (578.0 B)

Tìm inet_addr được gán cho giao diện eth1 . Trong trường hợp này, đó là 10.133.14.9 - đây là địa chỉ IP mà ta sẽ sử dụng sau này để kết nối với server redis từ server web .

Sử dụng trình soạn thảo dòng lệnh yêu thích của bạn, mở file /etc/redis/redis.conf và tìm dòng chứa định nghĩa bind . Bạn nên thêm địa chỉ IP mạng riêng của bạn vào dòng, như sau:

  • sudo vim /etc/redis/redis.conf
/etc/redis/redis.conf
bind localhost 10.133.14.9 

Nếu bạn thấy 127.0.0.1 thay vì localhost thì tốt; chỉ cần thêm IP riêng của bạn sau những gì đã có.

Đến đây bạn chỉ cần khởi động lại dịch vụ Redis để áp dụng các thay đổi:

  • sudo service redis-server restart

Nếu bạn đã cài đặt Redis bằng ứng dụng One-click của ta , tên dịch vụ sẽ được redis thay vì redis-server . Để khởi động lại nó, bạn nên chạy: sudo service redis restart .

Với thay đổi này, bất kỳ server nào trong cùng một mạng riêng cũng sẽ có thể kết nối với version Redis này.

Bước 3 - Đặt password cho server Redis

Để thêm một lớp bảo mật bổ sung cho cài đặt Redis của bạn, bạn nên đặt password để truy cập dữ liệu server . Ta sẽ chỉnh sửa cùng một file cấu hình từ bước trước, /etc/redis/redis.conf :

  • sudo vim /etc/redis/redis.conf

Bây giờ, bỏ comment có chứa requirepass và đặt một password mạnh:

/etc/redis/redis.conf
requirepass yourverycomplexpasswordhere 

Khởi động lại dịch vụ Redis để các thay đổi có hiệu lực:

  • sudo service redis-server restart

Bước 4 - Kiểm tra kết nối và xác thực Redis

Để kiểm tra xem tất cả các thay đổi có hoạt động như mong đợi hay không, hãy kết nối với dịch vụ Redis từ bên trong máy redis :

  • redis-cli -h 10.133.14.9
Output
10.133.14.9:6379>

Mặc dù không bắt buộc phải chỉ định tham số host ở đây (vì ta đang kết nối từ localhost ), nhưng ta đã làm điều đó đảm bảo dịch vụ Redis sẽ chấp nhận các kết nối được nhắm đến vào network interface riêng.

Nếu bạn đã xác định password và bây giờ cố gắng truy cập dữ liệu, bạn sẽ gặp lỗi AUTH:

  • keys *
Output
(error) NOAUTH Authentication required.

Để xác thực, bạn chỉ cần chạy lệnh AUTH , cung cấp cùng một password mà bạn đã xác định trong file /etc/redis/redis.conf :

  • AUTH yourverycomplexpasswordhere

Bạn sẽ nhận được phản hồi là OK . Bây giờ nếu bạn chạy:

  • keys *

Đầu ra phải giống như sau :

Output
(empty list or set)

Đầu ra này chỉ nghĩa là server Redis của bạn trống, đó chính xác là những gì ta mong đợi, vì server web chưa được cấu hình để sử dụng server Redis này làm trình xử lý phiên.

Giữ cho phiên SSH này được mở và kết nối với redis-cli trong khi ta thực hiện các bước tiếp theo - ta sẽ quay lại dấu nhắc redis-cli để kiểm tra xem dữ liệu phiên có được lưu trữ đúng cách hay không, sau khi ta áp dụng các thay đổi cần thiết đối với server web .

Bước 5 - Cài đặt Tiện ích mở rộng Redis trên Server Web

Các bước tiếp theo sẽ được thực hiện trên server web . Ta cần cài đặt phần mở rộng PHP Redis, nếu không PHP sẽ không thể kết nối với server Redis.

Trước tiên, hãy cập nhật bộ nhớ cache của trình quản lý gói của bạn bằng lệnh:

  • sudo apt-get update

Sau đó cài đặt gói php5-redis :

  • sudo apt-get install php5-redis

Web server của bạn bây giờ có thể kết nối với Redis.

Bước 6 - Đặt Redis làm Trình xử lý phiên mặc định trên Server Web

Bây giờ ta cần chỉnh sửa file php.ini trên server web để thay đổi trình xử lý phiên mặc định cho PHP. Vị trí của file này sẽ phụ thuộc vào ngăn xếp hiện tại của bạn. Đối với ngăn xếp LAMP trên Ubuntu 14.04, đây thường là /etc/php5/apache2/php.ini . Đối với ngăn xếp LEMP trên Ubuntu 14.04, đường dẫn thường là /etc/php5/fpm/php.ini .

Nếu bạn không chắc chắn về vị trí của file php.ini chính của bạn , một cách dễ dàng để tìm ra là sử dụng hàm phpinfo() . Chỉ cần đặt mã sau vào file có tên info.php bên trong folder root web của bạn:

  • <?php
  • phpinfo();

Khi truy cập tập lệnh từ trình duyệt của bạn, hãy tìm hàng có chứa “Tệp cấu hình đã tải” và bạn sẽ tìm thấy vị trí chính xác của php.ini chính được tải.

Đừng quên xóa file info.php sau đó, vì nó chứa thông tin nhạy cảm về môi trường của bạn.

Mở file php.ini của bạn và tìm kiếm dòng chứa session.save_handler . Giá trị mặc định là files . Bạn nên đổi nó thành redis .

Trên môi trường LAMP :

  • sudo vim /etc/php5/apache2/php.ini

Trên môi trường LEMP :

  • sudo vim /etc/php5/fpm/php.ini
/etc/php5/fpm/php.ini
 session.save_handler = redis 

Đến đây bạn sẽ tìm thấy dòng chứa session.save_path . Bỏ ghi chú nó và thay đổi giá trị để nó chứa chuỗi kết nối Redis. Nội dung phải tuân theo định dạng này, tất cả trong một dòng: tcp://IPADDRESS:PORT?auth=REDISPASSWORD

/etc/php5/fpm/php.ini
 session.save_path = "tcp://10.133.14.9:6379?auth=yourverycomplexpasswordhere" 

Bạn chỉ cần cung cấp xác thực tham số nếu bạn đã đặt password khi cấu hình Redis.

Lưu file và khởi động lại dịch vụ php .

Trên môi trường LAMP :

  • sudo service apache2 restart

Trên môi trường LEMP :

  • sudo service php5-fpm restart

Bước 7 - Kiểm tra xử lý phiên Redis

Để đảm bảo các phiên của bạn hiện được Redis xử lý, bạn cần một tập lệnh PHP hoặc ứng dụng lưu trữ thông tin về các phiên. Ta sẽ sử dụng một tập lệnh đơn giản thực hiện một bộ đếm - mỗi lần bạn reload trang, số được in sẽ tăng lên.

Tạo một file có tên test.php trên server web và đặt nó bên trong folder root tài liệu của bạn:

  • sudo vim /usr/share/nginx/html/test.php

Đừng quên thay đổi /usr/share/nginx/html để phản ánh đường dẫn root tài liệu của bạn.

/usr/share/nginx/html/test.php
  • <?php
  • //simple counter to test sessions. should increment on each page reload.
  • session_start();
  • $count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
  • echo $count;
  • $_SESSION['count'] = ++$count;

Trỏ trình duyệt của bạn đến http:// web /test.php để truy cập tập lệnh. Nó sẽ tăng số lượng mỗi khi bạn reload trang.

Đến đây bạn sẽ có thông tin phiên được lưu trữ trên server Redis. Để xác minh, hãy quay lại phiên SSH của bạn trên máy redis , nơi trước đây ta đã kết nối với dịch vụ Redis bằng redis-cli . Tìm nạp lại nội dung bằng keys * :

  • keys *

Và bạn sẽ nhận được kết quả tương tự như sau:

Output
1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"

Điều này cho thấy rằng thông tin phiên đang được lưu trữ trên server Redis. Bạn có thể kết nối các web server bổ sung với server Redis theo cách tương tự.

Kết luận

Redis là một dịch vụ lưu trữ key-value nhanh và mạnh mẽ, cũng được dùng làm trình xử lý phiên cho PHP, cho phép các môi trường PHP có thể mở rộng bằng cách cung cấp một hệ thống phân tán để lưu trữ phiên. Để biết thêm thông tin về mở rộng ứng dụng PHP, bạn có thể xem bài viết này: Ứng dụng PHP mở rộng theo chiều ngang .


Tags:

Các tin liên quan

Cách cấu hình một cụm Redis trên CentOS 7
2015-07-30
Cách cấu hình cụm Redis trên Ubuntu 14.04
2015-07-16
Cách cấu hình bộ đệm Redis để tăng tốc WordPress trên Ubuntu 14.04
2014-12-15
Cách cấu hình giám sát Sensu, RabbitMQ và Redis trên Ubuntu 14.04
2014-09-29