51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4199|回复: 2
打印 上一主题 下一主题

[原创] php+nginx负载均衡,配置session遇到难题,值得高手深入研究。

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-10-13 16:53:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的服务器是使用session NFS共享方式实现了的!session NFS共享方式配置如下:
首先,修改 php.ini的 session.save_path 选项修改如下:

session.save_path = "2;/tmp/php_sess"  (去掉前面分号)

意为把session存放在 "/tmp/php_sess" 目录下,并且分成 2 级子目录,每级子目录又分别有 16 个子目录。


2.假设php的主目录为 /usr/local/server/php/,则新建一个文件 /usr/local/server/php/include/php/ext/session/mod_files.sh,其内容如下:
#! /bin/sh
# NAME
#      mod_files.sh  - Update of the php-source/ext/session/mod_files.sh
#
# SYNOPSIS
#      mod_files.sh basedir depth [numberofsubdirs]
#
# DESCRIPTION
#      this script creates the directories tree used by php to store the session files
#      (see php.ini - 'session.save_path' option)
#
#      Example: if you want php to store the session files in a directory tree
#      of 3 levels of depth containing 32 directories in each directory,
#      first, put the setting bellow in the php.ini file:
#
#      session.save_path = "3;/tmp/session"
#
#      Now create the basedir directory: 'mkdir /tmp/session'
#
#      Then, call this scrip with the following arguments:
#
#      ./mod_files.sh ./mod_files.sh /tmp/session 3 32

if test "$2" = ""; then
       echo "usage: $0 basedir depth [numberofsubdirs]"
       echo "numberofsubdirs: if unset, defaults to 16. if 32, 32 subdirs, if 64, 64 subdirs."
       exit 1
fi

if test "$2" = "0"; then
       exit 0
fi

hash_chars="0 1 2 3 4 5 6 7 8 9 a b c d e f"
if [ ! -z $3 ] ; then
if test "$3" -a "$3" -eq "32"; then
  hash_chars="$hash_chars g h i j k l m n o p q r s t u v"
  if test "$3" -eq "64"; then
   hash_chars="$hash_chars w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - ,"
  fi
fi
fi

for i in $hash_chars; do
       newpath="$1/$i"
       mkdir $newpath || exit 1
       sh $0 $newpath `expr $2 - 1` $3
done



3.设置为可执行之后,运行以下命令来创建哈希目录:

#cd /usr/local/server/php/include/php/ext/session/
#./mod_files.sh /tmp/php_sess 2 16


4现在,就开始设置 NFS 共享了。假定有3台主机,ip分别为192.168.0.1(主机名svr1)、192.168.0.2(主机名svr2)、192.168.0.3(主机名svr3),现在让192.168.0.1来提供NFS共享服务,配置 /etc/exports,加入如下内容:
/tmp/php_sess/ svr*(rw,no_root_squash)   #(意思是:允许svr*所以的机器来访问)

5.然后重启 nfs 服务,即可对另外两台主机提供NFS共享了。
在 svr2、svr3 上执行以下命令来挂在NFS:
#mkdir /tmp/php_sess
#mount svr1:/tmp/php_sess /tmp/php_sess  




按上面的配置完成 session NFS 共享,但是问题来了,
我在A服务器上使用PHP脚本如下:
sei.php(文件名)

<?php
session_start();
$_SESSION['ID'] ='ABC';
echo $_SESSION['ID'];
?>

然后在B服务下使用PHP脚本如下:
sei.php(文件名)

<?php
session_start();
$_SESSION['ID'];
echo $_SESSION['ID'];
?>

测试:A服务能正常显示ABC 但是B服务不能得到A服务访问的session,不显示ABC,显示全是空白。按道理说,按上面session nfs共享配置,我A服务产生了 ABC,我B服务器能自动读取ABC,应该也显示ABC才对啊!!(session NFS共享测试,是不是我PHP脚本有问题??)
大家帮帮忙。。。错在那 错在那  ?  世界人民救救我!!!


[ 本帖最后由 123498296 于 2009-10-13 17:14 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2009-10-13 17:30:30 | 只看该作者
没高手来帮忙吗  ?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-11-25 14:12:53 | 只看该作者
我也遇到同样的问题,网上这个转载太多了,都是一样的,根本不好用啊!不知道您现在解决没有啊,如解决请指导一下小弟我,呵呵 我的QQ:363451851
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-15 15:37 , Processed in 0.074392 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表