Nginx-redis【会话保持】

news2024/11/8 15:24:59

什么是会话保持

  • 当用于登录一个网站服务器, 网站服务器会将用户的登录信息存储下来(存储session),以保证我们能一直处于登录在线的状态

为什么要做会话保持

  • 由于我们使用的是负载均衡轮询机制,会导致用户请求分散在不同的节点,从而造成会话无法保持

如何实现会话保持

  • 1、粘性session:指nginx每次都将统一用户的所有请求转发到同一台服务,使用IP_hash机制
  • 2、session复制:即每次session发生变化时,就广播给集群中的服务器,是所有的服务器的session相同,tomcat_cluster中会自动同步
  • 3、session共享:缓存session到内存数据库中,使用redis,memcached
  • 4、session持久化:将session存储到数据库中,像操作数据一样操作session

演示案例【phpmyadmin】

LB

192.168.200.120

web-01

192.168.200.121

web-02

192.168.200.122

redis

192.168.200.123

mysql

192.168.200.127

web-01安装、配置

cat > /etc/yum.repos.d/nginx.repo << OK
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
OK

## 下载nginx
[root@nginx]# yum -y install nginx
[root@nginx conf.d]# cd /etc/nginx/conf.d/


[root@nginx conf.d]# rpm -e $(rpm -a | grep php)
[root@nginx conf.d]# rm -rf /etc/php.ini.rpmsave

