LNMP + Redis 搭建 session 共享

目录

1.前提

2.安装相关软件

3. 配置 PHP:把 session 转存 Redis

4.配置Nginx支持PHP

5.启动所有服务

6.部署“共享 session”测试程序

7.验证 session 是否进 Redis

8.横向扩展:多台 LNMP 前端共享会话

9.配置代理

10.Windows网页测试


1.前提

三台机器,redisA和redisB能通外网,全都关闭firewalld和SELinux

主机名 

IP
redisA192.168.4.51
redisB192.168.4.52
proxy192.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 前端共享会话

  1. 再开一台新机器,重复上述步骤。

  2. 把第 3 步的 session.save_path 指向同一台 Redis:

    session.save_path = "tcp://:6379?database=0"
  3. 两台 Nginx 都部署同样代码,负载均衡(DNS/NGINX 反向代理均可)。

  4. 浏览器在 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网页测试

点击刷新

至此成功!

posted @ 2026-01-31 22:57  clnchanpin  阅读(8)  评论(0)    收藏  举报