LNMP + Redis 搭建 session 共享
目录
1.前提
三台机器,redisA和redisB能通外网,全都关闭firewalld和SELinux
主机名 | IP |
| redisA | 192.168.4.51 |
| redisB | 192.168.4.52 |
| proxy | 192.68.4.53 |
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2.安装相关软件
#安装 Nginx,或者源码包安装,本文为源码包安装
yum -y install nginx
#安装 MySQL(MariaDB)+PHP
yum -y install mariadb mariadb-server mariadb-devel
yum -y install php php-fpm php-mysql php-cli
# 装 Redis 服务端
yum -y install epel-release
yum -y install redis
systemctl enable --now redis
默认监听 127.0.0.1:6379,无密码,实验够用
#给 PHP 装 redis 扩展
yum -y install php-pecl-redis
echo "extension=redis.so" > /etc/php.d/40-redis.ini
systemctl restart php-fpm
php -m | grep redis # 看到 redis 即 OK
![]()
若是安装扩展有问题,执行下述操作
yum -y install php-devel php-pear gcc make
pecl install redis-4.3.0
3. 配置 PHP:把 session 转存 Redis
编辑 /etc/php.ini,找到 [Session] 段,改成
session.save_handler = redis
session.save_path = "tcp://:6379?database=0"
保存后重启 php-fpm:
systemctl restart php-fpm
4.配置Nginx支持PHP
编辑 /usr/local/nginx/conf/nginx.conf,在 server 块里加:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
检查语法:
/usr/local/nginx/sbin/nginx -t
5.启动所有服务
systemctl restart mariadb
systemctl restart php-fpm
/usr/local/nginx/sbin/nginx
全部设为开机自启:
systemctl enable mariadb php-fpm redis
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
chmod +x /etc/rc.local
6.部署“共享 session”测试程序
在 Nginx 根目录新建两个小文件:
a) /usr/local/nginx/html/login.php
b) /usr/local/nginx/html/whoami.php
";
echo "session_id: " . session_id() . "
";
echo "user: " . (isset($_SESSION['user']) ? $_SESSION['user'] : '未登录') . "
";
echo "login_time: " . date('H:i:s', isset($_SESSION['time']) ? $_SESSION['time'] : 0) . "
";
7.验证 session 是否进 Redis
curl -c cookie.txt http://本机IP/login.php
curl -b cookie.txt http://本机IP/whoami.php

再查 Redis:
redis-cli -n 0 keys "*" # 看到 PHPREDIS_SESSION:*
redis-cli -n 0 get "PHPREDIS_SESSION:刚才的session_id"


8.横向扩展:多台 LNMP 前端共享会话
再开一台新机器,重复上述步骤。
把第 3 步的
session.save_path指向同一台 Redis:session.save_path = "tcp://:6379?database=0" 两台 Nginx 都部署同样代码,负载均衡(DNS/NGINX 反向代理均可)。
浏览器在 A 机登录,带着 cookie 访问 B 机
/whoami.php,仍能读出登录信息 → 完成共享。
9.配置代理
在4.53里安装Nginx,nginx.conf 里加:
upstream lnmp {
server 192.168.4.51:80; # A机
server 192.168.4.52:80; # B机
}
server {
listen 80;
location / {
proxy_pass http://lnmp;
proxy_set_header Host $host;
# 把 session cookie 透传
proxy_set_header Cookie $http_cookie;
}
}
重启Nginx,无报错即配置成功
/usr/local/nginx/sbin/nginx -s reload
10.Windows网页测试

点击刷新

至此成功!
浙公网安备 33010602011771号