nginx如何共享session

发布时间 - 2019-06-13 00:00:00    点击率:

当nginx做了负载均衡之后,同一个ip的url请求服务器的时候,负载均衡会根据每台服务器的权重等一些设置将请求转发到不同的服务器上去进行处理,这样的话针对一些带有状态请求的情况来说就是个很大的问题,session会无法共享,那么该如何解决呢?

session存在数据库mysql

session保存在数据库中,是把session表和其他的数据表存放在一起,那么当用户只要登录后随便操作了些什么就要去数据库验证一下session的状态,这样无疑加重了mysql数据库的压力;如果数据库也做了集群的话,那么也就是说每个数据库集群的节点都得保存这个session表,而且要保证每个集群的节点中数据库的session表的数据保持一致,实时同步

说明:session保持在数据库,加重了数据库的IO,增大数据库的压力和负担,从而影响数据库的读写性能,而且mysql集群的话也不利于session的实时同步

session存在缓存memcache或者redis中

memcache可以做分布式,php配置文件中设置存储方式为memcache,这样php自己会建立一个session集群,将session数据存储在memcache中。

说明:这种方式来同步session,不会加大数据库的负担,而且安全性比用cookie保存session大大的提高,把session放到内存里面,比从文件中读取要快很多。但是memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。

ip_hash技术

nginx中可以配置,当某个ip下的客户端请求指定(固定,因为根据IP地址计算出一个hash值,根据hash值来判断分配给那台服务器,从而每次该ip请求都分配到指定的服务器)的服务器,这样就可以保证有状态请求的状态的完整性,不至于出现状态丢失的情况,以下是nginx的配置,可以参考一下:

upstream nginx.example.com  
    {   
             server 192.168.1.2:80;   
             server 192.168.1.3:80;  
             ip_hash;  
    }  
    server  
    {  
             listen 80;  
             location /  
             {  
                     proxy_pass  
                    http://nginx.example.com;  
             }  
 }

注意:ip_hash这个方案确实可以保证带有状态的请求的完整性,但是它有一个很大的缺陷,那就是ip_hash方案必须保证Nginx是最前端的服务器(接受真实的ip),如果nginx不是最前端的服务器,还存在中间件(中间服务器什么的),那么nginx获取的ip地址就不是真实的ip地址,那么这个ip_hash就没有任何意义

更多Nginx相关技术文章,请访问Nginx使用教程栏目进行学习! 


# nginx  # php  # mysql  # 分布式  # 中间件  # Cookie  # Session  # redis  # memcache  # 数据库  # 负载均衡  # 是个  # 也不  # 也就  # 就有  # 还会  # 其他的  # 要去  # 些什么  # 作了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 音乐网站服务器如何优化API响应速度?  Laravel如何使用Sanctum进行API认证?(SPA实战)  济南网站建设制作公司,室内设计网站一般都有哪些功能?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  高防服务器:AI智能防御DDoS攻击与数据安全保障  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Laravel如何实现事件和监听器?(Event & Listener实战)  使用Dockerfile构建java web环境  Python高阶函数应用_函数作为参数说明【指导】  三星网站视频制作教程下载,三星w23网页如何全屏?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  MySQL查询结果复制到新表的方法(更新、插入)  js代码实现下拉菜单【推荐】  如何快速打造个性化非模板自助建站?  香港服务器选型指南:免备案配置与高效建站方案解析  如何在阿里云购买域名并搭建网站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  如何挑选优质建站一级代理提升网站排名?  如何在宝塔面板中修改默认建站目录?  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Python函数文档自动校验_规范解析【教程】  制作旅游网站html,怎样注册旅游网站?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  高端网站建设与定制开发一站式解决方案 中企动力  html如何与html链接_实现多个HTML页面互相链接【互相】  如何在建站主机中优化服务器配置?  如何在云服务器上快速搭建个人网站?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Python文件异常处理策略_健壮性说明【指导】  Python并发异常传播_错误处理解析【教程】  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  进行网站优化必须要坚持的四大原则  ,交易猫的商品怎么发布到网站上去?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  如何确保FTP站点访问权限与数据传输安全?  如何快速搭建高效香港服务器网站?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  如何在阿里云香港服务器快速搭建网站?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理