公司一个项目单点压力越来越大,考虑到稳定性和降压,使用nginx做负载均衡,将请求分发到多个docker上去,这里记录下PHP多服务器间的会话session共享问题,解决方案是把session单独存在一台redis上面。

LB nginx配置:

upstream allserver{server 127.0.0.1:8081 weight=1;server 127.0.0.1:8082 weight=1;server 127.0.0.1:8083 weight=1;
}
server{listen 80;#listen [::]:80;server_name www.sessiontest.com ;#error_page   404   /404.html;
error_log  /data/logs/nginx/www.sessiontest.com_error.log ;
access_log /data/logs/nginx/www.sessiontest.com.log ;   #设定查看Nginx状态的地址location /nginxstatus{stub_status on;access_log on;auth_basic "nginxstatus";auth_basic_user_file htpasswd;}#匹配以jsp结尾的,tomcat的网页文件是以jsp结尾location / {index index.php;proxy_pass   http://allserver;    #在这里设置一个代理,和upstream的名字一样
        #以下是一些反向代理的配置可删除proxy_redirect             off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IPproxy_set_header           Host $host; proxy_set_header           X-Real-IP $remote_addr; proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size       10m; #允许客户端请求的最大单文件字节数client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数proxy_connect_timeout      300; #nginx跟后端服务器连接超时时间(代理连接超时)proxy_send_timeout         300; #后端服务器数据回传时间(代理发送超时)proxy_read_timeout         300; #连接成功后,后端服务器响应时间(代理接收超时)proxy_buffer_size          4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置proxy_busy_buffers_size    64k; #高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传}}

docker 是使用docker-compose编排的

version: '2'services:phpserver1:image: webdevops/php-nginx:latestports:- "8081:80"#links:- redisdepends_on:- redisvolumes:- /data/docker/app1:/appphpserver2:image: webdevops/php-nginx:latestports:- "8082:80"#links:- redisdepends_on:- redisvolumes:- /data/docker/app2:/appphpserver3:image: webdevops/php-nginx:latestports:- "8083:80"#links:- redisdepends_on:- redisvolumes:- /data/docker/app3:/appredis:image: redisports:- 6379:6379

使用docker-compose up 启动

data目录结构

不使用redis时的PHP文件

我们先只开启server1的session赋值

请求前端域名可以发现

只有server1的session id 打印了,session不共享

接下来在每个PHP脚本都设置使用redis保存session

同样只打开server1的session id 写入

再次请求前端url

可以看到server1设置过session id值后,负载到其他server时同样可以使用同一个会话session

PHP session 配置还可以写在php.ini中

session.save_handler = redis
session.save_path = "tcp://redis:6379?auth=passwd"

  

注意如果redis配置了密码的话后面要加auth 验证

除了redis,还支持memcache,mysql

具体可以参考这篇博客

https://www.jianshu.com/p/43a061a4c997

转载于:https://www.cnblogs.com/timseng/p/11003274.html

nginx 之负载均衡 :PHP session 跨多台服务器配置相关推荐

  1. 从0开始,在Linux中配置Nginx反向代理、负载均衡、session共享、动静分离

    写这篇文章花费了我近一周的时间,参考网上许多优秀的博客文章,我不敢说写的很好,至少很全很详细.本文先介绍原理部分,然后再进行实战操作,我认为这样才会有更深的理解,不过这也导致了文章篇幅很长.但是,如果 ...

  2. 解决nginx负载均衡的session共享问题

    之前有写过ubuntu环境下搭建nginx环境,今天来谈一下nginx session共享问题,查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享服务器有多台,用ngi ...

  3. nginx+tomcat+memcache实现负载均衡、session共享

    实验架构图: Table of Contents 1.配置tomcat 2.安装memcache 3.查看tomcat和memcache是否配置好 4.nginx实现负载均衡: 5.客户端进行测试: ...

  4. Nginx负载均衡+tomcat+session共享

    为什么80%的码农都做不了架构师?>>>    本文,是笔者工作之余写的,第一是把之前打系统框架的步骤记录下来.第二是将这个过程,谈不上经验,奉献给正在撘这种框架遇到各种bug,各种 ...

  5. nginx负载均衡的session共享问题的解决方法

    查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享 PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session ...

  6. 使用 Nginx+SpringBoot+Redis 实现负载均衡以及session共享

    一.所需的环境 Redis 存储Session信息 两个Spring Boot 应用,均将session信息托管到上面的Redis Nginx 配置负载均衡策略 反向代理到SpringBoot应用 二 ...

  7. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  8. Nginx+Tomcat+Redis负载均衡实现Session共享

    Nginx+Tomcat+Redis负载均衡实现Session共享 环境描述 tomcat1:192.168.194.100:18080 tomcat2:192.168.194.100:28080 N ...

  9. Linux下Nginx+Resin负载均衡,session问题解决实例

    Linux下Nginx+Resin负载均衡,session问题解决实例 转载:http://blog.chinaunix.net/uid-14007440-id-3150269.html https: ...

最新文章

  1. PHP学习:PHP超全局变量(Superglobal)$GLOBALS的介绍以及和global的区别
  2. 【postgresql初始化失败】initdb: invalid locale settings; check LANG and LC_* environment variables(之二)
  3. linux命令行使用for循环,小弟我使用过的Linux命令之for - Bash中的For循环
  4. DM6467之视频采集(Linux)下MMAP
  5. hadoop家族的各个成员
  6. RabbitMQ AMQP MessageConverter 消息转换器 PDF Image Text 文本 图片 PDF json
  7. Linux异步管道多线程速率测试-原始数据
  8. 我和2035年有个约计算机论文,我和2035有个约
  9. 车险受益人变更需要什么资料?
  10. 微软发布Silverlight 4新版并更新Silverlight Tools和SDK
  11. 安装matplotlib时,报错Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-build-gvyzl2
  12. 打通 C++ 和 C# 关于 COM 组件互相调用的任督二脉
  13. Visual Studio自动生成XML类和JSON类
  14. java中gc是什么_深入理解Java GC
  15. 光驱位改装固态硬盘并装win 和linux双系统
  16. 照片在计算机打不开怎么回事,电脑上图片打不开怎么办
  17. Liunx 创建隐藏文件夹
  18. 如何进行PDF文件翻译?PDF翻译怎么操作
  19. 系统之家安装windows虚拟机安装不成功原因及解决方法
  20. STM32-SPI的NSS详解

热门文章

  1. 点击空白处遮罩层关闭_如何手动关闭win10系统自带的windows defender
  2. oracle imp 00028,oracle中导入.dmp文件时出现IMP-00009 和IMP-00028异常提示
  3. 服务器群安装系统,服务器安装总结
  4. oracle mysql 适配器_Oracle协议适配器错误解决办法
  5. mysql 查询调试_使用MySQL慢速查询日志进行调试
  6. nginx lua连接mysql_OpenResty的安装和在nginx中使用lua直接访问mysql达到数据接口的统一...
  7. 驱动操作硬件的根本操作
  8. oracle主目录自动检测,ORACLE ADDM数据库自动诊断测试
  9. 计算机科学与技术第6次上机实验报告,计算机科学与技术第次实验报告-20210602214116.docx-原创力文档...
  10. boa支持https_Boa: 在 Node.js 中使用 Python