如何设置一个Redis的服务器作为一个会话处理程序为PHP在Ubuntu 14.04

Redis是一个开源的键值缓存和存储系统,也被称为以其先进的支持数据结构服务器几种数据类型,如哈希,列表,集合和位图,在其他之中。它也支持聚类,这使得它经常用于高可用性和可扩展的环境。在本教程中,我们将看到如何安装和配置外部Redis的服务器被用作在Ubuntu 14.04上运行PHP应用程序会话处理程序。

介绍

Redis是一个开源的键值缓存和存储系统,也称为数据结构服务器,用于对几种数据类型(例如散列,列表,集合和位图等)的高级支持。 它还支持集群,这使得它经常用于高可用性和可扩展的环境。

在本教程中,我们将看到如何安装和配置一个外部Redis服务器,用作在Ubuntu 14.04上运行的PHP应用程序的会话处理程序。

会话处理程序负责存储和检索保存到会话中的数据-在默认情况下,PHP使用文件的。 外部会话处理器可以用于创建可缩放的PHP环境后面的负载均衡器 ,其中,所有的应用程序的节点将连接到中央服务器共享会话信息。

先决条件

在本教程中,我们将使用两个不同的服务器。 出于安全和性能方面的原因,但重要的是这两个Droplet都位于同一个数据中心与专用网络启用。 这是你需要的:

  • 一个PHP Web服务器正在运行LAMPLEMP在Ubuntu 14.04 -我们将把此服务器作为网络
  • 第二,在Redis的将安装Ubuntu的清洁14.04服务器-我们将把这个服务器的Redis

你需要正确的SSH访问两个服务器与一个普通用户sudo的权限

对于Redis的服务器,也可以使用我们的Redis一点击应用 ,然后跳到第2步

第1步 - 安装Redis服务器

我们需要做的第一件事就是让Redis的服务器运行起来,我们Redis的Droplet。

我们将使用由Chris Lea提供的可信PPA存储库的常规Ubuntu软件包管理器。 这是必要的,以确保我们得到最新的稳定版本的Redis。

作为一般性的安全建议,您应该仅使用来自可信来源的PPA。

首先,通过运行以下命令来添加PPA存储库:

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

ENTER确认。

现在您需要更新软件包管理器缓存:

sudo apt-get update

最后,让我们通过运行以下命令来安装Redis:

sudo apt-get install redis-server

现在Redis应该安装在您的服务器上。 要测试安装,请尝试此命令:

redis-cli ping

这将连接到端口6379上的本地主机上运行一个Redis的实例。 你应该得到一个PONG作为回应。

第2步 - 配置Redis接受外部连接

默认情况下,Redis的只允许连接localhost ,这基本上意味着you'll只能从安装Redis的服务器内部的访问。 我们需要改变这个配置允许从其他服务器到同一专用网络Redis的服务器上的连接。

我们需要做的第一件事是找出Redis机器的专用网络IP地址。 以下步骤应在redis的服务器上执行。

运行ifconfig来获取有关网络接口的信息:

sudo ifconfig

你应该得到类似这样的输出:

    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)

外观为inet_addr分配到eth1接口。 在这种情况下,它是10.133.14.9 -这是我们将使用后连接到从Web服务器的redis的服务器的IP地址。

使用您喜欢的命令行编辑器,打开文件/etc/redis/redis.conf并查找包含该行bind定义。 你应该添加你的专用网络IP地址线,如下所示:

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

如果你看到127.0.0.1而不是localhost那很好; 只是添加你的私人IP之后已经有。

现在你只需要重新启动Redis服务来应用更改:

sudo service redis-server restart

如果你使用我们的一键式应用程序安装的Redis,服务名称将是Redis的 ,而不是Redis的服务器 重新启动它,你应该运行: sudo service redis restart

通过此更改,同一专用网络中的任何服务器也将能够连接到此Redis实例。

第3步 - 为Redis服务器设置密码

要为Redis安装添加额外的安全性层次,建议您设置访问服务器数据的密码。 我们将编辑从以前的工序中,相同的配置文件/etc/redis/redis.conf

sudo vim /etc/redis/redis.conf

现在,取消包含行requirepass ,并设置强密码:

/etc/redis/redis.conf
requirepass yourverycomplexpasswordhere

