news 2026/4/23 10:47:54

LNMP 架构下 Session 共享方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LNMP 架构下 Session 共享方案

大型 LNMP 架构下 Session 共享方案:替代 ip_hash 解决重复登录问题

在大型网站的 LNMP 架构中,传统 ip_hash 策略已无法满足多服务器集群下的用户登录状态保持需求。当 Nginx 代理进行负载均衡轮询时,用户可能被分配到不同 Web 服务器,而默认 Session 存储在单服务器本地,导致其他服务器无法识别用户登录状态,引发重复登录问题。本文将详细介绍基于 Redis 的 Session 共享方案实现过程,从环境准备到配置部署的完整流程。

一、环境准备与基础部署

1. 传输 LNMP 相关包至 Web 主机

首先需将代理服务器上的 LNMP 软件包分发到两台 Web 服务器(192.168.99.100 和 192.168.99.200),使用 scp 命令完成传输:

[root@proxy~]#scp 1nmp_soft.tar.gz 192.168.99.100:
[root@proxy~]#scp 1nmp_soft.tar.gz 192.168.99.200:

传输过程中需确认主机真实性并输入目标服务器密码,传输成功后将在 Web 主机根目录下获得软件包。

2. 安装 Nginx 及依赖

在 Web1 和 Web2 上分别执行以下操作,完成 Nginx 安装:

(1)解压软件包并进入 Nginx 源码目录

[root@web1~]#tar -xf Inmp_soft.tar.gz
[root@web1 ~]#cd Inmp_soft/
[root@web1 Inmp_soft]#tar -xf nginx-1.22.1.tar.gz
[root@web1 Inmp_soft]#cd nginx-1.22.1/

(2)安装 Nginx 依赖软件:

[root@web1 nginx-1.22.1]#yum install -y gcc make pcre-devel openssl-devel

(3)编译安装 Nginx(编译参数根据实际需求配置)

3. 安装数据库与 PHP 相关组件

为实现动态网页功能,需安装 MariaDB 数据库和 PHP 运行环境:

[root@web1 nginx-1.22.1]#yum install -y mariadb mariadb-server mariadb-devel php php-mysq1nd php-fpm

4. 配置 PHP 与 Nginx 对接

(1)配置 php-fpm 权限

编辑 php-fpm 配置文件,添加 Nginx 用户权限:

[root@web1 nginx-1.22.1]#vim /etc/php-fpm.d/www.conf

添加允许的用户:

listen.acl_users = apache,nginx, nobody

重启 php-fpm 服务:

[root@web1 nginx-1.22.1]#systemctl restart php-fpm.service

(2)修改 Nginx 动态网页配置

编辑 Nginx 主配置文件:

[root@web1 nginx]#vim conf/nginx.conf

配置动态请求转发至 php-fpm:

(3)启动服务并部署测试页面

启动 Nginx 服务并添加默认网页,测试动态页面访问

测试访问动态页面成功:

5. 部署登录测试页面并区分集群节点

(1)解压并拷贝登录演示页面至 Nginx 网页目录

[root@web1 nginx]#tar -xf~/1nmp_soft/php_scripts/php-session-demo.tar.gz
[root@web1 nginx]#cp -r php-session-demo/* html

(2)区分两台 Web 服务器的登录页面,便于测试:

Web1 修改:

[root@web1 nginx]#vim html/index.php

添加标识:<h1>PHP-web1 Login Session</h1>

Web2 修改:

[root@web2 nginx]#vim html/index.php

添加标识:<h1>PHP-web2 Login Session</h1>

(3)修改后效果

Web1 登录页面:

Web2 登录页面:

6. 配置 Nginx 代理负载均衡

(1)在代理服务器(192.168.99.5)的 Nginx 配置中添加 upstream 集群配置

upstreamweb {
server192.168.99.100:80;
server192.168.99.200:80;
}

server{
listen80;
server_namelocalhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location~*\.(jpgs|htm1|mp4)${
expires30d;
}
location/{
proxy_passhttp://web;
roothtml;
indexindex.html index.htm;
}
}

