博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx 之负载均衡 :PHP session 跨多台服务器配置
阅读量:6941 次
发布时间:2019-06-27

本文共 2830 字,大约阅读时间需要 9 分钟。

公司一个项目单点压力越来越大,考虑到稳定性和降压,使用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获取用户真实IP        proxy_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:latest    ports:      - "8081:80"#    links:      - redis    depends_on:      - redis    volumes:      - /data/docker/app1:/app  phpserver2:    image: webdevops/php-nginx:latest    ports:      - "8082:80"#    links:      - redis    depends_on:      - redis    volumes:      - /data/docker/app2:/app  phpserver3:    image: webdevops/php-nginx:latest    ports:      - "8083:80"#    links:      - redis    depends_on:      - redis    volumes:      - /data/docker/app3:/app  redis:    image: redis    ports:      - 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 = redissession.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

你可能感兴趣的文章
说说React组件的State
查看>>
央视会玩,2017年春晚或推出VR直播
查看>>
c#扩展方法的使用
查看>>
Xamarin android 调用Web Api(ListView使用远程数据)
查看>>
always on 集群
查看>>
CentOS下LAMP一键yum安装脚本
查看>>
[20180403]关于时区问题.txt
查看>>
满足各种需求,德阳人民医院Wi-Fi覆盖选择飞鱼星
查看>>
疯狂剁手之后 平台帮了谁又肥了谁?
查看>>
8 个必备的PHP功能开发
查看>>
纳德拉:云计算是重要增长点18年目标200亿
查看>>
聚焦“微服务与容器云” 2017CIO时代线下CIO沙龙顺利举行
查看>>
入行数据科学,仅需6步
查看>>
Linux虚拟化技术KVM、QEMU与libvirt的关系(转)
查看>>
特斯联科技携手比特大陆共建国内首家物联网区块链实验室
查看>>
微服务架构
查看>>
数字化转型 Make it REAL
查看>>
Spring实现封装自定义注解@Trimmed清除字符串前后的空格
查看>>
CentOS 7安装过程
查看>>
Fiori里花瓣的动画效果实现原理
查看>>