Nginx负载均衡会话共享

摘要:
因此,无论负载后端有多少服务器,无论请求分发到哪个服务器,同一用户的cookie都不会改变。也就是说,与cookie对应的会话也是唯一的。

 

 

在使用负载均衡的时候会遇到会话保持的问题,可通过如下方式进行解决

1.使用nginx的ip_hash,根据客户端的来源IP,将请求分配到相同服务器上

2.基于服务端的Session会话共享(mysql/memcache/redis/file)

 

在解决负载均衡会话问题我们需要了解session和cookie。

1.用户第一次请求服务端网站时,服务端会生成对应的session_id,然后存储至客户端浏览器的cookie中。

2.客户端尝试登陆服务端网站时,浏览器的请求头自动携带cookie信息,在cookie信息中保存的则是session_id。

3.客户端登陆服务端网站后,服务端会将session_id存储在本地文件中, 当用户下次请求网站时会去查询用户提交的cookie作为key去存

储里找对应的value(session)

注意: 同一域名下的网站登陆后cookie都是一样的。所以无论负载后端有几台服务器,无论请求分配到哪一台服务器上同一用户的cookie是不会发生变化的。也就是说cookie对应的session也是唯一的。所以,这里只要保证多台业务服务器访问同一个共享服务器(memcache/redis/mysql/file)就行了。

~                             

Nginx负载均衡会话共享第1张

后端web01web02安装PHPadmin

#安装PHPadmin

[root@web02 code]# pwd

/root/code

[root@web02 code]# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.zip

 

#解压

[root@web02 code]# unzip phpMyAdmin-4.9.1-all-languages.zip 

 

#修改PHPadmin配置文件名称

[root@web02 ~]# cd code/phpMyAdmin-4.9.1-all-languages/

[root@web02 phpMyAdmin-4.9.1-all-languages]# cp config.sample.inc.php config.inc.php

 

# 修改远程数据库的地址

[root@web02 phpMyAdmin-4.9.1-all-languages]# vim config.inc.php 

 

Nginx负载均衡会话共享第2张

#修改NGINX配置文件

[root@web02 ~]# #vim /etc/nginx/nginx.conf 

 

[root@web02 ~]# grep "listen 83" /etc/nginx/nginx.conf  -B  1 -A 15

server {

                listen 83;

                server_name _;

                root /root/code/phpMyAdmin-4.9.1-all-languages;

                location / {

                        index index.php index.html;

                }

 

                location ~ .php$ {

                fastcgi_pass 127.0.0.1:9000;

                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

 

                include fastcgi_params;

                }

                }

#检查语法&&加载配置文件

[root@web02 ~]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@web02 ~]# nginx -s reload

 

 

#测试

 

Nginx负载均衡会话共享第3张

现在问题来了  

Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

 

说是没权限

[root@web02 ~]# cd /var/lib/php/session

[root@web02 session]# ls

[root@web02 session]# cd ..

[root@web02 php]# ll

总用量 8

drwxrwx--- 2 root apache 4096 9月  12 03:07 session

drwxrwx--- 2 root apache 4096 9月  12 03:07 wsdlcache

[root@web02 php]# chown -R www.www .

[root@web02 php]# ll

总用量 8

drwxrwx--- 2 www www 4096 9月  12 03:07 session

drwxrwx--- 2 www www 4096 9月  12 03:07 wsdlcache

[root@web02 php]# 

 

 

 现在访问是可以了,输入以下登录用户名 && 密码即可

Nginx负载均衡会话共享第4张

Nginx负载均衡会话共享第5张

 Nginx负载均衡会话共享第6张

#将PHPadmin和nginx的配置文件以及配置用scp推送到另外一台web服务器上重新加载nginx即可

 

 

 

 

 

 

免责声明:文章转载自《Nginx负载均衡会话共享》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mui混合app请求过程处理(缓存、加载、刷新机制)提取网页中的超链接(C#)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Debian9.5解决在root用户下启用VNC后lightdm+Xfce4只能使用root登录,其他用户无法登陆

Debian9.5解决在root用户下启用VNC后lightdm+Xfce4只能使用root登录,其他用户无法登陆最近在研究debian9.5 VNC的问题,当VNC使用tightVNC或tigerVNC软件时候,在root用户下通过命令vncserver启动vnc服务后会遇到进入桌面的时候,使用root可以进入XFCE桌面,使用其他用户的时候,输入用户名...

php session 数据保存在哪里?

SESSION 的数据保存在哪里呢? 当然是在服务器端,但不是保存在内存中,而是保存在文件或数据库中。 默认情况下,php.ini 中设置的 SESSION 保存方式是 files(session.save_handler = files),即使用读写文件的方式保存 SESSION 数据,而 SESSION 文件保存的目录由 session.save_pa...

Jexus 负载均衡

利用Jexus的“多目标反向代理”功能,我们很容易实现多服务器的负载均衡,构成一个WEB服务器集群,大大提高网站的负载能力。 Jexus反向代理有一个特点:如果前端服务器本地网站中有内容,它就会直接使用前端服务器的本地内容,而不会将请求发送给后端服务器。 据我们所知,对于网站,一个ASPX网页上常常会含有图片、JS、CSS等大量的静态文件,其比例甚至可以达...

系统架构之负载均衡【F5 ginxLVSDNS轮询】

在做系统架构规划的时候,负载均衡,HA(高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点,当活动节点出现故障的时候,由备用节点接管)都是经常需要考虑的方案。对应并发及单点故障,考虑负载均衡方案是必不可少的。如果并发不高只是应对单点故障,则通常使用HA方案。 负载均衡(Load Balance)是集群技术(C...

docker安装db2数据库

查询可安装的db2镜像 # docker search db2 [root@docker-servers ~]# docker search db2 INDEX NAME DESCRIPTION S...

MySQL 可重复读 vs 读提交

定义 相关命令 找出当前session或者global的隔离级别 设置当前session的隔离级别命令 定义 对于可重复读(repeatable read),查询只承认在事务启动前就已经commit的数据; 对于读提交(read committed),查询只承认在语句启动前就已经commit的数据; 相关命令 找出当前session或者globa...