[root@nginx PHP]# cat >  /etc/yum.repos.d/php.repo << OK
[webtatic-php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
OK

## 下载php
[root@nginx PHP]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb

## 修改nginx、php启动用户
[root@nginx conf.d]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf
[root@nginx conf.d]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
[root@nginx conf.d]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf

[root@nginx conf.d]# mv default.conf{,.bak}

## 创建虚拟主机配置文件
[root@nginx conf.d]# vim phpmyadmin.conf 
server {
  listen 80;
  server_name www.php-myadmin.org;
  root /code/phpmy;
  location / {
    index index.php;
  }
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

## 检查语法
[root@nginx conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@nginx conf.d]# systemctl enable php-fpm.service 
[root@nginx conf.d]# systemctl start php-fpm.service

[root@nginx conf.d]# systemctl enable nginx.service
[root@nginx conf.d]# systemctl start nginx.service

## 创建目录、下载代码包
[root@nginx conf.d]# mkdir /code/
[root@nginx conf.d]# cd /code/

[root@nginx code]# unzip phpMyAdmin-4.9.11-all-languages.zip
[root@nginx code]# chown -R www.www phpMyAdmin-4.9.11-all-languages
[root@nginx code]# ln -s phpMyAdmin-4.9.11-all-languages /code/phpmy

## 配置
[root@nginx code]# cp phpmy/config.sample.inc.php  /code/phpmy/config.inc.php

[root@nginx code]# vim phpmy/config.inc.php
.....
$cfg['Servers'][$i]['host'] = '192.168.200.127';
.....


[root@nginx code]# chown -R www.www /var/lib/php/session/
[root@nginx code]# systemctl reload nginx.service

mysql创建用户

[root@mysql-master ~]# yum -y install mariadb-service mariadb

[root@mysql-master ~]# systemctl start mariadb
[root@mysql-master ~]# systemctl enable mariadb

[root@mysql-master ~]# mysqladmin -uroot password

[root@mysql-master ~]# mysql -uroot -p111
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant all on *.* to myadmin@'%' identified by '111';
Query OK, 0 rows affected (0.00 sec)

测试访问

 

web-02安装、配置

cat > /etc/yum.repos.d/nginx.repo << OK
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
OK

## 下载nginx
[root@nginx]# yum -y install nginx
[root@nginx conf.d]# cd /etc/nginx/conf.d/


[root@nginx conf.d]# rpm -e $(rpm -a | grep php)
[root@nginx conf.d]# rm -rf /etc/php.ini.rpmsave

[root@nginx PHP]# cat >  /etc/yum.repos.d/php.repo << OK
[webtatic-php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
OK

## 下载php
[root@nginx PHP]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb

## 修改nginx、php启动用户
[root@nginx conf.d]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf
[root@nginx conf.d]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
[root@nginx conf.d]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf

[root@nginx conf.d]# mv default.conf{,.bak}

## 创建虚拟主机配置文件
[root@nginx conf.d]# vim phpmyadmin.conf 
server {
  listen 80;
  server_name www.php-myadmin.org;
  root /code/phpmy;
  location / {
    index index.php;
  }
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

## 检查语法
[root@nginx conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@nginx conf.d]# systemctl enable php-fpm.service 
[root@nginx conf.d]# systemctl start php-fpm.service

[root@nginx conf.d]# systemctl enable nginx.service
[root@nginx conf.d]# systemctl start nginx.service

## 创建目录、下载代码包
[root@nginx conf.d]# mkdir /code/
[root@nginx conf.d]# cd /code/

[root@nginx code]# unzip phpMyAdmin-4.9.11-all-languages.zip
[root@nginx code]# chown -R www.www phpMyAdmin-4.9.11-all-languages
[root@nginx code]# ln -s phpMyAdmin-4.9.11-all-languages /code/phpmy

## 配置
[root@nginx code]# cp phpmy/config.sample.inc.php  /code/phpmy/config.inc.php

[root@nginx code]# vim phpmy/config.inc.php
.....
$cfg['Servers'][$i]['host'] = '192.168.200.127';
.....


[root@nginx code]# chown -R www.www /var/lib/php/session/
[root@nginx code]# systemctl reload nginx.service

接入LB

[root@nginx conf.d]# vim phpmyadmin.conf
upstream phpmy {
  server 192.168.200.121:80;
  server 192.168.200.122:80;
}
server {
  listen 80;
  server_name www.php-myadmin.org;
    location / {
      proxy_pass http://phpmy;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

[root@nginx conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx conf.d]# systemctl reload nginx.service

测试【域名解析到LB】

[root@lb conf.d]# vim phpmyadmin.conf
  
upstream phpmy {
  server 192.168.200.121:80;
  server 192.168.200.122:80;
}
server {
  listen 80;
  server_name www.php-myadmin.org;
    location / {
      proxy_pass http://phpmy;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

[root@lb conf.d]# systemctl reload nginx.service
  •  接入LB后,发现登录不上了,因为是轮询调度,session一直在发生变化

配置IP_hash【会话保持】测试

upstream phpmy {
  ip_hash;
  server 192.168.200.121:80;
  server 192.168.200.122:80;
}
server {
  listen 80;
  server_name www.php-myadmin.org;
    location / {
      proxy_pass http://phpmy;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

[root@nginx conf.d]# systemctl reload nginx.service
  •  登录成功,但是发现无论怎么刷新,都是被调度到固定节点,显然使用ip_hash如果同一时间出现高并发,后端某台服务压力瞬增

 安装、配置redis实现【会话保持】

[root@redis~]# yum -y install redis

[root@nginx ~]# sed -i '/^bind/c bind 127.0.0.1 192.168.200.123' /etc/redis.conf
[root@nginx ~]# systemctl enable redis
[root@nginx ~]# systemctl start redis

[root@nginx ~]# netstat -lntp | grep redis
tcp        0      0 192.168.200.123:6379    0.0.0.0:*               LISTEN      2260/redis-server 1 
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      2260/redis-server 1

配置将web的php应用服务的session信息,存储到redis中

  • php使用php71w-pecl-redis-3.1.6模块
  • 如果redis有密码,要将auth=111添加到配置文件中
[root@nginx code]# rpm -qa | grep php | grep redis
php71w-pecl-redis-3.1.6-1.w7.x86_64

## 修改配置
[root@nginx code]# vim /etc/php.ini
;session.save_handler = files
session.save_handler = redis
session.save_path = "tcp://192.168.200.123:6379?&weight=1&timeout=2.5"

## 注释一下内容
[root@nginx code]# vim /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session

[root@nginx code]# systemctl restart php-fpm

配置LB

[root@nginx conf.d]# vim /etc/nginx/conf.d/phpmyadmin.conf 
upstream phpmy {
  server 192.168.200.121:80;
  server 192.168.200.122:80;
}
server {
  listen 80;
  server_name www.php-myadmin.org;
    location / {
      proxy_pass http://phpmy;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

[root@nginx conf.d]# systemctl reload nginx.service

测试

 登录redis查看session

[root@nginx ~]# redis-cli 
127.0.0.1:6379> KEYS *
1) "PHPREDIS_SESSION:76700eb33b48322e8159cfbbd9921d08"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx页面优化

文章目录 nginx页面优化一.nginx优化1.版本号1.1查看版本号1.2修改版本号1.2.1修改配置文件1.2.2修改源码文件&#xff0c;重新编译安装 2.nginx的日志分割2.1 写日志分割的脚本2.2给脚本执行权限、执行2.3创建定时任务可以每个月固定分割一次 3.nginx的页面压缩3.1配置3.2验证…

第1讲 Camera Sensor Driver课程简介

更多资源&#xff1a; 资源描述在线课程极客笔记在线课程知识星球星球名称&#xff1a;深入浅出Android Camera 星球ID: 17296815Wechat极客笔记圈 课程内容介绍 目标&#xff1a; 课程主要帮助大家理解camera sensor基本概念及原理知识&#xff0c;理解高通camera sensor驱…

前端开发——常用案例分享

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

美one,不想只做李佳琦背后的MCN

文 | 螳螂观察 作者 | 青月 今年618&#xff0c;处在消费提振的关键时期&#xff0c;又面临着行业竞争日趋激烈&#xff0c;各大电商平台都希望能交出一份让市场满意的“期中答卷”&#xff0c;直播不可避免的成为了“兵家必争之地”。 京东请来了罗永浩与“交个朋友”入驻&a…

抖音seo矩阵系统源码|需求文档编译说明(二)

目录 1.抖音seo矩阵系统文档开发流程 2.各平台源码编译方式说明 3.底层技术功能表达式 1.抖音seo矩阵系统文档开发流程 ①产品原型 ②需求文档 ③产品流程图 ④部署方式说明 ⑤完整源码 ⑥源码编译方式说明 ⑦三方框架和SDK使用情况说明和代码位置 ⑧平台操作文档 ⑨程序架…

完美外贸企业邮箱签名设置指南:提升专业形象,优化商务沟通

邮箱签名是一个很好的方式&#xff0c;让您的外贸企业觉得你的公司比较专业。它可以包括公司名称和标志&#xff0c;联系信息和其他相关信息。以下是一些指导原则&#xff0c;可以帮助您创建适合您业务的邮箱签名: 第一步:选择一个合适的Logo 选择一个适合你的企业的标志是很重…

踏响新中国钢铁工业的铿锵足音《淬火丹心》湖北卫视热血开播

由湖北省广播电视局、湖北广播电视台、湖北长江华晟影视有限责任公司等联合摄制&#xff0c;向勇执导&#xff0c;唐曾、吕一、王雨、董晴等主演的大型现代工业题材剧《淬火丹心》&#xff0c;将于6月25日登陆湖北卫视长江剧场开播。该剧以年轻一代中国钢铁人的励志成长为主线&…

排序算法——计数排序

计数排序 以升序排序为例 文章目录 计数排序什么是计数排序实现思路具体步骤实现代码时间复杂度和局限性时间复杂度局限性 什么是计数排序 计数排序是一个非基于比较的排序算法&#xff0c;该算法于1954年由 Harold H. Seward 提出基本思想&#xff1a;是对于给定的输入序列中…

运算放大器(一):电压跟随器

一、电压跟随器 电压跟随器&#xff08;单位增益放大器、缓冲放大器或隔离放大器&#xff09;是一种电压放大倍数为 1 的运算放大器&#xff0c;能够将输入信号的电压放大到同样的幅度并输出&#xff0c;同时保持输入输出电阻不变&#xff08;电压跟随器的输入电阻很大&#x…

Python网络编程:socket包的用法

持续补充 1 网络编程 网络编程&#xff0c;主要用于两台或多台计算机之间的通信&#xff0c;也可以是同一台计算机内不同进程之间的通信。Socket套接字可以用来实现网络通信。关于Socket套接字&#xff0c;需要注意以下几点&#xff1a; Socket是网络通信中应用层和传输层之间…

安装numpy

pip install numpy1.21.6 -i https://mirrors.aliyun.com/pypi/simple/ 最外面的python.exe 是默认版本 下载包----第二种方式

调用有道API实现图片翻译

调用有道API实现图片翻译 1&#xff0e;作者介绍2&#xff0e;关于理论方面的知识介绍3&#xff0e;调用有道API实现图片翻译实验3.1官方代码与结果3.2解码3.3换行输出3.4 示例展示 1&#xff0e;作者介绍 周慧龙&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff…

心电图机原理及电路超详细讲解

心电图机原理及电路超详细讲解 心电图主要器件导联单极导联和双极导联威尔逊中心端加压导联胸导联 心电图机的结构电路框图介绍输入部分过压保护电路高频滤波电路低压保护及缓冲放大器屏蔽驱动电路导联选择起搏脉冲抑制与定标电路肌电滤波、时间常数电路、封闭电路与电极异常检…

【OC底层_消息发送与转发机制原理】

文章目录 前言动态类型动态绑定为何为动态语言&#xff1f; 什么是消息传递选择子SELIMPIMP和SEL的关系 消息发送1. 快速查找objc_msgSend()的执行流程objc_msgSend()深基核心逻辑及其参数解析源码解析消息发送的快速查找总结&#xff1a;objc_msgSend(receiver, sel, …)对于b…

接口测试Post请求提交数据的四种类型

常见的post提交数据类型有四种&#xff1a; 第一种&#xff1a;application/json 这是最常见的json格式&#xff0c;也是非常友好的深受小伙伴喜欢的一种&#xff0c;如下 {“input1”:“xxx”,“input2”:“ooo”,“remember”:false} 第二种&#xff1a;application/x-www…

【MySQL实战】笔记

1、MySQL的基本架构组成 MySQL的基本架构组成包括以下几个部分&#xff1a; 连接器&#xff08;Connection Manager&#xff09;&#xff1a;负责与客户端建立连接&#xff0c;并处理客户端发送的请求。连接器会验证客户端的身份、分配线程和缓存等资源&#xff0c;并将请求转…

pdf转excel怎么样格式不乱?这两个方法轻松转换!

PDF和Excel是广泛应用的文件格式&#xff0c;然而&#xff0c;将PDF转换为Excel时&#xff0c;常常面临格式混乱的问题。幸运的是&#xff0c;我们有记灵在线工具和Adobe Acrobat Pro软件这两个简单而有效的方法&#xff0c;可以帮助我们将PDF转换为Excel并保持格式整齐。本文将…

复旦微7045环境安装

Linux Petalinux 0.下载 更换下载源&#xff1a;https://blog.csdn.net/u012308586/article/details/102737950 更换中文&#xff1a;https://cloud.tencent.com/developer/article/2159346 1.配置 配置/bin/sh 由于 petalinux 用到的/bin/sh 命令都是 bash 的&#xff0c…

好用又强大的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点

作为一款强大易用的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。 控制台 控制台是一个 Halo 站点的后台管理系统,只有具有权限…