2015年3月29日 星期日

[Linux]透過Memcached做跨網站的Memcache及Session存取

上一篇"CentOS上安裝memcached"已經安裝好及設定好Memcached
在單一台主機上已經能利用Memcached做第三方的資料存取
但是如果要利用Memcached做SSO(Single sign-on)單一登入機制
還需要在Apache做額外的設定(有要用到此功能的web server都需要設定)

設定步驟如下

1.先將SERVER1和SERVER2設定相同Domain HostName

hostname [ServerName].[DomainName]

2.設定/etc/php.ini
開啟/etc/php.ini

vi /etc/php.ini

修改以下值(原本的設定可在最前面用;做註解)

session.save_handler = memcached
session.save_path="[Memcached IP]:11211"
session.cookie_domain=.[DomainName]

存檔

以下用兩個測試程式做測試
一、利用Memcached做資料相互存取

SERVER1 TestCode
memcache_put.php



//Server1存入值給Server2讀取
$memcache = new Memcache();  //宣告一個Memcache
$memcache->connect('23.101.8.62', 11211); //連線到Memcache主機
$memcache->set('server1_date', 'Memcache test OK!', 0, 60); //將值存入命名為server1_date
$result = $memcache->get('server1_date'); //取出存入的值
echo $result;

?>

SERVER2 TestCode
memcache_get.php



//Server2只讀取Server1存入的資料
$memcache = new Memcache();  //宣告一個Memcache
$memcache->connect('23.101.8.62', 11211) or die ("Could not connect");  //連線到Memcache主機
$result = $memcache->get('server1_date'); //取出值
echo $result;

?>

二、利用Memcached存取Session
SERVER1 TestCode
session_put.php



//-----初始化設定Start
//如果無權限修改php.ini請做以下初始化設定
$host = '[Memcached IP]';
$port = '11211';
$session_save_path = "tcp://$host:$port?persistent=1&weight;=2&timeout;=2&retry;_interval=10, ,tcp://$host:$port";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);
ini_set("session.cookie_domain", ".[DomainName]");
//------初始化設定End

session_start();
session_register('login_name');
$_SESSION['login_name'] = 'HI I am server01';
print_r($_SESSION);

?>

SERVER2 TestCode
session_get.php



//-----初始化設定Start
//如果無權限修改php.ini請做以下初始化設定
$host = '[Memcached IP]';
$port = '11211';
$session_save_path = "tcp://$host:$port?persistent=1&weight;=2&timeout;=2&retry;_interval=10, ,tcp://$host:$port";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);
ini_set("session.cookie_domain", ".[DomainName]");
//------初始化設定End

session_start();
echo $_SESSION['login_name'];

?>

透過測試就可以完整的利用Memcached做多網站間的資料交換
不過因為Memcached是有開特別的port以及會做到第三方資料的存取
所以之後還需要真對Memcached server上的主機做更詳細的防火牆設定
EX:限定固定的web server IP才能存取

沒有留言:

張貼留言