(2)加载配置文件后,通过代理服务器 IP(192.168.99.5)可正常访问集群节点

登入页面

二、Session 与 Cookie 核心原理

要解决重复登录问题,首先需理解 HTTP 无状态协议下的用户状态保持技术:Session 与 Cookie。

1.Cookie

(1)作用:在客户端(浏览器)存储少量非敏感数据(如用户 ID、SessionID、偏好设置),核心用于记住登录状态、行为跟踪等场景。

(2)工作原理

服务器通过Set-Cookie响应头下发 Cookie 给浏览器;

浏览器本地存储 Cookie;

后续请求自动通过Cookie请求头携带数据回传服务器。

(3)生命周期

会话 Cookie:浏览器关闭后失效(无 Expires/Max-Age);

持久 Cookie:设置过期时间后长期有效(如 "记住我" 功能)。

(4)关键属性

Domain/Path:限制 Cookie 生效范围;

Secure:仅 HTTPS 传输;

HttpOnly:禁止 JS 读取(防 XSS);

SameSite:限制跨站传输(防 CSRF)。

2. Session

(1)作用:在服务器端存储敏感会话数据(如用户登录凭证、权限信息),避免敏感数据暴露在客户端。

(2)工作原理

用户首次访问时,服务器生成唯一 Session ID;

通过 Cookie(主流)或 URL 重写将 Session ID 下发给浏览器;

后续请求携带 Session ID,服务器通过该 ID 查询对应会话数据。

(3)生命周期:默认随浏览器关闭失效,可设置超时机制(如 30 分钟无活动销毁)。

3. Cookie 与 Session 核心区别

维度

Cookie

Session

存储位置

客户端(浏览器)

服务器端(内存、数据库、缓存)

数据安全性

较低(可能被篡改 / 窃取)

较高(数据不暴露给客户端)

存储容量

较小(通常 < 4KB)

较大(受服务器资源限制)

生命周期

可手动设置过期时间

随会话结束或超时失效

性能影响

低(客户端处理)

高(需读取服务器存储)

4. 协作流程

(1)用户登录时,服务器验证账号密码;

(2)服务器创建 Session(存储用户 ID),生成 Session ID;

(3)通过Set-Cookie将 Session ID 下发给浏览器;

(4)后续请求自动携带 Session ID;

(5)服务器通过 Session ID 查询会话数据,识别用户身份;

(6)用户退出时,服务器删除 Session 数据并使 Cookie 过期。

5. 关键注意事项

(1)Session 固定攻击:登录成功后需重新生成 Session ID;

(2)Cookie 盗用:需设置 HttpOnly 和 Secure 属性;

(3)分布式 Session:集群环境下需集中存储(如 Redis)避免 Session 丢失。

6. Nginx 默认 Session 存储

在 LNMP 环境中,PHP 的 Session 默认存储路径为/var/lib/php/session/,可通过删除该目录下的 Session 文件强制用户重新登录:

[root@web1 nginx]#rm -rf /var/lib/php/session/sess*

三、Redis 实现 Session 共享(核心方案)

1. 方案原理

Session 共享的核心是让所有 Web 服务器访问同一 Session 存储介质。Redis 作为高性能内存数据库,具备快速读写、支持分布式部署的特性,是 Session 集中存储的理想选择。通过将 Session 数据存储在 Redis 中,所有 Web 服务器均可通过 Redis 获取用户 Session 信息,从而解决集群下的重复登录问题。

2. 安装并配置 Redis

(1)安装 Redis

在代理服务器(192.168.99.5)上安装 Redis(单独部署更优,此处为操作便捷选择代理服务器)

(2)启动 Redis 并验证

[root@proxy nginx]#systemctl start redis
[root@proxy nginx]#ss -ntulp | grep redis

默认 Redis 仅监听本地 127.0.0.1:6379

(3)修改 Redis 配置(允许远程访问)

编辑 Redis 配置文件:

[root@proxy nginx]#vim /etc/redis.conf

