NGINX实现负载均衡,并利用PHP实现session入库
环境介绍:只有一台Centos 7的服务器,利用docker搭建3台lnmp服务器来测试。
Step 1 :利用docker来搭建三台lnmp服务器
docker pull imagine10255/centos6-lnmp-php56
docker run -itd --name lnmp1 -p 8081:80 imagine10255/centos6-lnmp-php56
docker run -itd --name lnmp2 -p 8082:80 imagine10255/centos6-lnmp-php56
docker run -itd --name lnmp3 -p 8083:80 imagine10255/centos6-lnmp-php56
Step 2 :在每台lnmp服务器网站根目录创建index.php文件。端口映射为8081的lnmp,index.php文件中写“8081”,以此类推写好另外两个lnmp docker服务器。
Step 3:修改服务器的nginx.conf文件,来配置负载均衡。
upstream up1{server 47.91.209.222:8081;server 47.91.209.222:8082;server 47.91.209.222:8083;}server {listen 80;server_name www.zpfei.net;location / {proxy_pass http://up1;}.........}
这样在访问nginx.zpfei.net的时候页面上就会以此出现 8081、8082、8083、8081..... 这是负载均衡最简单的实现方式,默认采用轮询的方式。
Step 4:那么问题来了,比如用户在8081的时候登录了网站,然后打开第二个页面的时候,发现被退出了,原因是8081的session并没有同步到8082服务器上来...
当然这里也可以采用ip_hash的方式来防止出现这种问题,但是ip_hash的原理是让同一个ip的用户在下次请求网站时依然分发到第一次请求的服务器,这样做很难做到真正的负载均衡。
怎么解决?可以利用session入库。
顾名思义,session入库就是把session写入到数据库中达到多台服务器同步session的目的。这里主要用到了“session_set_save_handler”这个函数,该函数的主要作用就是用于接管session的六个状态。废话少说,直接看代码。
<?php
header('content-type:text/html;charset=utf-8');//将session存储方式设置为存入数据库的方式
//session.save_handler = files
ini_set("session.save_handler", "user");session_set_save_handler("open", "close", "read", "write", "destroy", "gc");//打开并连接数据库
function open()
{//使用pdo$pdo = new PDO('mysql:host=47.91.209.222;dbname=session','user','000');$pdo->exec('set names utf8');
}//关闭连接
function close()
{//使用pdo$pdo = new PDO('mysql:host=47.91.209.222;dbname=session','user','000');$pdo->exec('set names utf8');$pdo = null;
}//从表中中读信息
function read($session_id)
{//使用pdo$pdo = new PDO('mysql:host=47.91.209.222;dbname=session','user','000');$pdo->exec('set names utf8');$read = $pdo->query("select * from session where session_id='$session_id'")->fetch(PDO::FETCH_ASSOC);return $read["session_info"];
}//将session存入数据库
function write ($session_id,$session_info)
{// echo $session_id. " " . $session_info;//使用pdo$pdo = new PDO('mysql:host=47.91.209.222;dbname=session','user','000');$pdo->exec('set names utf8');$read = $pdo->query("select * from session where session_id='$session_id'")->fetch(PDO::FETCH_ASSOC);if(empty($read)){$time = time();$pdo->exec("insert into session (session_id, session_info, session_life) values ('$session_id', '$session_info', '$time')");}else{$sql = "update session set session_info='$session_info' where session_id='$session_id'";$pdo->exec($sql);}
}//销毁指定session
function destroy($session_id)
{//使用pdo$pdo = new PDO('mysql:host=47.91.209.222;dbname=session','user','000');$pdo->exec('set names utf8');$pdo->exec("delete from session where session_id='$session_id'");
}//删除所有过期的session
function gc()
{}session_start();
//判断是否有sessionvar_dump($_SESSION);
?>
经过测试,这样不管用户怎么刷新,session都会保持不变。
转载于:https://www.cnblogs.com/zhangdaqian/p/11324263.html
NGINX实现负载均衡,并利用PHP实现session入库相关推荐
- 利用Nginx实现负载均衡(反向代理)完全详解
1.常见负载均衡的方式(概念普及) [1]用户手动选择 例如我们玩游戏,服务器会显示当前服务器的状态是拥挤.繁忙.还是空闲,然后用户根据自己实际需要,选择自己想去的服务器. 如果服务器人太多(达到上限 ...
- docker nginx 配置负载均衡
在上篇的文章中我们介绍了docker nginx配置简单的代理 在这篇文章我们介绍docker 利用nginx配置负载均衡 所谓的负载均衡是两台服务器,或者是多台服务器上面部署项目,但是访问的方式是通 ...
- 使用Redis存储Nginx+Tomcat负载均衡集群的Session
配置Tomcat的session共享可以有三种解决方案: 第一种是以负载均衡服务器本身提供的session共享策略,每种服务期的配置是不一样的并且nginx本身是没有的. 第二种是利用web容器本身的 ...
- nginx配置 负载均衡_如何配置NGINX负载平衡
nginx配置 负载均衡 The load balancing is the process of distributing traffic to multiple instances of an a ...
- Nginx+DNS负载均衡
今天看了很多关于nginx负载均衡的博客,人家推荐的都是自己的ip来做负载,但是同样有说DNS负载均衡,刚开始我也是一头雾水,慢慢的分析才知道真正意义上的Nginx+DNS负载均衡. 1. nginx ...
- nginx实现负载均衡的6种方式
nginx实现负载均衡的6种方式 一.负载均衡 1.轮询 2.权重 3.ip_hash 4.最少连接least_conn nginx.conf配置文件内容详解 后续更新 一.负载均衡 nginx负载均 ...
- Nginx网络负载均衡,负载均衡,网络负载,网络均衡
本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...
- Nginx搭建负载均衡集群
(1).实验环境 youxi1 192.168.5.101 负载均衡器 youxi2 192.168.5.102 主机1 youxi3 192.168.5.103 主机2 (2).Nginx负载均衡策 ...
- lnmp架构——nginx的负载均衡
lnmp架构--nginx的负载均衡 1 什么是nginx 2 nginx的作用 3 nginx的特点 4 nginx的安装以及优化 4.1 安装nginx 4.2 优化 5 nginx主配置文件操作 ...
- Nginx+keepalived负载均衡高可用篇第③版
Nginx+keepalived负载均衡高可用篇第③版 对付中.小型企业,假如没有资金去购买昂贵的四/七层负载均衡交换机,那么Nginx是不错的七层负载均衡选择,并且可以通过Nginx + Keepa ...
最新文章
- java 流换行符_【求大神】如何读取含换行符的缓冲流文件
- 创建模块化程序(二)
- 青龙羊毛——58同城修复版(脚本)
- NS2网络模拟(3)-吞吐率
- Together与Visual.Studio.NET的结合使用(二)
- Linux上端口开放常用命令
- VMware虚拟机中调用本机摄像头详解
- Java追加写json_java – ObjectMapper追加文件JSON
- RUNOOB python练习题47 交换两个变量值
- 文件从一台服务器拷贝到另一台服务器
- 一款APP设计的从0到1之:Android设计规范篇(转载)
- Java基础篇:如何嵌套try语句?
- 网页版excel服务器,用excel当数据库,做个简单的网页
- git如何查看缓存区文件内容_[暂存盘已满怎么解决]git暂存区的理解
- GitHub 上有哪些考研神器?
- 利用STM32精确测量电压
- 【lua/aviutl】游戏对话框效果
- Docker错误合集
- 查看CAD图纸时,如何改背景颜色呢?
- matlab三元方程拟合,3元函数拟合及结果.docx
热门文章
- python求解next数组实现KMP算法
- 浅谈LockSupport工具类
- FISCO BCOS源码(5)基本概念
- 【Django 2021年最新版教程30】ubuntu中停止和重启django项目
- linux shell 获取系统当前时间 毫秒
- linux shell awk -F‘:‘ ‘{print $1}‘
- mysql的执行局计划
- linux卸载keystone服务,OpenStack —— 认证服务Keystone(二)
- golang errors 取 错误 信息_golang-标准errors包的学习
- 大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?