重新启动Redis服务,以使更改生效:

sudo service redis-server restart

第4步 - 测试Redis连接和验证

为了测试,如果所有的修改和预期一样,从Redis的机内连接到Redis的服务:

redis-cli -h 10.133.14.9
10.133.14.9:6379>

即使没有汇入作业强制指定host位置参数(因为我们是从连接localhost ),我们这样做是为了确保Redis的服务将接受针对专用网络接口的连接。

如果您定义了密码,现在尝试访问数据,您应该得到一个AUTH错误:

keys *
(error) NOAUTH Authentication required.

要验证,你只需要运行AUTH命令,为您提供的定义相同的密码/etc/redis/redis.conf文件:

AUTH yourverycomplexpasswordhere

你应该得到一个确定的答复。 现在如果你运行:

keys *

输出应类似于:

(empty list or set)

此输出只是意味着你Redis的服务器是空的,这正是我们所期望的,因为Web服务器尚未配置为使用此服务器的Redis作为会话处理程序。

保持打开,连接到该SSH会话redis-cli ,而我们进行下一个步骤-我们会回到redis-cli提示检查会话数据被妥善保存,以后我们对Web服务器进行必要的修改。

第5步 - 在Web服务器上安装Redis扩展

接下来的步骤应在Web服务器上执行。 我们需要安装PHP Redis扩展,否则PHP将无法连接到Redis服务器。

首先,通过运行以下命令来更新包管理器高速缓存:

sudo apt-get update

然后安装php5-redis包:

sudo apt-get install php5-redis

您的Web服务器现在应该能够连接到Redis。

第6步 - 将Redis设置为Web服务器上的默认会话处理程序

现在,我们需要编辑php.ini文件中的Web服务器上修改PHP的默认会话处理程序。 此文件的位置将取决于您当前的。 对于在Ubuntu 14.04一的LAMP,这通常是/etc/php5/apache2/php.ini 对于LEMP在Ubuntu 14.04,该路径通常是/etc/php5/fpm/php.ini

如果你不确定你的主要位置php.ini文件,一个简单的方法来找出是使用函数phpinfo() 只要将一个文件名为下面的代码info.php Web根目录下:

<?php
phpinfo();

当从浏览器访问脚本,查找包含“加载配置文件”行,你应该找到主要的确切位置php.ini加载。

不要忘了删除info.php事后文件,因为它包含了有关环境的敏感信息。

打开你php.ini文件,然后搜索包含该行session.save_handler 默认值是files 你应该改变它redis

LAMP环境:

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

LEMP环境:

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

现在,你应该找到包含该行session.save_path 取消注释它并更改值,使其包含Redis连接字符串。 内容应符合下列格式,都在同一个行: tcp://IPADDRESS:PORT?auth=REDISPASSWORD

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

你只需要提供参数AUTH如果你没有配置Redis的时候设置一个密码。

保存文件并重新启动PHP服务。

LAMP环境:

sudo service apache2 restart

LEMP环境:

sudo service php5-fpm restart 

第7步 - 测试Redis会话处理

为了确保您的会话现在由Redis处理,您需要一个PHP脚本或应用程序来存储有关会话的信息。 我们将使用一个简单的脚本来实现一个计数器 - 每次重新加载页面,打印的数字都会增加。

创建一个文件名为test.php Web服务器上,并把它放在你的文档根目录文件夹中:

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

不要忘了更改/usr/share/nginx/html ,以反映您的文档根路径。

/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;

在浏览器中http:// web /test.php才能访问脚本。 它应该增加每次重新加载页面的数字。

现在您应该有会话信息存储在Redis服务器上。 为了验证,回到你的SSH会话Redis的机器,我们以前连接到使用Redis的服务上redis-cli 再次与获取内容keys *

keys *

你应该得到类似这样的输出:

1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"

这表明会话信息存储在Redis服务器上。 您可以以类似的方式将其他Web服务器连接到Redis服务器。

结论

Redis是一个强大而快速的键值存储服务,也可以用作PHP的会话处理程序,通过为会话存储提供分布式系统来实现可扩展的PHP环境。 有关扩展的PHP应用程序的更多信息,你可以查看这篇文章: 水平扩展PHP应用程序