注释第 69 行的绑定地址:#bind 127.0.0.1

关闭第 88 行的保护模式:protected-mode no

保存后重启 Redis

[root@proxy nginx]#systemctl restart redis

(4)验证监听地址已改为 0.0.0.0(允许任意地址访问)

3. 安装 phpredis 扩展(PHP 与 Redis 关联)

在 Web1 和 Web2 上安装 phpredis 扩展,使 PHP 能够操作 Redis 数据库

4. 配置 Session 共享

(1)修改 PHP 配置文件

编辑 php-fpm 配置文件:

[root@web1 ~]#vim /etc/php-fpm.d/www.conf
[root@web2 ~]#vim /etc/php-fpm.d/www.conf

(2)在文件末尾添加以下配置,指定 Session 存储方式为 Redis

php_value [session.save_handler] = redis
php_value [session.save_path] = "tcp://192.168.99.5:6379"
php_value [soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
;php_value [opcache.file_cache] = /var/lib/php/opcache

session.save_handler:设置 Session 存储处理器为 Redis

session.save_path:指定 Redis 服务器地址(192.168.99.5)和端口(6379)

(3)重启 php-fpm 服务

[root@web1 ~]#systemctl restart php-fpm.service
[root@web2 ~]#systemctl restart php-fpm.service

四、效果验证

Session 共享配置完成后,通过代理服务器 IP(192.168.99.5)访问登录页面,只需登录一次,即可在 Web1 和 Web2 之间无缝切换,无需重复登录。

登录后访问效果:

五、总结

在大型 LNMP 集群架构中,ip_hash 策略的局限性导致无法解决多服务器间的 Session 共享问题。通过 Redis 实现 Session 集中存储,配合 phpredis 扩展让 PHP 与 Redis 联动,所有 Web 服务器均可访问统一的 Session 数据,彻底解决了负载均衡下的重复登录问题。该方案具备高性能、高可用性和安全性,适用于各类大型分布式网站的用户状态管理场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:53:48

HunyuanOCR参与事实核查:识别图片中篡改的文字信息溯源

HunyuanOCR在事实核查中的应用&#xff1a;识别图片篡改与文字溯源 在社交媒体信息飞速传播的今天&#xff0c;一张看似真实的“政府通知截图”可能只需几分钟就能引发全网恐慌。而背后的真相往往是——这张图上的文字被精心篡改过。随着图像编辑工具日益普及&#xff0c;伪造…

作者头像 李华
网站建设 2026/4/23 10:51:24

宗教典籍整理工程:HunyuanOCR识别经书文字促进学术研究

宗教典籍整理工程&#xff1a;HunyuanOCR识别经书文字促进学术研究 在敦煌藏经洞的微光中翻阅泛黄写卷的研究者&#xff0c;或许很难想象&#xff0c;今天只需上传一张图片&#xff0c;AI就能自动识别出千年之前的梵文注音与汉译对照。这并非科幻场景&#xff0c;而是依托于新一…

作者头像 李华
网站建设 2026/4/23 10:52:40

低成本高精度OCR方案:HunyuanOCR仅需1B参数即可达到SOTA水平

低成本高精度OCR方案&#xff1a;HunyuanOCR仅需1B参数即可达到SOTA水平 在金融票据自动录入、跨境电商商品信息提取、教育扫描阅卷乃至海关通关文档处理等场景中&#xff0c;OCR&#xff08;光学字符识别&#xff09;早已不再是边缘技术&#xff0c;而是支撑业务流转的核心引擎…

作者头像 李华
网站建设 2026/4/23 10:51:29

腾讯混元OCR实战案例分享:复杂票据与卡证信息提取精准高效

腾讯混元OCR实战案例&#xff1a;复杂票据与卡证信息提取的精准高效之道 在银行柜台处理开户申请时&#xff0c;你是否曾因身份证照片反光、角度倾斜导致系统反复识别失败&#xff1f;在医院档案数字化项目中&#xff0c;面对成千上万张模糊的老病历扫描件&#xff0c;传统OCR工…

作者头像 李华